IOCTL_STORAGE_CHECK_VERIFY IOCTL (ntddstor.h)
确定媒体是否已在调用方打开的可移动媒体设备上发生更改,以便进行读取或写入访问。 如果不需要对设备的读取或写入访问权限,调用方可以通过使用FILE_READ_ATTRIBUTES打开设备并发出IOCTL_STORAGE_CHECK_VERIFY2 请求来提高性能。
有关详细信息,请参阅 支持可移动媒体。
主要代码
输入缓冲区
无。
输入缓冲区长度
无。
输出缓冲区
(可选)对于磁盘和 CD-ROM 设备,Irp-AssociatedIrp.SystemBuffer> 指向缓冲区以接收媒体更改计数。 仅当 Parameters.DeviceIoControl.OutputBufferLength 不为零且返回值STATUS_SUCCESS时,驱动程序才会填充此缓冲区。 媒体更改计数是一个 ULONG,指示自驱动程序启动以来媒体更改的次数。
否则,此请求没有输出。
输出缓冲区长度
(可选)对于磁盘和 CD-ROM 设备,IRP 的 I/O 堆栈位置中的 Parameters.DeviceIoControl.OutputBufferLength 指示缓冲区的大小(以字节为单位),该缓冲区必须 >= sizeof (ULONG) 。 如果未指定可选缓冲区,则此字段为零。
否则,此请求没有输入。
状态块
如果磁盘或 CD-ROM 驱动程序没有指示介质已更改,驱动程序会将 “状态” 字段设置为STATUS_SUCCESS。 此外,如果指定了可选的媒体更改缓冲区,驱动程序将在 Irp-AssociatedIrp.SystemBuffer> 的缓冲区中返回媒体更改计数,并将“信息”字段设置为 sizeof (ULONG) 。 如果未指定可选的媒体更改缓冲区,驱动程序会将 “信息” 设置为零。
如果驱动程序检测到媒体已更改,并且卷已装载 (VPB_MOUNTED 在 VPB) 中设置,则它必须:
- 将 “信息” 设置为零。
- 将 “状态” 设置为“STATUS_VERIFY_REQUIRED”。
- 在 DeviceObject 中设置DO_VERIFY_VOLUME标志。
- 使用输入 IRP 调用 IoCompleteRequest 。
- 将 “状态” 设置为“STATUS_IO_DEVICE_ERROR”。
- 将 “信息” 设置为零。
- 使用 IRP 调用 IoCompleteRequest 。
对于磁带驱动程序, “信息” 字段设置为零,“ 状态” 字段设置为STATUS_SUCCESS,或者可能设置为STATUS_VERIFY_REQUIRED。
要求
要求 | 值 |
---|---|
Header | ntddstor.h (包括 Ntddstor.h) |