0

我正在开发低级 (SCSI) 存储过滤器驱动程序。驱动程序拦截读取 IO 并将数据以较小的块写入其他位置。在极少数情况下,驱动程序读取的数据已损坏。驱动程序的流程是这样的:

  1. 接收 IRP 和 MDL
  2. 使用 IoBuildPartialMdl() 函数构建驱动程序 IRP 和 MDL。
  3. 发送原始 IRP 并等待响应。
  4. 使用“自定义”构建 MDL 发送驱动程序 IRP
  5. 等待响应并回复上层。

在第 4 步中,数据有时会损坏。需要说明的是,并非所有数据都已损坏,并且通常在不久之前对该数据有单独的 IO 请求。这里发生了什么?我使用的 MDL 不正确吗?

4

1 回答 1

0

显然,MDL 可能包含数据将被损坏的间隙。正确的解决方法是复制数据。 http://msdn.microsoft.com/en-us/library/windows/hardware/gg463193.aspx

于 2012-10-30T12:11:20.677 回答