다음을 통해 공유


DbgPrintEx 함수(wdm.h)

지정한 조건이 충족되면 DbgPrintEx 루틴은 커널 디버거에 문자열을 보냅니다.

구문

NTSYSAPI ULONG DbgPrintEx(
  [in] ULONG ComponentId,
  [in] ULONG Level,
  [in] PCSTR Format,
       ...   
);

매개 변수

[in] ComponentId

이 루틴을 호출하는 구성 요소를 지정합니다. Dpfilter.h 헤더 파일에 정의된 구성 요소 이름 필터 ID 중 하나여야 합니다. 드라이버의 출력을 Windows 구성 요소의 출력과 혼합하지 않도록 하려면 ComponentId에 다음 값만 사용해야 합니다.

  • DPFLTR_IHVVIDEO_ID
  • DPFLTR_IHVAUDIO_ID
  • DPFLTR_IHVNETWORK_ID
  • DPFLTR_IHVSTREAMING_ID
  • DPFLTR_IHVBUS_ID
  • DPFLTR_IHVDRIVER_ID

[in] Level

전송되는 메시지의 심각도를 지정합니다. 32비트 정수일 수 있습니다. 0에서 31 사이의 값(포함)은 32와 0xFFFFFFFF 사이의 값과 다르게 처리됩니다. 자세한 내용은 디버깅 메시지 읽기 및 필터링을 참조하세요.

[in] Format

인쇄할 형식 문자열에 대한 포인터를 지정합니다. Format 문자열은 대부분의 printf 스타일 형식 사양 필드를 지원합니다. 그러나 유니코드 형식 코드(%C, %S, %lc, %ls, %wc, %ws 및 %wZ)는 IRQL = PASSIVE_LEVEL 함께만 사용할 수 있습니다. DbgPrintEx 루틴은 부동 소수점 형식(%f, %e, %E, %g, %G, %a 또는 %A)을 지원하지 않습니다.

...

printf와 같이 형식 문자열에 대한 인수를 지정합니다.

반환 값

성공하면 DbgPrintEx 는 STATUS_SUCCESS NTSTATUS 코드를 반환합니다. 그렇지 않으면 적절한 오류 코드를 반환합니다.

설명

커널 모드 드라이버만 DbgPrintEx 루틴을 호출할 수 있습니다.

DbgPrintDbgPrintEx는 IRQL=DIRQL<에서 호출할 수 있습니다. 그러나 유니코드 형식 코드(%wc%ws)는 IRQL = PASSIVE_LEVEL만 사용할 수 있습니다. 또한 디버거는 IPI(interprocess 인터럽트)를 사용하여 다른 프로세서와 통신하기 때문에 IRQL DIRQL>에서 DbgPrint를 호출하면 교착 상태가 발생할 수 있습니다.

DbgPrintEx 는 지정된 문자열을 커널 디버거에 전달하거나 ComponentId, Level 및 해당 구성 요소 필터 마스크의 값에 따라 아무 작업도 수행하지 않습니다. 자세한 내용은 디버깅 메시지 읽기 및 필터링을 참조하세요.

반드시 필요한 경우가 아니면 사용자 입력 또는 다른 프로세스에서 문자열을 가져와 서 DbgPrintEx에 전달해서는 안 됩니다. 만들지 않은 문자열을 사용하는 경우 이 문자열이 유효한 형식 문자열인지, 형식 코드가 형식 및 수량의 인수 목록과 일치하는지 확인해야 합니다. 가장 좋은 코딩 방법은 모든 형식 문자열이 정적이고 컴파일 시간에 정의되는 것입니다.

형식 문자열의 크기 또는 인수 수에 대한 상한은 없습니다. 그러나 DbgPrintEx 에 대한 단일 호출은 512바이트의 정보만 전송합니다. DbgPrint 버퍼의 크기에 대한 제한도 있습니다. 자세한 내용은 DbgPrint 버퍼 및 디버거를 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Microsoft Windows XP 이상에서 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 wdm.h(Wdm.h 포함)
라이브러리 NtDll.lib(사용자 모드); NtosKrnl.lib(커널 모드)
DLL NtDll.dll(사용자 모드); NtosKrnl.exe(커널 모드)
IRQL <= DIRQL(주석 섹션 참조)

추가 정보

DbgPrint

KdPrint

KdPrintEx

vDbgPrintEx