IRP 로깅

드라이버 검증 도구의 IRP 로깅 기능은 드라이버의 IRP 사용을 모니터링하고 IRP 사용량을 기록합니다. 이 레코드는 WMI 정보로 저장됩니다.

WDK(Windows 드라이버 키트)에는 이 WMI 레코드를 텍스트 파일로 변환할 수 있는 DC2WMIParser(dc2wmiparser.exe) 도구가 포함되어 있습니다.

이 드라이버 검증 도구 옵션은 Windows Server 2003 이상에서만 사용할 수 있습니다.

WMI 레코드

WMI 레코드에는 각 디바이스에 대해 20개 이상의 IRP가 포함되지 않습니다. 21 IRP가 기록되면 첫 번째 IRP 레코드가 대체됩니다. 따라서 레코드에 20개의 IRP가 나열되면 항상 가장 최근의 20개이지만, 이 중 가장 최근의 IP는 무엇인지 알 수 있는 방법이 없습니다.

WMI 레코드는 메모리에 저장되므로 컴퓨터를 다시 부팅하면 지워집니다. 따라서 DC2WMIParser를 사용하여 이 정보를 파일에 저장합니다.

/t 옵션을 사용하는 경우 DC2WMIParser는 지정된 기간 동안 지속적으로 실행됩니다. 이 경우 레코드에는 디바이스당 20개 이상의 IRP(각 샘플링 기간에 최대 20개의 IRP)가 포함될 수 있습니다.

이 옵션 활성화

드라이버 검증 도구 관리자 또는 Verifier.exe 명령줄을 사용하여 하나 이상의 드라이버에 대해 IRP 로깅 기능을 활성화할 수 있습니다.

IRP 로깅 기능을 활성화하려면 I/O 확인도 활성화해야 합니다.

  • 명령줄에서

    명령줄에서 IRP 로깅 옵션은 0x400 (비트 10)로 표시됩니다.

    IRP 로깅을 활성화하려면 플래그 값 0x410 사용하거나 플래그 값에 0x410 추가합니다. 이 값은 I /O 확인 (0x10) 및 IRP 로깅(0x400)을 활성화합니다. 예:

    verifier /flags 0x410 /driver MyDriver.sys
    

    이 기능은 다음 부팅 후에 활성화됩니다.

    Windows Vista 이상 버전의 Windows에서는 명령에 /volatile 매개 변수를 추가하여 컴퓨터를 다시 부팅하지 않고 IRP 로깅을 활성화하고 비활성화할 수도 있습니다. 예:

    verifier /volatile /flags 0x410 /adddriver MyDriver.sys
    

    이 설정은 즉시 유효하지만 컴퓨터를 종료하거나 다시 부팅하면 손실됩니다. 자세한 내용은 Volatile 설정 사용을 참조하세요.

  • 드라이버 검증 도구 관리자 사용

    1. 드라이버 검증 도구 관리자를 시작합니다. 명령 프롬프트 창에 검증 도구 를 입력합니다.
    2. 사용자 지정 설정 만들기(코드 개발자용)를 선택하고 다음을 클릭합니다.
    3. 전체 목록에서 개별 설정 선택을 선택합니다.
    4. (검사) IRP 로깅I/O 확인을 선택합니다.

DC2WMIParser

DC2WMIParser는 드라이버 검증 도구에서 만든 WMI IRP 레코드를 수집하고 이 로그를 텍스트 파일로 변환하는 도구입니다.

DC2WMIParser 구문은 다음과 같습니다.

dc2wmiparser [/f File] [/t Time]

매개 변수의 의미는 다음과 같습니다.

/f파일
쓸 로그 파일의 전체 경로와 파일 이름을 지정합니다. 상대 경로는 현재 디렉터리를 기준으로 수행됩니다. 이 옵션을 생략하면 현재 디렉터리의 파일 이름 dc2verifier.act가 사용됩니다.

/t시간
DC2WMIParser가 계속 실행되는 시간(분)을 지정합니다. Time이 0과 같으면 DC2WMIParser는 드라이버 검증 도구에서 이미 저장한 모든 WMI IRP 정보를 기록한 다음 종료합니다. Time이 양수 값으로 설정된 경우 DC2WMIParser는 지정된 시간 동안 계속 실행되어 도착하는 새 정보를 저장합니다. 기본값은 0입니다.

DC2WMIParser 로그 파일 형식

DC2WMIParser에서 생성된 파일은 ASCII 텍스트 파일입니다.

이 파일의 첫 번째 줄에는 파일에 기록된 디바이스 수를 나타내는 10진수가 포함되어 있습니다.

첫 번째 줄 뒤에 파일은 섹션으로 나뉩니다. 각 섹션에서는 하나의 디바이스에 대해 설명합니다.

각 디바이스의 형식은 다음과 같습니다.

  • 한 줄에서 다음을 수행합니다 . 디바이스 이름입니다.

  • 한 줄에서 다음을 수행합니다 . 이 디바이스를 대상으로 하는 디바이스 유형 및 함수 수를 지정하는 10진수입니다.

  • 각 디바이스 유형 및 함수에 대해 한 줄에 다음을 수행 합니다. 쉼표로 구분된 3개의 16진수입니다. 디바이스 유형과 이 레코드에 기록된 가장 낮은 함수와 가장 높은 함수를 나타냅니다.

  • 각 디바이스 유형 및 함수에 대한 한 줄 그룹에서 다음을 수행합니다.

    • 현재 디바이스 유형의 IOCTL 수를 지정하는 10진수가 있는 한 줄입니다.
    • 각 IOCTL에 대해 한 줄입니다. 이러한 각 줄에는 쉼표로 구분된 6개의 16진수 숫자가 포함됩니다. 디바이스 유형, 함수, 메서드, 액세스, 입력 버퍼의 길이 및 출력 버퍼의 길이를 지정합니다.

다음은 샘플 DC2WMIParser 로그 파일입니다. 실제 파일에는 공백, 주석 또는 빈 줄이 없지만 더 명확하게 하기 위해 이 예제에 추가되었습니다.

2           There are two devices described by this log file.

The first device begins here:

  DP(1)0x7e00-0x21dbda400+3   Device name of the first device
  2                           Number of device type IOCTLs targeted at this device

    7,12,12                     First targeted device: device type 7, low function 12, high function 12
    2d,420,420                  Second targeted device: device type 2d, low function 420, high function 420

    1                           Number of IOCTLs for first targeted  device (type 7)
      7,12,0,0,90,0               Device type 7, function 12, method 0, access 0, inbuflen 90, outbuflen 0
    1                           Number of IOCTLs for second targeted device (type 2d)
      2d,420,0,0,c,0              Device type 2d, function 420, method 0, access 0, inbuflen c, outbuflen 0

The second device begins here:

  DP(1)0x7e00-0x21dbda400+2   Device name of the second device
  2                           Number of device type IOCTLs targeted at this device

    7,12,12                     First targeted device: device type 7, low function 12, high function 12
    2d,420,420                  Second targeted device: device type 2d, low function 420, high function 420


    1                           Number of IOCTLs for first targeted  device (type 7)
      7,12,0,0,90,0               Device type 7, function 12, method 0, access 0, inbuflen 90, outbuflen 0
    1                           Number of IOCTLs for second targeted device (type 2d)
      2d,420,0,0,c,0              Device type 2d, function 420, method 0, access 0, inbuflen c, outbuflen 0