Регистрация для уведомления о событиях ошибок оборудования
Чтобы зарегистрироваться для получения уведомлений о новых событиях ошибок оборудования, приложение создает подписку на все события, создаваемые каналом Microsoft-Windows-Kernel-WHEA/Errors .
Этот канал рекомендуется использовать для серверных сценариев. Хотя данные не доступны для чтения человеком, они являются определяемой ACPI или UEFI общей записью ошибки платформы (CPER). По сравнению с поставщиком 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, которые использовались в предыдущих примерах, описаны в разделе Журнал событий Windows документации по Microsoft Windows SDK.