PSHED_PI_RETRIEVE_ERROR_INFO回呼函式 (ntddk.h)
PSHED 外掛程式的 RetrieveErrorInfo 回呼函式會擷取有關發生硬體錯誤的平臺特定錯誤資訊。
語法
PSHED_PI_RETRIEVE_ERROR_INFO PshedPiRetrieveErrorInfo;
NTSTATUS PshedPiRetrieveErrorInfo(
[in, out, optional] PVOID PluginContext,
[in] PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource,
[in] ULONGLONG BufferLength,
[in, out] PWHEA_ERROR_PACKET Packet
)
{...}
參數
[in, out, optional] PluginContext
當 PSHED 外掛程式呼叫 PshedRegisterPlugin 函式以向 PSHED 註冊本身時,在WHEA_PSHED_PLUGIN_REGISTRATION_PACKET結構的內容成員中指定的內容區域指標。
[in] ErrorSource
描述回報硬體錯誤之錯誤來源 之WHEA_ERROR_SOURCE_DESCRIPTOR 結構的指標。
[in] BufferLength
Packet 參數所指向之緩衝區的大小,以位元組為單位。
[in, out] Packet
描述硬體錯誤硬體錯誤封包之 WHEA_ERROR_PACKET 結構的指標。
傳回值
PSHED 外掛程式的 RetrieveErrorInfo 回呼函式會傳回下列其中一個 NTSTATUS 代碼:
傳回碼 | Description |
---|---|
STATUS_SUCCESS | 硬體錯誤封包已成功更新,其中包含任何平臺特定的錯誤資訊。 |
STATUS_BUFFER_TOO_SMALL | BufferLength 參數所指定的緩衝區大小太小,無法包含硬體錯誤封包,如果它以平臺特定的錯誤資訊更新。 |
STATUS_NOT_SUPPORTED | PSHED 外掛程式不支援指定的錯誤來源。 |
STATUS_UNSUCCESSFUL | 發生錯誤。 |
備註
參與錯誤資訊擷取的 PSHED 外掛程式會設定 Callbacks.RetrieveErrorInfo, Callbacks.FinalizeErrorRecord,以及 WHEA_PSHED_PLUGIN_REGISTRATION_PACKET 結構的 Callbacks.ClearErrorStatus 成員,以指向其 RetrieveErrorInfo、FinalizeErrorRecord 和 ClearErrorStatus 回呼函式,當外掛程式呼叫 PshedRegisterPlugin 函式以向 PSHED 註冊本身。 PSHED 外掛程式也必須在 WHEA_PSHED_PLUGIN_REGISTRATION_PACKET 結構的 FunctionalAreaMask 成員中設定 PshedFAErrorInfoRetrieval 旗標。
每個低階硬體錯誤處理程式 (LLHEH) 呼叫 PSHED,以擷取已發生硬體錯誤的任何平臺特定錯誤資訊。 如果 PSHED 外掛程式已註冊以參與錯誤資訊擷取,PSHED 會呼叫 PSHED 外掛程式的 RetrieveErrorInfo 回呼函式,使其可以使用任何平臺特定的錯誤資訊來更新硬體錯誤封包。 PSHED 外掛程式可以修改硬體錯誤封包的現有內容,並將補充資訊新增至硬體錯誤封包。 補充資訊會新增至硬體錯誤封包,從 WHEA_ERROR_PACKET 結構的RawDataOffset成員所指定的位移開始。
PSHED 外掛程式必須確定它不會在硬體錯誤封包結尾之外新增補充資訊。 LLHEH 配置給緩衝區以包含特定硬體錯誤封包的記憶體數量,是從描述錯誤來源之WHEA_ERROR_SOURCE_DESCRIPTOR結構的 MaxRawDataLength 成員計算。 如果 PSHED 外掛程式需要額外的緩衝區空間才能包含補充資訊,它必須參與錯誤來源探索,並針對每個錯誤來源適當地考慮任何補充資訊,並在 WHEA_ERROR_SOURCE_DESCRIPTOR每個錯誤來源的 MaxRawDataLength 成員中增加值。
針對所有錯誤來源,PSHED 外掛程式的 RetrieveErrorInfo 回呼函式至少會呼叫DISPATCH_LEVEL IRQL。 PSHED 外掛程式的 RetrieveErrorInfo 回呼函式只能執行作業,並呼叫該高 IRQL 層級允許的其他函式。
PSHED 外掛程式的 RetrieveErrorInfo 回呼函式的重要工作是確保WHEA_ERROR_PACKET之 ErrorSeverity 成員所指定的錯誤條件嚴重性是適當的。 例如,如果 LLHEH 回報錯誤條件的嚴重性層級為 WheaErrSevFatal ,但 PSHED 外掛程式支援所報告特定錯誤狀況的復原機制,PSHED 外掛程式可以將嚴重性層級變更為 WheaErrSevRecoverable ,讓操作系統嘗試從錯誤中復原。 同樣地,如果錯誤狀況的嚴重性層級回報為 WheaErrSevRecoverable ,但 PSHED 外掛程式會辨識嘗試復原所報告的特定錯誤狀況只會造成進一步的問題,PSHED 外掛程式可以將嚴重性層級變更為 WheaErrSevFatal ,讓操作系統不會嘗試從錯誤中復原。
針對修正的硬體錯誤,PSHED 外掛程式必須擷取其從 其 RetrieveErrorInfo 回呼函式中處理錯誤條件所需的所有錯誤狀態資訊,因為硬體錯誤的處理其餘部分不保證會與 LLHEH 同步處理。
規格需求
需求 | 值 |
---|---|
目標平台 | 桌面 |
標頭 | ntddk.h (包含 Ntddk.h) |
IRQL | IRQL >= DISPATCH_LEVEL |