I/O 확인
드라이버 검증 도구에는 두 가지 수준의 I/O 확인이 있습니다.
I/O 확인을 선택할 때마다 수준 1 I/O 확인이 항상 활성화됩니다.
수준 2 I/O 확인 은 Windows XP 이상에서 I/O 확인을 선택할 때마다 항상 활성화됩니다.
또한 Windows 7 이상 버전의 Windows 운영 체제에서 향상된 I/O 확인을 참조하세요. I/O 확인을 선택하면 향상된 I/O 확인이 자동으로 활성화됩니다. 별도의 옵션으로 선택할 수 없거나 선택할 필요가 없습니다.
수준 1 I/O 확인
수준 1 I/O 확인을 사용하도록 설정하면 IoAllocateIrp 를 통해 얻은 모든 IRP가 특수 풀에서 할당되고 해당 사용이 추적됩니다.
또한 드라이버 검증 도구는 다음을 포함하여 잘못된 I/O 호출을 확인합니다.
형식이 IO_TYPE_IRP 않은 IRP를 해제하려고 시도합니다.
잘못된 디바이스 개체를 IoCallDriver에 전달합니다.
잘못된 상태 포함하거나 여전히 취소 루틴 집합이 있는 IRP를 IoCompleteRequest에 전달합니다.
드라이버 디스패치 루틴에 대한 호출에서 IRQL 변경
스레드와 연결된 상태로 유지되는 IRP를 해제하려고 시도합니다.
초기화된 타이머가 이미 포함된 IoInitializeTimer 에 디바이스 개체를 전달합니다.
잘못된 버퍼를 IoBuildAsynchronousFsdRequest 또는 IoBuildDeviceIoControlRequest에 전달합니다.
I/O 상태 블록을 IRP에 전달합니다. 이 I/O 상태 블록이 너무 멀리 풀지 않은 스택에 할당됩니다.
이 이벤트 개체가 너무 멀리 해제된 스택에 할당된 경우 이벤트 개체를 IRP에 전달합니다.
특수 IRP 풀의 크기가 제한되어 있기 때문에 I/O 확인은 한 번에 하나의 드라이버에서만 사용될 때 가장 효과적입니다.
I/O 확인 수준 1 오류로 인해 버그 검사 0xC9 발생합니다. 이 버그 검사 첫 번째 매개 변수는 발생한 위반을 나타냅니다. 전체 매개 변수 목록은 버그 검사 0xC9 (DRIVER_VERIFIER_IOMANAGER_VIOLATION)을 참조하세요.
수준 2 I/O 확인
I/O 확인 수준 2 오류는 파란색 화면, 크래시 덤프 파일 및 커널 디버거와 같은 다양한 방식으로 표시됩니다.
파란색 화면에서 이러한 오류는 메시지 IO 시스템 확인 오류 및 문자열 WDM DRIVER ERRORXXX로 표시됩니다. 여기서 XXX 는 I/O 오류 코드입니다.
크래시 덤프 파일에서 이러한 오류의 대부분은 I/O 오류 코드와 함께 BugCheck 0xC9(DRIVER_VERIFIER_IOMANAGER_VIOLATION) 메시지로 표시됩니다. 이 경우 I/O 오류 코드가 버그 검사 0xC9 첫 번째 매개 변수로 표시됩니다. 나머지는 드라이버 검증 도구 오류 코드와 함께 버그 검사 0xC4(DRIVER_VERIFIER_DETECTED_VIOLATION) 메시지로 표시됩니다. 이 경우 드라이버 검증 도구 오류 코드는 버그 검사 0xC4 첫 번째 매개 변수로 나타납니다.
커널 디버거(KD 또는 WinDbg)에서 이러한 오류는 WDM DRIVER ERROR 메시지와 설명 텍스트 문자열로 표시됩니다. 커널 디버거가 활성 상태이면 수준 2 오류를 무시하고 시스템 작업을 다시 시작할 수 있습니다. (다른 버그 검사에서는 불가능합니다.)
파란색 화면, 크래시 덤프 파일 및 커널 디버거는 각각 추가 정보도 표시합니다. 대부분의 I/O 확인 수준 2 오류 메시지에 대한 전체 설명은 버그 검사 0xC9 참조하세요. 나머지는 버그 검사 0xC4 참조하세요.
Window Vista부터 I/O 확인 옵션은 다음 드라이버 오류를 확인합니다.
사용자 모드 애플리케이션에서 시작된 IRP를 완료하고 취소하는 데 너무 오래 걸립니다.
아직 획득되지 않은 제거 잠금 해제
해당 IoAcquireRemoveLock 호출에 사용되는 태그 매개 변수와 다른 태그 매개 변수를 사용하여 IoReleaseRemoveLock 또는 IoReleaseRemoveLockAndWait를 호출합니다.
인터럽트 사용 안 함으로 IoCallDriver 를 호출합니다.
DISPATCH_LEVEL보다 큰 IRQL에서 IoCallDriver 를 호출합니다.
인터럽트 사용 안 함으로 드라이버 디스패치 루틴에서 반환합니다.
변경된 IRQL을 사용하여 드라이버 디스패치 루틴에서 반환합니다.
APC를 사용하지 않도록 설정된 드라이버 디스패치 루틴에서 반환합니다. 이 경우 드라이버는 KeLeaveCriticalRegion보다 KeEnterCriticalRegion을 더 많이 호출했을 수 있습니다. 이는 버그 검사 0x20(KERNEL_APC_PENDING_DURING_EXIT) 및 버그 검사 0x1(APC_INDEX_MISMATCH)의 주요 원인입니다.
Windows 7부터 I/O 확인 옵션은 다음 드라이버 오류를 확인합니다.
- ExFreePool을 호출하여 IRP를 해제하려고 시도합니다. IRP는 IoFreeIrp을 사용하여 해제해야 합니다.
또한 이 옵션을 사용하여 잠금 제거를 다시 초기화하는 또 다른 일반적인 드라이버 버그를 검색할 수 있습니다. 잠금 제거 데이터 구조는 디바이스 확장 내에서 할당되어야 합니다. 이렇게 하면 I/O 관리자가 디바이스 개체가 삭제될 때만 IO_REMOVE_LOCK 구조를 보유하는 메모리를 해제합니다. 드라이버가 다음 세 단계를 수행하는 경우 2단계 이후에도 애플리케이션 또는 드라이버가 Device1에 대한 참조를 보유할 수 있습니다.
- Device1에 해당하는 IO_REMOVE_LOCK 구조를 할당하지만 Device1 확장 외부에서 할당을 수행합니다.
- Device1이 제거될 때 IoReleaseRemoveLockAndWait 을 호출합니다.
- 동일한 잠금에 대해 IoInitializeRemoveLock 을 호출하여 Device2에 대한 제거 잠금으로 다시 사용합니다.
2단계 후에도 애플리케이션 또는 드라이버가 Device1에 대한 참조를 계속 보유할 수 있습니다. 이 디바이스가 제거되었더라도 애플리케이션 또는 드라이버는 Device1에 요청을 보낼 수 있습니다. 따라서 I/O 관리자가 Device1을 삭제할 때까지 새 제거 잠금과 동일한 메모리를 다시 사용하는 것은 안전하지 않습니다. 다른 스레드가 잠금을 획득하려고 하는 동안 동일한 잠금을 다시 초기화하면 잠금이 손상될 수 있으며 드라이버와 전체 시스템에 대해 예측할 수 없는 결과가 발생할 수 있습니다.
Windows 7 이상 버전의 Windows 운영 체제에서 I /O 확인을 선택하면 향상된 I/O 확인 이 자동으로 활성화됩니다.
이 옵션 활성화
드라이버 검증 도구 관리자 또는 Verifier.exe 명령줄을 사용하여 하나 이상의 드라이버에 대한 I/O 확인 기능을 활성화할 수 있습니다. 자세한 내용은 드라이버 검증 도구 옵션 선택을 참조하세요.
명령줄에 있습니다.
명령줄에서 I/O 확인 옵션은 비트 4(0x10)로 표시됩니다. I/O 확인을 활성화하려면 플래그 값 0x10 사용하거나 플래그 값에 0x10 추가합니다. 예:
verifier /flags 0x10 /driver MyDriver.sys
이 기능은 다음 부팅 후에 활성화됩니다.
명령에 /volatile 매개 변수를 추가하여 컴퓨터를 다시 부팅하지 않고 I/O 확인을 활성화하고 비활성화할 수도 있습니다. 예:
verifier /volatile /flags 0x10 /adddriver MyDriver.sys
이 설정은 즉시 적용되지만 컴퓨터를 종료하거나 다시 부팅하면 손실됩니다. 자세한 내용은 휘발성 설정 사용을 참조하세요.
I/O 확인 기능은 표준 설정에도 포함됩니다. 예:
verifier /standard /driver MyDriver.sys
드라이버 검증 도구 관리자 사용
- 사용자 지정 설정 만들기(코드 개발자용)를 선택한 다음, 다음을 클릭합니다.
- 전체 목록에서 개별 설정 선택을 선택합니다.
- (검사) I/O 확인을 선택합니다.
I/O 확인 기능은 표준 설정에도 포함됩니다. 이 기능을 사용하려면 드라이버 검증 도구 관리자에서 표준 설정 만들기를 클릭합니다.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기