我正在开发低级 (SCSI) 存储过滤器驱动程序。驱动程序拦截读取 IO 并将数据以较小的块写入其他位置。在极少数情况下,驱动程序读取的数据已损坏。驱动程序的流程是这样的:
- 接收 IRP 和 MDL
- 使用 IoBuildPartialMdl() 函数构建驱动程序 IRP 和 MDL。
- 发送原始 IRP 并等待响应。
- 使用“自定义”构建 MDL 发送驱动程序 IRP
- 等待响应并回复上层。
在第 4 步中,数据有时会损坏。需要说明的是,并非所有数据都已损坏,并且通常在不久之前对该数据有单独的 IO 请求。这里发生了什么?我使用的 MDL 不正确吗?