检查设备对象中的标志

对于向可移动媒体请求 I/O 操作的每个 IRP,可移动媒体设备驱动程序必须确定其 DeviceObject-Flags> 中是否已设置DO_VERIFY_VOLUME。 如果设置了此值,驱动程序必须执行以下操作:

  • 对于IRP_MJ_READIRP_MJ_WRITEIRP_MJ_DEVICE_CONTROL请求,检查是否在驱动程序IO_STACK_LOCATION结构的 Flags 成员中设置SL_OVERRIDE_VERIFY_VOLUME。 如果是,请继续请求的操作。

    当 IFS 装载或重新装载可移动媒体卷时,返回有关基础媒体逻辑结构信息的设备控制请求SL_OVERRIDE_VERIFY_VOLUME I/O 堆栈位置的 Flags 成员中设置。

  • 否则,驱动程序必须在其 DeviceObject-Flags> 中设置DO_VERIFY_VOLUME时拒绝对相应的驱动器、设备或分区执行 I/O 请求。 可移动媒体驱动程序必须使发送到相应设备的 IRP 失败,直到 FSD 清除可移动媒体驱动程序的 DeviceObject> 标志中的DO_VERIFY_VOLUME。

如果可移动媒体设备驱动程序在设置DO_VERIFY_VOLUME时未使 IRP 失败,并且未为上述传输请求设置SL_OVERRIDE_VERIFY_VOLUME,则文件系统既不能维护缓存文件数据的完整性,也不能提示用户重新装载保存打开文件的媒体。