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,就會發生死結。 例如:

  1. 高階篩選驅動程式會呼叫 KeEnterCriticalRegion (,以停用一般核心 APC) ,並將 I/O 要求傳送至文件系統驅動程式。 篩選驅動程式會在篩選驅動程式呼叫 KeLeaveCriticalRegion (之前,等候文件系統驅動程式完成要求,) 重新啟用一般核心 APC。

  2. 文件系統上發生錯誤,而文件系統驅動程式會呼叫 IoRaiseHardError ,向使用者回報錯誤。 檔案系統驅動程式會在對話框上等候。

  3. 死結現在存在: 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)

另請參閱

IoGetRelatedDeviceObject

IoSetHardErrorOrVerifyDevice

IoSetThreadHardErrorMode