하드웨어 오류 이벤트 알림 등록
새 하드웨어 오류 이벤트에 대한 알림을 받도록 등록하기 위해 애플리케이션은 Microsoft-Windows-Kernel-WHEA/Errors 채널에서 발생하는 모든 이벤트에 대한 구독을 만듭니다.
이 채널은 서버 시나리오에 권장됩니다. 데이터를 즉시 사람이 읽을 수 있는 것은 아니지만 ACPI/UEFI 정의 CPER(Common Platform Error Record)입니다. Microsoft-Windows-WHEA-Logger 공급자와 비교하여 이 형식은 각 하드웨어 오류 이벤트의 정확한 세부 사항에 대해 훨씬 더 자세히 설명합니다.
다음 코드 예제에서는 새 하드웨어 오류 이벤트의 알림에 등록 하는 방법을 보여 줍니다.
// Prototype for the notification callback function
DWORD WINAPI HwErrorEventCallback(
EVT_SUBSCRIBE_NOTIFY_ACTION Action,
PVOID Context,
EVT_HANDLE EventHandle
);
// Function to create a subscription to all hardware error
// events that are raised by the WHEA provider.
EVT_HANDLE SubscribeHwErrorEvents(VOID)
{
EVT_HANDLE SubHandle;
// Create a subscription to all events that are sent
// to the WHEA channel.
#if (WINVER <= _WIN32_WINNT_LONGHORN)
SubHandle =
EvtSubscribe(
NULL,
NULL,
L"Microsoft-Windows-Kernel-WHEA",
L"*",
NULL,
NULL,
HwErrorEventCallback,
EvtSubscribeToFutureEvents
);
#else
SubHandle =
EvtSubscribe(
NULL,
NULL,
L" Microsoft-Windows-Kernel-WHEA/Errors",
L"*",
NULL,
NULL,
HwErrorEventCallback,
EvtSubscribeToFutureEvents
);
#endif
// Return the subscription handle
return SubHandle;
}
// Notification callback function
DWORD WINAPI HwErrorEventCallback(
EVT_SUBSCRIBE_NOTIFY_ACTION Action,
PVOID Context,
EVT_HANDLE EventHandle
)
{
// Check the action
if (Action == EvtSubscribeActionDeliver) {
// Process the hardware error event
ProcessHwErrorEvent(EventHandle);
}
// Return success status
return ERROR_SUCCESS;
}
// Function to terminate the subscription
VOID UnsubscribeHwErrorEvents(EVT_HANDLE SubHandle)
{
// Close the subscription handle
EvtClose(SubHandle);
}
참고
이전 예제에서 사용된 모든 EvtXxx 함수 및 EVT_XXX 데이터 형식은 Microsoft Windows SDK 설명서의 Windows 이벤트 로그 섹션에 설명되어 있습니다.