다음을 통해 공유


UMDF 드라이버에서 WPP 소프트웨어 추적 사용

WPP 소프트웨어 추적을 사용하면 드라이버를 디버그하는 데 도움이 되는 추적 메시지를 추가할 수 있습니다. 또한 프레임워크의 이벤트 로거는 볼 수 있는 수백 개의 추적 메시지를 제공합니다.

TraceView 또는 Tracelog를 사용하여 추적 메시지를 볼 수 있습니다. 커널 디버거에 추적 메시지를 보낼 수도 있습니다.

드라이버에 추적 메시지 추가

프레임워크 기반 드라이버에 추적 메시지를 추가하려면 다음을 수행해야 합니다.

  • WPP 매크로가 포함된 각 드라이버의 원본 파일에 #include 지시문을 추가합니다. 이 지시문은 TMH(추적 메시지 헤더) 파일을 식별해야 합니다. 파일 이름은 driver-source-file-name.tmh> 형식 < 이어야 합니다.

    예를 들어 드라이버가 MyDriver1.c 및 MyDriver2.c라는 두 개의 원본 파일로 구성된 경우 MyDriver1.c에는 다음이 포함되어야 합니다.

    #include "MyDriver1.tmh"

    MyDriver2.c 에는 다음이 포함되어야 합니다.

    #include "MyDriver2.tmh"

    Microsoft Visual Studio에서 드라이버를 빌드하면 WPP 전처리기가 .tmh 파일을 생성합니다.

  • 헤더 파일에서 WPP_CONTROL_GUIDS 매크로를 정의합니다. 이 매크로는 드라이버의 추적 메시지에 대한 GUID 및 추적 플래그 를 정의합니다. (WDK의 각 UMDF 기반 샘플 드라이버에 대해 Internal.h 헤더 파일에는 이 매크로가 포함됩니다.)

  • 드라이버의 DllMain 루틴에 WPP_INIT_TRACING 매크로를 포함합니다. 이 매크로는 드라이버에서 소프트웨어 추적을 활성화합니다. (WDK의 각 UMDF 기반 샘플 드라이버에 대해 DllSup.h 헤더 파일에는 이 매크로가 포함됩니다.)

  • 드라이버의 DllMain 루틴에 WPP_CLEANUP 매크로를 포함합니다. 이 매크로는 드라이버에서 소프트웨어 추적을 비활성화합니다. (WDK의 각 UMDF 기반 샘플 드라이버에 대해 DllSup.h 헤더 파일에는 이 매크로가 포함됩니다.)

  • 드라이버에서 DoTraceMessage 매크로 또는 사용자 지정된 버전의 매크로를 사용하여 추적 메시지를 만듭니다. (WDK의 각 UMDF 기반 샘플 드라이버에 대해 Internal.h 헤더 파일에는 사용자 지정된 매크로가 포함됩니다.)

  • 드라이버 프로젝트의 속성 페이지를 엽니다. 솔루션 탐색기 드라이버 프로젝트를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 드라이버의 속성 페이지에서 구성 속성을 선택한 다음 , Wpp를 선택합니다. 일반 메뉴에서 WPP 추적 실행을 예로 설정합니다. 파일 옵션 메뉴에서 프레임워크의 WPP 템플릿 파일도 지정해야 합니다. 예를 들면 다음과 같습니다.

    {km-WdfDefault.tpl}*.tmh
    

드라이버에 추적 메시지를 추가하는 방법에 대한 자세한 내용은 드라이버에 WPP 매크로 추가를 참조하세요.

WPP 소프트웨어 추적을 사용하는 샘플 드라이버

WDK의 모든 UMDF 기반 샘플 드라이버는 WPP 소프트웨어 추적을 사용하도록 설정하는 DllSup.h, Internal.h 및 Sources 파일을 제공합니다. 이러한 샘플 드라이버 대부분은 사용자 지정된 매크로를 사용하여 추적 메시지를 만듭니다.

드라이버의 추적 메시지 보기

드라이버에 추적 메시지를 추가한 경우 드라이버는 추적 공급자입니다. Tracelog와 같은 추적 컨트롤러를 사용하여 추적 세션을 제어하고 추적 로그를 만들 수 있습니다. Tracefmt와 같은 추적 소비자를 사용하여 메시지를 볼 수 있습니다.

소프트웨어 추적 도구를 사용하는 방법에 대한 자세한 내용은 소프트웨어 추적 도구 설문 조사를 참조하세요.

UMDF 추적 로그 보기

UMDF 로그 파일은 에 있습니다 %ProgramData%*\\Microsoft\\WDF.

TraceView 또는 Tracelog를 사용하여 UMDF 로그 파일을 볼 수 있습니다. 두 도구 모두 추적 로그의 메시지 형식을 지정하는 TMF(추적 메시지 형식) 파일이 필요합니다. TMF 파일은 WDK의 \tools\tracing 하위 디렉터리에서 사용할 수 있습니다. TraceView에서 UMDF는 UMDF 버전에 따라 "UMDF-Framework 추적" 또는 "프레임워크 추적"이라는 이름의 명명된 공급자로 나타납니다.

WDF 검증 도구를 사용하면 UMDF 추적 로그와 커널 디버거 모두에 추적 메시지를 보낼 수 있습니다. Tracelog가 UMDF 내에서 추적 로깅을 방해할 수 있으므로 Tracelog에서 -kd 옵션을 사용하여 커널 디버거에 추적 메시지를 보내면 안 됩니다.

!wmitrace 디버거 확장을 사용하여 디버거에서 추적 메시지를 볼 수도 있습니다.

  1. WinDbg에서 드라이버를 호스트하는 WUDFHost의 instance 연결합니다. 자세한 내용은 UMDF 드라이버의 디버깅을 사용하도록 설정하는 방법을 참조하세요.

  2. 드라이버가 버전 1.11 이상을 사용하고 Windows 8 이상의 커널 디버거를 사용하는 경우 이 단계를 건너뛸 수 있습니다. 드라이버가 1.11 이전 버전의 UMDF를 사용하는 경우 !wmitrace.tmffile 또는 !wmitrace.searchpath 를 사용하여 플랫폼별 추적 메시지 형식(.tmf) 파일 또는 .tmf 파일 경로를 지정합니다. .tmf 파일은 WDK의 플랫폼별 하위 디렉터리에 있습니다.

  3. !wmitrace.logdump 명령을 사용하여 추적 버퍼의 내용을 표시합니다.

    !wmitrace.logdump WudfTrace
    

추적 메시지 제어

WDF 검증 도구가 제공하는 사용자 인터페이스를 사용하거나 레지스트리 값을 수정하여 UMDF 추적 메시지를 제어할 수 있습니다. 레지스트리 값이 향후 UMDF 버전에서 변경될 수 있으므로 가능하면 WDF 검증 도구 인터페이스를 사용해야 합니다. 또한 INF 파일 또는 드라이버 코드 내에서 이러한 값에 액세스해서는 안 됩니다.

현재 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF 레지스트리 키 아래에 있는 다음 레지스트리 값을 수정할 수 있습니다.

  • LogEnable 값은 UMDF가 드라이버에 대한 추적 로그를 만드는지 여부를 제어합니다. 이 값을 1로 설정하면 UMDF는 추적 로그를 만듭니다.

  • LogLevel 값은 UMDF 추적 메시지에 포함된 정보의 양을 제어합니다. LogLevel의 기본값은 3이며, 이로 인해 UMDF 추적 메시지에 오류 및 경고 메시지가 포함됩니다. 오류 및 경고 메시지와 오류가 아닌 정보 메시지를 포함하려면 이 값을 7로 설정합니다. UMDF에서 제공할 수 있는 모든 추적 정보를 포함하도록 15로 설정합니다.

  • LogKd 값은 UMDF가 커널 디버거에 추적 메시지를 보내는지 여부를 제어합니다. LogKd를 1로 설정하면 UMDF는 해당 추적 메시지를 커널 디버거로 보냅니다.

  • LogFlushPeriodSeconds 값은 추적 메시지가 추적 로그에 기록되는 빈도(초)를 지정합니다.

  • LogMinidumpType 값에는 미니 덤프 파일이 생성되는 경우 포함할 정보 유형을 지정하는 플래그가 포함되어 있습니다. 이러한 플래그에 대한 자세한 내용은 MINIDUMP_TYPE 열거형을 참조하세요.

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF 레지스트리 키 아래에 더 많은 레지스트리 값이 있을 수 있습니다. 이러한 값은 수정하면 안 됩니다.