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> 的緩衝區中傳回媒體變更計數,並將 Information 字段設定為 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]。

規格需求

需求
標頭 ntddstor.h (包含 Ntddstor.h)

另請參閱

IOCTL_STORAGE_CHECK_VERIFY2