KBUGCHECK_CALLBACK_ROUTINE 콜백 함수(wdm.h)

BugCheckCallback 루틴은 시스템에서 버그 검사 발급할 때마다 실행됩니다.

KBUGCHECK_REASON_CALLBACK_ROUTINE 콜백 함수는 이 이전 콜백보다 더 많은 기능을 제공합니다.

구문

KBUGCHECK_CALLBACK_ROUTINE KbugcheckCallbackRoutine;

void KbugcheckCallbackRoutine(
  [in] IN PVOID Buffer,
  [in] IN ULONG Length
)
{...}

매개 변수

[in] Buffer

콜백이 등록될 때 지정된 버퍼에 대한 포인터입니다.

[in] Length

Buffer 매개 변수가 가리키는 버퍼의 길이(바이트)를 지정합니다.

반환 값

없음

설명

드라이버는 시스템에서 버그 검사 발급하는 경우 디바이스를 알려진 상태로 다시 설정하는 BugCheckCallback을 제공할 수 있습니다.

KeRegisterBugCheckCallback을 사용하여 BugCheckCallback 루틴을 등록합니다. 이후에 드라이버는 KeDeregisterBugCheckCallback 루틴을 사용하여 콜백을 제거할 수 있습니다. 드라이버를 언로드할 수 있는 경우 언로드 루틴에서 등록된 콜백을 제거해야 합니다.

BugCheckCallback 루틴은 수행할 수 있는 작업에서 강력하게 제한됩니다. 자세한 내용은 버그 검사 콜백 루틴 작성을 참조하세요. 루틴은 READ_PORT_XXX, READ_REGISTER_XXX, WRITE_PORT_XXXWRITE_REGISTER_XXX 루틴을 사용하여 디바이스와 상호 작용할 수 있습니다.

버그 검사 발급할 때 시스템과 보다 정교한 상호 작용이 필요한 드라이버는 대신 KbCallbackDumpIo 또는 KbCallbackSecondaryDumpData 루틴을 구현할 수 있습니다.

Windows XP SP1 및 Windows Server 2003 운영 체제부터는 시스템 크래시 덤프 파일이 이미 작성된 후 BugCheckCallback 루틴이 실행됩니다. (이전 버전의 Windows에서는 크래시 덤프 파일이 작성되기 전에 루틴이 실행됩니다.) 따라서 Buffer 매개 변수로 지정된 버퍼에 저장된 데이터는 크래시 덤프 파일에 표시되지 않습니다. 크래시 덤프 파일에 데이터를 쓰는 데 필요한 드라이버는 대신 KbCallbackSecondaryDumpData 루틴을 구현합니다. (이전 버전의 Windows에서는 버퍼 에 기록된 데이터가 크래시 덤프 파일에 표시됩니다.)

예제

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

예를 들어 라는 MyBugCheckCallbackBugCheckCallback 콜백 루틴을 정의하려면 이 코드 예제와 같이 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 대한 자세한 내용은 함수 동작에 주석을 추가를 참조하세요.

요구 사항

요구 사항
대상 플랫폼 데스크톱
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)
IRQL HIGH_LEVEL 호출합니다.

추가 정보

버그 검사 콜백 루틴 작성

KeDeregisterBugCheckCallback

KeRegisterBugCheckCallback