IoRaiseHardError 函式 (ntddk.h)
IoRaiseHardError 例程會導致對話框出現,警告使用者發生裝置 I/O 錯誤,這可能表示實體裝置失敗。
語法
void IoRaiseHardError(
[in] PIRP Irp,
[in, optional] PVPB Vpb,
[in] PDEVICE_OBJECT RealDeviceObject
);
參數
[in] Irp
因為裝置 I/O 錯誤而失敗的 IRP 指標。
[in, optional] Vpb
磁碟區參數區塊的指標 (掛接的檔案物件) VPB) 。 如果沒有 VPB 與裝置對象相關聯,這個參數就會是 NULL 。
[in] RealDeviceObject
裝置物件的指標,代表 I/O 作業失敗的實體裝置。
傳回值
無
備註
最高層級驅動程式,特別是文件系統驅動程式,呼叫 IoRaiseHardError。
警告
因為 IoRaiseHardError 使用一般核心 APC 來建立使用者對話方塊,所以如果發生裝置錯誤時停用一般核心 APC,就會發生死結。 例如:
高階篩選驅動程式會呼叫 KeEnterCriticalRegion (,以停用一般核心 APC) ,並將 I/O 要求傳送至文件系統驅動程式。 篩選驅動程式會在篩選驅動程式呼叫 KeLeaveCriticalRegion (之前,等候文件系統驅動程式完成要求,) 重新啟用一般核心 APC。
文件系統上發生錯誤,而文件系統驅動程式會呼叫 IoRaiseHardError ,向使用者回報錯誤。 檔案系統驅動程式會在對話框上等候。
死結現在存在: IoRaiseHardError 所建立的一般核心 APC 會建立對話框,等候啟用一般核心 APC。 檔系統會在對話框完成 I/O 要求之前等候。 篩選驅動程式會在呼叫 KeLeaveCriticalRegion 之前等候I/O要求完成, (重新啟用一般核心APC) 。
此例程的行為取決於執行中線程的硬性錯誤目前狀態。 如果呼叫 IoSetThreadHardErrorMode來停用硬性錯誤,此例程會完成 Irp所指定的 IRP ,而不需將數據傳送到用戶緩衝區。 此外,不會傳送任何訊息來通知使用者此失敗。
規格需求
需求 | 值 |
---|---|
目標平台 | Universal |
標頭 | ntddk.h (包含 Ntddk.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | IRQL <= APC_LEVEL |
DDI 合規性規則 | HwStorPortProhibitedDIS (storport) 、 IrqlIoApcLte (wdm) |