I/O 검증

드라이버 검증 도구에는 두 개의 I/O 검증 수준이 있습니다.

  • 수준 1 I/O 검증은 I/O 검증을 선택할 때마다 항상 활성화됩니다.

  • 수준 2 I/O 검증은 Windows XP 이상에서 I/O 검증을 선택할 때마다 항상 활성화됩니다. Windows 2000에서는 두 가지 수준을 모두 포함하거나 수준 1 테스트만 포함하도록 I/O 검증을 구성할 수 있습니다.

참고 항목: 강화된 I/O 검증 Windows 7 이상의 운영 체제에서는 I/O 검증을 선택하면 강화된 I/O 검증이 자동으로 활성화됩니다. 별도의 옵션으로 선택할 필요가 없고 그럴 수도 없습니다.

수준 1 I/O 검증

수준 1 I/O 검증이 사용되면 IoAllocateIrp를 통해 얻은 모든 IRP는 특수 풀에서 할당되며 사용 내역이 추적됩니다.

또한 드라이버 검증 도구는 다음을 포함하여 잘못된 I/O 호출을 검사합니다.

  • IO_TYPE_IRP 유형이 아닌 IRP를 비우려고 시도함

  • 잘못된 장치 개체를 IoCallDriver에 전달함

  • 잘못된 상태를 포함하거나 아직 취소 루틴 집합을 가지고 있는 IoCompleteRequest에 IRP를 전달함

  • 드라이버 디스패치 루틴에 대한 호출 전체에서 IRQL을 변경함

  • 스레드와 연결된 상태의 IRP를 비우려고 시도함

  • 이미 초기화된 타이머를 포함하는 IoInitializeTimer로 장치 개체를 전달함

  • 잘못된 버퍼를 IoBuildAsynchronousFsdRequest 또는 IoBuildDeviceIoControlRequest로 전달함

  • 너무 멀리 풀기(unwind)가 수행된 스택에 입출력 상태 블록이 할당되었을 때 이 입출력 상태 블록을 IRP에 전달함

  • 너무 멀리 풀기(unwind)가 수행된 스택에 이벤트 개체가 할당되었을 때 이 이벤트 개체를 IRP에 전달함

특수 IRP 풀의 크기는 제한적이므로, I/O 검증을 한 번에 하나의 드라이버에서만 사용할 때 가장 효과적입니다.

I/O 검증 수준 1이 실패하면 버그 검사 0xC9가 실행됩니다. 이 버그 검사의 첫 번째 매개 변수는 어떤 위반이 발생했는지를 나타냅니다. 전체 매개 변수 목록은 Bug Check 0xC9(DRIVER_VERIFIER_IOMANAGER_VIOLATION)를 참조하세요.

수준 2 I/O 검증

I/O 검증 수준 2 오류는 블루 스크린, 크래시 덤프 파일, 커널 디버거 등의 방법으로 표시됩니다.

블루 스크린에서 이러한 오류는 IO SYSTEM VERIFICATION ERROR 메시지 및 WDM DRIVER ERRORXXX 문자열로 나타납니다. 여기서 XXX는 I/O 오류 코드입니다.

크래시 덤프 파일에서 이러한 오류의 대부분은 I/O 오류 코드와 함께 버그 검사 0xC9(DRIVER_VERIFIER_IOMANAGER_VIOLATION) 메시지로 나타납니다. 이 경우 I/O 오류 코드는 버그 검사 0xC9의 첫 번째 매개 변수로서 나타납니다. 나머지는 버그 검사 0xC4(DRIVER_VERIFIER_DETECTED_VIOLATION) 메시지 및 드라이버 검증 도구 오류 코드로 표시됩니다. 이 경우 드라이버 검증 도구 오류 코드는 버그 검사 0xC4의 첫 번째 매개 변수로서 나타납니다.

커널 디버거(KD 또는 WinDbg)에서 이러한 오류는 WDM DRIVER ERROR 메시지 및 설명 텍스트 문자열로 나타납니다. 커널 디버거가 활성 상태인 경우 수준 2 오류를 무시하고 시스템 운영을 다시 시작할 수 있습니다. 다른 버그 검사에서는 이렇게 할 수 없습니다.

블루 스크린, 크래시 덤프 파일 및 커널 디버거는 또한 각각 추가 정보를 표시합니다. 대부분의 I/O 검증 수준 2 오류 메시지에 대한 자세한 설명은 Bug Check 0xC9를 참조하세요. 나머지는 Bug Check 0xC4를 참조하세요.

Window Vista부터 I/O 검증 옵션은 다음 드라이버 오류가 있는지 확인합니다.

  • 사용자 모드 응용 프로그램에서 시작된 IRP를 완료 및 취소하는 데 시간이 너무 많이 걸림.

  • 아직 취득하지 못한 제거 잠금을 해제함.

  • 해당 IoAcquireRemoveLock 호출에 사용된 태그 매개 변수와 다른 태그 매개 변수로 IoReleaseRemoveLock 또는 IoReleaseRemoveLockAndWait를 호출함.

Window 7부터 I/O 검증 옵션은 다음 드라이버 오류가 있는지 확인합니다.

  • ExFreePool을 호출하여 IRP를 비우려고 시도함. IRP는 IoFreeIrp로 비워야 합니다.

또한 이 옵션을 사용하여 제거 잠금을 다시 초기화하는 다른 공통적인 드라이버 버그를 검색할 수 있습니다. 제거 잠금 데이터 구조는 장치 확장 내부에서 할당되어야 합니다. 이렇게 하면 I/O 관리자는 장치 개체가 삭제될 때 IO_REMOVE_LOCK 구조를 포함하고 있는 메모리를 해제합니다. 드라이버가 다음 3단계를 수행하면 2단계 이후 응용 프로그램이나 드라이버가 Device1에 대한 참조를 포함하고 있을 수 있습니다.

  • Device1에 해당하는 IO_REMOVE_LOCK 구조를 할당하지만 Device1 확장 외부에서 할당을 수행합니다.
  • Device1이 제거될 때 IoReleaseRemoveLockAndWait를 호출합니다.
  • Device2에 대한 제거 잠금으로 다시 사용하기 위해 동일한 잠금에 대해 IoInitializeRemoveLock을 호출합니다.

2단계 이후 응용 프로그램이나 드라이버가 Device1에 대한 참조를 포함하고 있을 수 있습니다. 이 장치가 제거된 경우에도 응용 프로그램이나 드라이버가 Device1에 요청을 보낼 수 있습니다. 따라서 I/O 관리자가 Device1을 삭제할 때까지 새 제거 잠금과 같은 메모리를 다시 사용하는 것은 안전하지 않습니다. 다른 스레드가 동일한 잠금을 취득하려고 시도하는 동안 이 잠금을 다시 초기화하면 잠금이 손상되고 드라이버 및 전체 시스템에 대한 예상치 못한 결과가 발생할 수 있습니다.

Windows 7 이상의 운영 체제에서는 I/O 검증을 선택하면 강화된 I/O 검증이 자동으로 활성화됩니다.

이 옵션 활성화

드라이버 검증 도구 관리자 또는 Verifier.exe 명령줄을 사용하여 하나 이상의 드라이버에 대해 I/O 검증 기능을 활성화할 수 있습니다. 자세한 내용은 드라이버 검증 도구 옵션 선택을 참조하세요.

  • 명령줄에서

    명령줄에서 I/O 검증 옵션은 Bit 4 (0x10)로 표현됩니다. I/O 검증을 활성화하려면 0x10의 플래그 값을 사용하거나 플래그 값에 0x10을 추가하세요. 예를 들면 다음과 같습니다.

    
    verifier /flags 0x10 /driver MyDriver.sys
    
    

    다음에 부팅하면 기능이 활성화됩니다.

    Windows 2000에서는 /iolevel 매개 변수를 사용하여 수준 1만(기본값) 활성화하거나 수준 1과 수준 2를 모두 활성화할 수 있습니다. Windows의 이후 버전에서는 I/O 검증을 활성화하면 수준 1과 수준 2가 모두 항상 활성화됩니다.

    예를 들어 다음 명령은 Windows 2000을 실행하는 컴퓨터에서 수준 1 및 수준 2 I/O 검증을 활성화합니다.

    
    verifier /flags 0x10 /iolevel 2 /driver MyDriver.sys
    
    

    Windows Vista 이상에서는 명령에 /volatile 매개 변수를 추가하면 컴퓨터를 다시 부팅하지 않고도 I/O 검증을 활성화 및 비활성화할 수 있습니다. 예를 들면 다음과 같습니다.

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

    이 설정은 바로 적용되지만 컴퓨터를 종료하거나 다시 부팅하면 손실됩니다. 자세한 내용은 일시적 설정 사용을 참조하세요.

    I/O 검증 기능은 표준 설정에도 포함되어 있습니다. 예를 들면 다음과 같습니다.

    
    verifier /standard /driver MyDriver.sys
    
    
  • 드라이버 검증 도구 관리자 사용
    1. 사용자 지정 설정 만들기(코드 개발자용)를 선택하고 다음을 클릭합니다.
    2. 전체 목록에서 개별 설정 선택을 선택합니다.
    3. I/O 검증을 선택합니다.

    I/O 검증 기능은 표준 설정에도 포함되어 있습니다. 이 기능을 사용하려면 드라이버 검증 도구 관리자에서 표준 설정 만들기를 클릭하세요.

 

 

표시:
© 2014 Microsoft