Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Подпрограмма 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".
Implementation
Чтобы определить подпрограмму обратного вызова 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_ в определение функции. Заметка Use_decl_annotations_ гарантирует, что используются заметки, применяемые к типу функции KBUGCHECK_CALLBACK_ROUTINE в файле заголовка. Дополнительные сведения о требованиях к объявлениям функций см. в разделе "Объявление функций с помощью типов ролей функций для драйверов WDM". Сведения о Use_decl_annotations см. в разделе " Поведение функции аннотирования".
Требования
| Требование | Ценность |
|---|---|
| Минимальный поддерживаемый клиент | Windows 2000 |
| целевая платформа | Всеобщий |
| Header | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
| Library | NtosKrnl.lib |
| DLL | NtosKrnl.exe |
| IRQL | Любой уровень |