Функция KeRegisterBugCheckCallback (wdm.h)

Подпрограмма KeRegisterBugCheckCallback регистрирует подпрограмму BugCheckCallback, которая выполняется, когда операционная система выдает ошибку проверка.

Синтаксис

BOOLEAN KeRegisterBugCheckCallback(
  [out]          PKBUGCHECK_CALLBACK_RECORD  CallbackRecord,
  [in]           PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine,
  [in, optional] PVOID                       Buffer,
  [in]           ULONG                       Length,
  [in]           PUCHAR                      Component
);

Параметры

[out] CallbackRecord

Указатель на запись обратного вызова, которая ранее была инициализирована KeInitializeCallbackRecord, для которой вызывающий объект предоставляет неоплаченное хранилище.

[in] CallbackRoutine

Указатель на предоставленную драйвером функцию обратного вызова KBUGCHECK_CALLBACK_ROUTINE.

[in, optional] Buffer

Указатель на буфер, предоставленный вызывающим объектом, который должен находиться в постоянной памяти, например в непакетном пуле.

[in] Length

Задает размер буфера, выделенного вызывающим объектом, в байтах.

[in] Component

Указатель на строку ANSI, завершающуюся null, которая идентифицирует вызывающий объект. Эта строка обычно содержит имя драйвера устройства или, возможно, его устройства.

Возвращаемое значение

KeRegisterBugCheckCallback возвращает значение TRUE, если предоставленная вызывающим абонентом подпрограмма успешно добавлена в набор зарегистрированных обратных вызовов проверка ошибок; в противном случае возвращается значение FALSE.

Комментарии

Подпрограмма KeRegisterBugCheckCallback регистрирует подпрограмму BugCheckCallback, простейший вид процедуры обратного вызова проверка ошибок.

Для регистрации других типов обратных вызовов проверка ошибок, таких как процедуры KbCallbackDumpIo и KbCallbackAddPages, используйте вместо этого подпрограмму KeRegisterBugCheckReasonCallback.

Подпрограмма BugCheckCallback выполняется, когда система выдает проверка ошибок. Драйвер может использовать подпрограмму для сброса устройства до известного состояния. Дополнительные сведения см. в разделе BugCheckCallback.

Драйверы могут использовать подпрограмму KeDeregisterBugCheckCallback для удаления обратного вызова. Любой драйвер, который можно выгрузить, должен удалить все обратные вызовы в процедуре выгрузки .

Строка компонента используется для идентификации драйвера во время отладки аварийного дампа. Чтобы отобразить данные аварийного дампа, соответствующие любой указанной строке компонента , можно использовать расширение отладчика !bugdump . Также можно отлаживать ошибку проверка саму процедуру обратного вызова. Сведения об отладчиках и расширениях отладчика см. в разделе Отладка Windows.

Реализация

Чтобы определить подпрограмму обратного вызова BugCheckCallback, необходимо сначала предоставить объявление функции, определяющее тип определяемой процедуры обратного вызова. Windows предоставляет набор типов функций обратного вызова для драйверов. Объявление функции с помощью типов функций обратного вызова помогает анализу кода для драйверов, средству проверки статических драйверов (SDV) и другим средствам проверки находить ошибки.

Например, чтобы определить подпрограмму обратного вызова BugCheckCallback с именем MyBugCheckCallback, используйте тип KBUGCHECK_CALLBACK_ROUTINE, как показано в следующем примере кода:

KBUGCHECK_CALLBACK_ROUTINE MyBugCheckCallback;

Затем реализуйте процедуру обратного вызова следующим образом:

_Use_decl_annotations_
VOID
  MyBugCheckCallback(
    PVOID  Buffer,
    ULONG  Length
    )
  {
      // Function body
  }

Тип функции KBUGCHECK_CALLBACK_ROUTINE определен в файле заголовка Wdm.h.

Чтобы более точно определить ошибки при запуске средств анализа кода, не забудьте добавить в _Use_decl_annotations_ annotation определение функции. Заметка Use_decl_annotations гарантирует использование заметок, применяемых к типу функции KBUGCHECK_CALLBACK_ROUTINE в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в разделе Объявление функций с помощью типов ролей функций для драйверов WDM. Сведения о Use_decl_annotations см. в статье О поведении функции.

Требования

Требование Значение
Минимальная версия клиента Доступно начиная с Windows 2000.
Целевая платформа Универсальное
Верхняя часть wdm.h (включая Wdm.h, Ntddk.h, Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Любой уровень

См. также раздел

Написание процедуры обратного вызова для проверки ошибок.

KeDeregisterBugCheckCallback

KeInitializeCallbackRecord

KeRegisterBugCheckReasonCallback