响应来自文件系统的 Check-Verify 请求
文件系统可以自行决定将 IRP 发送到设备驱动程序的 Dispatch 入口点 ,以IRP_MJ_DEVICE_CONTROL 请求,其中 I/O 堆栈位置设置为以下 参数.DeviceIoControl.IoControlCode :
IOCTL_XXX_CHECK_VERIFY
其中 XXX 是设备类型,例如 DISK、TAPE 或 CDROM。
类型 DISK 包括不可分区 (软盘) 和可分区的可移动媒体设备。
如果基础设备驱动程序确定媒体未更改,则驱动程序应完成 IRP,并返回具有以下值的 IoStatus 块:
Status |
设置为 STATUS_SUCCESS |
信息 |
设置为零 |
此外,如果设备类型为 DISK 或 CDROM,并且调用方指定了输出缓冲区,驱动程序将在 Irp-AssociatedIrp.SystemBuffer> 处返回缓冲区中的媒体更改计数,并将 Irp-IoStatus.Information> 设置为 sizeof (ULONG) 。 通过返回此计数,驱动程序使调用方有机会从其角度确定媒体是否已更改。
如果基础设备驱动程序确定媒体已更改,它会采取不同的操作,具体取决于是否装载卷。 如果在 VPB) 中设置VPB_MOUNTED标志 (装载卷,驱动程序应执行以下操作:
使用 DO_VERIFY_VOLUME 设置 DeviceObject by ORing 标志中的标志 。
将 IRP 中的 IoStatus 块设置为以下内容:
- 状态 设置为STATUS_VERIFY_REQUIRED
- 信息 设置为零
使用输入 IRP 调用 IoCompleteRequest 。
如果未装载卷,驱动程序不得设置DO_VERIFY_VOLUME位。 驱动程序应将 IoStatus.Status 设置为 STATUS_IO_DEVICE_ERROR,将 IoStatus.Information 设置为零,并使用 IRP 调用 IoCompleteRequest 。