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