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> 的缓冲区中返回媒体更改计数,并将“信息”字段设置为 sizeof (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。

要求

要求
Header ntddstor.h (包括 Ntddstor.h)

另请参阅

IOCTL_STORAGE_CHECK_VERIFY2