IOCTL_STORAGE_CHECK_VERIFY IOCTL (ntddstor.h)

确定媒体在调用方打开的可移动媒体设备上是否已更改,以便进行读取或写入访问。 如果不需要对设备的读取或写入访问权限,则调用方可以通过打开具有FILE_READ_ATTRIBUTES的设备并发出IOCTL_STORAGE_CHECK_VERIFY2 请求来提高性能。

有关详细信息,请参阅 支持可移动媒体

主要代码

IRP_MJ_DEVICE_CONTROL

输入缓冲区

没有。

输入缓冲区长度

没有。

输出缓冲区

(可选)对于磁盘和 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 中设置),则必须:

  1. 信息 设置为零。
  2. 状态 设置为STATUS_VERIFY_REQUIRED。
  3. DeviceObject 中设置DO_VERIFY_VOLUME标志。
  4. 使用输入 IRP 调用 IoCompleteRequest
如果驱动程序检测到媒体已更改,但卷未装载,则驱动程序不得设置DO_VERIFY_VOLUME位。 相反,它应执行以下作:
  1. 将状态 设置为STATUS_IO_DEVICE_ERROR。
  2. 信息 设置为零。
  3. 使用 IRP 调用 IoCompleteRequest
如果驱动程序检测到STATUS_BUFFER_TOO_SMALL、STATUS_INSUFFICIENT_RESOURCES或设备错误等错误,则会将 信息 设置为零,并在 状态 字段中设置相应的错误值。

对于磁带驱动程序,信息 字段设置为零,状态 字段设置为STATUS_SUCCESS,或者可能设置为STATUS_VERIFY_REQUIRED。

要求

要求 价值
标头 ntddstor.h (包括 Ntddstor.h)

另请参阅

IOCTL_STORAGE_CHECK_VERIFY2