通知檔案系統可能的媒體變更
卸載式媒體設備磁碟機必須確保裝置的媒體不會變更 DeviceObject 所代表裝置的媒體, (輸入傳送 IRP 的每個驅動程式常式,每當驅動程式處理要求傳輸至媒體或影響媒體之裝置 I/O 控制作業的 IRP 時,都會傳送 IRP) 。 如果實體裝置一律通知驅動程式有關這些狀態變更,則檢查已變更媒體的最佳時機是在從無媒體存在狀態轉換為媒體存在狀態之後。
如果其實體裝置指出在驅動程式開始 I/O 作業之前,媒體的狀態可能已經變更,或在作業期間,驅動程式必須執行下列動作:
確認已掛接磁片區,方法是檢查 VPB中的 VPB_MOUNTED 旗標。 (如果磁片區未掛接,驅動程式不得設定DO_VERIFY_VOLUME位。驅動程式應將IoStatus.Status設定為 STATUS_IO_DEVICE_ERROR、將IoStatus.Information設定為零,並使用 IRP.) 呼叫IoCompleteRequest
使用 DO_VERIFY_VOLUME 設定DeviceObject中的旗標。
將 IRP 中的 IoStatus 區塊設定為下列各項:
- 狀態 設定為 STATUS_VERIFY_REQUIRED
- 資訊 設定為零
使用 [狀態] 欄位未設定為 [STATUS_SUCCESS] 的任何 IRP 完成任何 IRP 之前,驅動程式必須呼叫IoIsErrorUserInduced,這會針對下列任何狀態值傳回布林值TRUE:
- STATUS_VERIFY_REQUIRED
- STATUS_NO_MEDIA_IN_DEVICE
- STATUS_WRONG_VOLUME
- STATUS_UNRECOGNIZED_MEDIA
- STATUS_MEDIA_WRITE_PROTECTED
- STATUS_IO_TIMEOUT
- STATUS_DEVICE_NOT_READY
如果 IoIsErrorUserInduced 傳回 TRUE,驅動程式必須呼叫 IoSetHardErrorVerifyDevice ,讓 FSD 可以開啟對話方塊給使用者,然後可以選擇提供正確的媒體、重試原始要求,或取消要求的作業。