다음을 통해 공유


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

호출자를 식별하는 null로 끝나는 ANSI 문자열에 대한 포인터입니다. 이 문자열은 일반적으로 디바이스 드라이버의 이름 또는 해당 디바이스의 이름을 포함합니다. 가상 메모리 시스템을 사용할 수 없는 경우 버그 검사 처리 중에 액세스할 수 있으므로 문자열은 페이징되지 않은 메모리에 할당되어야 합니다.

반환 값

KeRegisterBugCheckCallback 은 호출자 제공 루틴이 등록된 버그 검사 콜백 집합에 성공적으로 추가되면 TRUE를 반환합니다. 그렇지 않으면 FALSE를 반환합니다.

발언

KeRegisterBugCheckCallback 루틴은 가장 간단한 종류의 버그 확인 콜백 루틴인 BugCheckCallback 루틴을 등록합니다.

KbCallbackDumpIoKbCallbackAddPages 루틴과 같은 다른 종류의 버그 확인 콜백을 등록하려면 대신 KeRegisterBugCheckReasonCallback 루틴을 사용합니다.

BugCheckCallback 루틴은 시스템에서 버그 검사를 실행할 때 실행됩니다. 드라이버는 루틴을 사용하여 디바이스를 알려진 상태로 다시 설정할 수 있습니다. 자세한 내용은 BugCheckCallback참조하세요.

드라이버는 KeDeregisterBugCheckCallback 루틴을 사용하여 콜백을 제거할 수 있습니다. 언로드할 수 있는 모든 드라이버는 언로드 루틴에서 모든 콜백을 제거해야 합니다.

구성 요소 문자열은 크래시 덤프 디버깅 중에 드라이버를 식별하는 데 사용됩니다. 지정된 구성 요소 문자열에 해당하는 크래시 덤프 데이터를 표시하려면 !bugdump 디버거 확장을 사용할 수 있습니다. 버그 확인 콜백 루틴 자체를 디버그할 수도 있습니다. 디버거 및 디버거 확장에 대한 자세한 내용은 Windows 디버깅을 참조하세요.

Implementation

BugCheckCallback 콜백 루틴을 정의하려면 먼저 정의하는 콜백 루틴의 유형을 식별하는 함수 선언을 제공해야 합니다. Windows는 드라이버에 대한 콜백 함수 형식 집합을 제공합니다. 콜백 함수 형식을 사용하여 함수를 선언하면 드라이버에 대한 코드 분석, SDV(정적 드라이버 검증 도구) 및 기타 확인 도구에서 오류를 찾는 데 도움이 됩니다.

예를 들어 MyBugCheckCallback이라는 BugCheckCallback 콜백 루틴을 정의하려면 다음 코드 예제와 같이 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
대상 플랫폼 보편적
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
라이브러리 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL 모든 수준

참고 항목

버그 검사 콜백 루틴 작성

KeDeregisterBugCheckCallback

KeInitializeCallbackRecord

KeRegisterBugCheckReasonCallback