在中间驱动程序中设置 IRP

文件系统驱动程序和可移动媒体设备驱动程序之间分层的任何中间驱动程序必须在 IRP 中设置下一个较低级别的驱动程序的 I/O 堆栈位置。 从传入 IRP_MJ_READIRP_MJ_WRITEIRP_MJ_DEVICE_CONTROL 请求中,中间驱动程序在设置较低级别的驱动程序的 I/O 堆栈位置时,必须将自己的 I/O 堆栈位置 标志 复制到下一级别驱动程序的 I/O 堆栈位置。

如果中间驱动程序为较低级别的可移动媒体驱动程序分配新的 IRP,则必须按如下所示设置这些 IRP:

  • 对于传输请求,它必须在每个驱动程序分配的 IRP 中,从原始 IRP 中 Tail.Overlay.Thread 的值设置线程上下文。

  • 对于 IRP_MJ_READIRP_MJ_WRITEIRP_MJ_DEVICE_CONTROL 请求,它必须将 I/O 堆栈位置 标志 从原始 IRP 复制到每个驱动程序分配的 IRP。

否则,文件系统既无法维护缓存文件数据的完整性,也无法提示用户重新装载保存打开文件的媒体。