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 处返回缓冲区中的媒体更改计数,并将 信息 字段设置为 大小(ULONG)。 如果未指定可选的媒体更改缓冲区,驱动程序会将 信息 设置为零。
如果驱动程序检测到媒体已更改并且卷已装载(VPB_MOUNTED在 VPB 中设置),则必须:
- 将 信息 设置为零。
- 将 状态 设置为STATUS_VERIFY_REQUIRED。
- 在 DeviceObject 中设置DO_VERIFY_VOLUME标志。
- 使用输入 IRP 调用 IoCompleteRequest。
- 将状态 设置为STATUS_IO_DEVICE_ERROR。
- 将 信息 设置为零。
- 使用 IRP 调用 IoCompleteRequest。
对于磁带驱动程序,信息 字段设置为零,状态 字段设置为STATUS_SUCCESS,或者可能设置为STATUS_VERIFY_REQUIRED。
要求
要求 | 价值 |
---|---|
标头 | ntddstor.h (包括 Ntddstor.h) |