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 구조체의 Context 멤버에 지정된 컨텍스트 영역에 대한 포인터입니다.

[in] ErrorSource

하드웨어 오류를 보고한 오류 원본을 설명하는 WHEA_ERROR_SOURCE_DESCRIPTOR 구조체에 대한 포인터입니다.

[in] BufferLength

Packet 매개 변수가 가리키는 버퍼의 크기(바이트)입니다.

[in, out] Packet

하드웨어 오류에 대한 하드웨어 오류 패킷을 설명하는 WHEA_ERROR_PACKET 구조체에 대한 포인터입니다.

반환 값

PSHED 플러그 인의 RetrieveErrorInfo 콜백 함수는 다음 NTSTATUS 코드 중 하나를 반환합니다.

반환 코드 설명
STATUS_SUCCESS 하드웨어 오류 패킷이 플랫폼별 오류 정보로 업데이트되었습니다.
STATUS_BUFFER_TOO_SMALL BufferLength 매개 변수에 지정된 패킷 매개 변수가 가리키는 버퍼의 크기가 너무 작아서 플랫폼별 오류 정보로 업데이트되는 경우 하드웨어 오류 패킷을 포함할 수 없습니다.
STATUS_NOT_SUPPORTED PSHED 플러그 인은 지정된 오류 원본을 지원하지 않습니다.
STATUS_UNSUCCESSFUL 오류가 발생했습니다.

설명

오류 정보 검색에 참여하는 PSHED 플러그 인은 Callbacks.RetrieveErrorInfo를 설정합니다. 플러그 인이 PshedRegisterPlugin 함수를 호출하여 PSHED에 등록할 때 해당 RetrieveErrorInfo, FinalizeErrorRecordClearErrorStatus 콜백 함수를 가리키도록 WHEA_PSHED_PLUGIN_REGISTRATION_PACKET 구조의 Callbacks.FinalizeErrorRecordCallbacks.ClearErrorStatus 멤버입니다. 또한 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_PACKETErrorSeverity 멤버가 지정한 오류 조건의 심각도가 적절한지 확인하는 것입니다. 예를 들어 오류 조건의 심각도 수준이 LLHEH에 의해 WheaErrSevFatal 로 보고되지만 PSHED 플러그 인이 보고된 특정 오류 조건에 대한 복구 메커니즘을 지원하는 경우 PSHED 플러그 인은 심각도 수준을 WheaErrSevRecoverable 로 변경하여 운영 체제가 오류로부터 복구를 시도할 수 있도록 할 수 있습니다. 마찬가지로 오류 조건의 심각도 수준이 LLHEH에서 WheaErrSevRecoverable 로 보고되지만 PSHED 플러그 인이 보고된 특정 오류 조건의 복구를 시도하면 추가 문제만 발생한다는 것을 인식하는 경우 PSHED 플러그 인은 심각도 수준을 WheaErrSevFatal 로 변경하여 운영 체제가 오류에서 복구를 시도하지 않도록 할 수 있습니다.

수정된 하드웨어 오류의 경우 하드웨어 오류 처리의 나머지 부분을 LLHEH와 동기화할 수 없으므로 PSHED 플러그 인은 RetrieveErrorInfo 콜백 함수 내에서 오류 조건을 처리하는 데 필요한 모든 오류 상태 정보를 검색해야 합니다.

요구 사항

요구 사항
대상 플랫폼 데스크톱
머리글 ntddk.h(Ntddk.h 포함)
IRQL IRQL >= DISPATCH_LEVEL

추가 정보

ClearErrorStatus

FinalizeErrorRecord

PshedRegisterPlugin

WHEA_ERROR_PACKET

WHEA_ERROR_SOURCE_DESCRIPTOR

WHEA_PSHED_PLUGIN_REGISTRATION_PACKET