共用方式為


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 要求之前等候。 篩選驅動程式會在 I/O 要求完成時等候,再呼叫 KeLeaveCriticalRegion (這會重新啟用一般核心 APC)。

此例程的行為取決於執行中線程的硬式錯誤目前狀態。 如果呼叫 IoSetThreadHardErrorMode來停用硬性錯誤,此例程會完成 Irp 所指定的 IRP,而不需要將數據傳輸到用戶緩衝區。 此外,不會傳送任何訊息來通知使用者此失敗。

要求

要求 價值
目標平臺 普遍
標頭 ntddk.h (包括 Ntddk.h)
連結庫 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL IRQL <= APC_LEVEL
DDI 合規性規則 HwStorPortProhibitedDIs(storport)IrqlIoApcLte(wdm)

另請參閱

IoGetRelatedDeviceObject

IoSetHardErrorOrVerifyDevice

IoSetThreadHardErrorMode