Windows 2000에서 Driver Verifier를 사용하여 장치 드라이버 문제를 해결하는 방법

기술 자료 번역 기술 자료 번역
기술 자료: 244617 - 이 문서가 적용되는 제품 보기.
중요: 이 문서에서는 레지스트리 수정 방법을 설명합니다. 레지스트리를 수정하기 전에 해당 레지스트리를 백업하고 문제 발생 시 이를 복원하는 방법을 이해해야 합니다. 레지스트리 백업, 복원 및 편집 방법은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
256986 Microsoft Windows 레지스트리 설명
모두 확대 | 모두 축소

이 페이지에서

요약

Windows 2000에는 안정성을 높이기 위해 Driver Verifier가 포함되어 있습니다. 이 도구를 사용하여 드라이버 문제를 해결할 수 있습니다. Windows 2000에서 커널 모드 구성 요소를 사용하면 WDM(Windows Driver Model) 드라이버의 초기 버전과 같은 잘못된 드라이버로 인해 시스템이 손상되거나 시스템에 장애가 발생할 수 있습니다. 이 문서에서는 Driver Verifier를 사용하여 시스템의 드라이버 문제를 확인하고 해결하는 방법을 설명합니다.

추가 정보

이 문서에서는 다음과 같은 항목을 다룹니다.
  • Driver Verifier 기능
  • I/O Verifier
  • Driver Verifier 요구 사항
  • Driver Verifier 사용
  • Driver Verifier 위반 디버깅
  • Driver Verifier 및 그래픽 드라이버
  • Driver Verifier Manager(Verifier.exe)
  • 글로벌 카운터(Global Counters)
  • 풀 추적(Pool Tracking)
  • 설정(Settings)
  • 위반 설정(Volatile Settings)
  • 명령줄 인터페이스

Driver Verifier 기능

레지스트리 항목을 추가한 다음 컴퓨터를 다시 시작하여 Driver Verifier를 사용할 수 있습니다. 시스템에서 드라이버를 분석하기 위해 다른 사항을 변경할 필요가 없습니다.

참고: Windows의 정품 버전과 확인된 버전에서 모두 Driver Verifier를 사용할 수 있습니다.

Driver Verifier는 다음 기능을 제공합니다. 레지스트리에서 이 기능을 설정하거나 해제할 수 있습니다.

풀 할당

특수 풀에서 모든 드라이버의 풀을 할당하려고 합니다. 나머지 시스템과 풀 할당을 공유하는 대신 이 드라이버의 할당은 액세스 못함 사용 권한에 의해 격리되고 바인딩됩니다. 이 기능은 드라이버가 해당 풀의 공유보다 더 많이 할당하여 그로 인해 손상 및 시스템 불안정을 가져오지 않는지 확인합니다. 이 기능을 사용하고 대상 컴퓨터에 실제 메모리와 가상 메모리가 충분하면 모든 드라이버의 할당은 특수 풀로 자동 리디렉션됩니다.

과도한 메모리 사용

시스템 메모리 크기와 관계 없이 다른 드라이버에 영향을 미치지 않고 특정 드라이버에서 메모리를 과도하게 사용할 수 있습니다. 시스템의 페이지된 풀, 코드 및 데이터뿐 아니라 모든 드라이버의 페이징 가능한(pageable) 코드와 데이터를 무효로 만들도록 메모리 관리를 지시하여 이렇게 할 수 있습니다. 이렇게 하면 올바르지 않게 스핀 잠금을 걸거나 IRQL을 올린 다음 페이지된 코드나 데이터에 액세스하는 드라이버를 감지할 수 있습니다. 과도한 메모리 사용을 수행하여 일시적인 문제를 감지하고 원인을 알아낼 수 있습니다.

매개 변수 유효성 검사

드라이버가 수행하는 모든 스핀 잠금, IRQL 및 풀 할당 호출은 자동 매개 변수 유효성 검사를 수신합니다. 즉, 다음 사항을 확인하기 위해 검사를 수행합니다.
  • 올린 IRQL은 실제로 올린 IRQL입니다(현재 IRQL은 대상 IRQL보다 낮음).
  • 내린 IRQL은 실제로 내린 IRQL입니다.
  • 스핀 잠금을 중복 해제합니다.
  • 적절한 IRQL에서 스핀 잠금 설정/해제를 수행합니다.
  • 올바른 IRQL(APC_LEVEL 이하)에서 페이지된 풀 할당/해제를 수행합니다.
  • 올바른 IRQL(DISPATCH_LEVEL 이하)에서 페이지 안된 풀 할당/해제를 수행합니다.
  • 이러한 응용 프로그래밍 인터페이스(API)에 초기화되지 않은 임의의 값을 지정하지 않습니다.

풀 할당 주입 실패

드라이버에 의해 MUST_SUCCEED로 표시되지 않은 풀 할당은 드라이버에서 메모리가 부족한 상황을 올바르게 처리할 수 있는지 확인하는 데 예기치 않게 실패할 수 있습니다.

해제 중인 풀

시스템 충돌을 추적하기 매우 어려운 경우 보류 중인 타이머가 풀 할당 내에 없는지 확인하기 위해 해제 중인 모든 풀을 검사합니다.

풀 누수 감지

모든 드라이버의 풀 할당이 자동으로 추적됩니다. 드라이버 언로드 시간에 할당이 해제되지 않은 경우 버그 확인을 수행합니다. 그런 다음 !verifier 3 커널 디버거 명령을 사용하여 해제되지 않은 모든 할당을 표시할 수 있습니다. 언로드하기 전에 이 명령을 사용하여 어느 한 시점에 있는 드라이버의 처리되지 않은 할당을 볼 수 있습니다.

드라이버 언로드 확인

사용된 리소스를 언로드하고 정리하지 않은 드라이버를 알아내기 위해 드라이버 언로드 확인을 수행합니다(드라이버를 언로드한 직후에 시스템 버그를 확인할 가능성이 높음). 드라이버가 삭제할 수 없는 리소스에는 look-aside 리스트, 보류 중인 DPC(지연 프로시저 호출), 작업자 스레드, 대기열, 타이머 및 다른 리소스가 포함됩니다.

I/O Verifier

Verifier 도구 또는 VerifyDriverLevel 레지스트리 키를 사용하여 I/O Verifier 플래그를 설정하면(자세한 내용은 이 문서의 "Driver Verifier 사용" 절 참조) 일부 I/O 관리자 확인이 설정됩니다. 여기에는 다음 내용이 수록되어 있습니다.
  • IoAllocateIrp를 통해 할당된 모든 IRPS는 특수 풀에서 할당됩니다.
  • 드라이버 오류 메시지를 확인하기 위해 IoCallDriver, IoCompleteRequest 및 IoFreeIrp에서 검사를 수행합니다.
  • 모든 I/O Verifier 오류 버그를 코드 DRIVER_VERIFIER_IOMANAGER_VIOLATION(0xC9)에서 확인합니다.

Driver Verifier 요구 사항

유일한 요구 사항은 Windows 2000을 설치해야 하는 것입니다.

Driver Verifier 사용

Verifier.exe를 사용하거나 레지스트리를 편집하여 Driver Verifier를 사용할 수 있습니다.

Verifier.exe 사용

이 방법을 사용하여 Driver Verifier를 사용하는 것이 좋습니다. Verifier.exe는 Windows의 모든 복사본에 포함되며 System32 폴더에 자동으로 설치됩니다. Verifier.exe는 명령줄과 그래픽 사용자 인터페이스(GUI) 모두를 지원하므로 드라이버와 적절한 수준의 확인을 지정할 수 있습니다. 실시간에 Driver Verifier 통계도 볼 수 있습니다. 자세한 내용은 이 절의 "Driver Verifier Manager" 절을 참조하십시오.

레지스트리 편집

경고: 레지스트리 편집기를 잘못 사용하면 심각한 문제가 발생할 수 있으며 문제를 해결하기 위해 운영 체제를 다시 설치해야 할 수도 있습니다. Microsoft는 레지스트리 편집기를 잘못 사용함으로써 발생하는 문제에 대해 해결을 보증하지 않습니다. 레지스트리 편집기의 사용에 따른 모든 책임은 사용자에게 있습니다.


레지스트리를 편집하여 Driver Verifier를 사용하려면 다음 단계를 수행합니다.
  1. 레지스트리 편집기(Regedt32)를 시작합니다.
  2. 다음 레지스트리 키를 찾습니다.
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\VerifyDrivers
  3. REG_SZ 키를 편집합니다.

    테스트할 드라이버의 이름(대/소문자 구분)으로 REG_SZ 키를 설정합니다. 여러 드라이버를 지정할 수 있지만 사용 가능한 시스템 리소스가 미리 삭제되지 않았는지 확인하려면 드라이버를 하나만 사용해야 합니다. 리소스가 미리 삭제되면 시스템 안정성에 문제가 발생하지는 않지만 특정 드라이버가 확인되지 않을 수 있습니다.

    다음 목록은 REG_SZ 키의 값에 대한 예입니다.
    Ntfs.sys
    Win32k.sys ftdisk.sys
    *.sys
다음 레지스트리 키에서 드라이버 확인 수준을 지정할 수 있습니다.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\VerifyDriverLevel
다음 목록은 이 키의 비트 필드 값으로 자유롭게 결합할 수 있습니다.
  • 0x01: 특수 풀의 모든 할당을 충족시키려고 합니다.
  • 0x02: 이 드라이버에 메모리 사용을 적용하여 페이징 가능한(pageable) 코드 및 데이터 액세스에 관한 IRQL 사용을 확인합니다.
  • 0x04: 다양한 풀 할당 요청이 때때로 실패합니다. 이 작업은 시스템이 시작되고 해당 문제가 처리되어야 하는 적절한 시점 이후에만 수행됩니다.
  • 0x08: 풀 할당 추적을 사용합니다. 드라이버가 언로드하거나 시스템이 버그 확인을 수행하기 전에 모든 할당을 해제해야 합니다.
  • 0x10: I/O Verifier를 사용합니다.
참고: 해당 키가 존재하지 않거나 드라이버 확인 수준을 지정하지 않은 경우 기본값은 3입니다. 또한 Verifier 유틸리티에서 Preferred settings를 사용하는 경우 기본값은 0x1B입니다. 메모리 누수를 추적하는 경우 "preferred setting"을 선택한 다음 I/O verification을 선택 취소하여 가장 쉽게 구할 수 있는 값 0xB를 지정해 봅니다.

Driver Verifier 위반 디버깅

커널 디버거의 !verifier 명령과 Verifier.exe 도구 모두 실시간에 현재 Driver Verifier 구성과 통계를 보여 줍니다.

Driver Verifier 위반이 발생하면 버그 확인이 수행되는데, 대부분 반드시 필요하지는 않지만 가장 일반적인 Driver Verifier 위반은 다음과 같습니다.
  • IRQL_NOT_LESS_OR_EQUAL 0xA
  • PAGE_FAULT_IN_NONPAGED_AREA 0x50
  • PAGE_FAULT_IN_NONPAGED_AREA 0x50
  • ATTEMPTED_WRITE_TO_READONLY_MEMORY 0xBE
  • SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION 0xC1
  • DRIVER_VERIFIER_DETECTED_VIOLATION 0xC4
  • DRIVER_CAUGHT_MODIFYING_FREED_POOL 0xC6
  • TIMER_OR_DPC_INVALID 0xC7
  • DRIVER_VERIFIER_IOMANAGER_VIOLATION 0xC9

Driver Verifier 및 그래픽 드라이버

Windows 커널 모드 그래픽 드라이버(예: 프린터와 디스플레이 드라이버 DLL)는 풀 진입점을 직접 호출하지 못하도록 제한됩니다. 대신, 풀 할당은 Win32k.sys에 대한 그래픽 장치 드라이버 인터페이스(DDI) 콜백을 사용하여 간접적으로 수행됩니다. 예를 들어, EngAllocMem은 그래픽 드라이버가 명시적으로 풀 메모리를 할당하도록 호출하는 콜백입니다. 또한 EngCreatePalette 및 EngCreateBitmap처럼 다른 특수 콜백은 풀 메모리를 반환합니다.

그래픽 드라이버에 같은 종류의 자동 테스트를 제공하려면 일부 Driver Verifier 기능에 대한 지원을 Win32k.sys에 통합합니다. 그러나 그래픽 드라이버는 다른 커널 모드 드라이버보다 더 제한되므로 Driver Verifier 기능의 하위 세트만 요구합니다. 특히 IRQL 확인 및 I/O 확인은 필요가 없습니다. 특수 풀 사용, 임의의 풀 할당 실패 및 풀 추적 등의 다른 기능은 다른 그래픽 DDI 콜백에서 다양한 수준으로 지원됩니다.

임의의 실패는 다음 그래픽 DDI 콜백 함수에 지원됩니다.
  • EngAllocMem
  • EngAllocUserMem
  • EngCreateBitmap
  • EngCreateDeviceSurface
  • EngCreateDeviceBitmap
  • EngCreatePalette
  • EngCreateClip
  • EngCreatePath
  • EngCreateWnd
  • EngCreateDriverObj
  • BRUSHOBJ_pvAllocRbrush
  • CLIPOBJ_ppoGetPath
또한 특수 풀과 풀 추적은 EngAllocMem에 사용됩니다.

그래픽 드라이버의 Driver Verifier 사용은 다른 드라이버와 동일합니다(자세한 내용은 이 문서의 "Driver Verifier 사용" 절 참조). IRQL 확인처럼 지원되지 않는 플래그는 무시합니다. 또한 !gdikdx.verifier 커널 디버거 명령을 사용하여 그래픽 드라이버의 현재 Driver Verifier 상태와 풀 추적을 검사할 수 있습니다.

참고: 견고성 테스트를 위한 목적으로만 임의의 할당 실패 설정을 사용해야 합니다. 이 설정을 사용하면 오류 메시지가 렌더링될 수 있으므로 그래픽 드라이버의 구현이 올바른지 확인(예: 그래픽 드라이버 출력을 참조 이미지와 비교)하기 위한 확인 테스트에서 이 설정을 사용하지 말아야 합니다.

Driver Verifier Manager(Verifier.exe)

Driver Verifier Manager 도구(Verifier.exe)를 사용하여 Driver Verifier 설정을 만들고 수정하며 Driver Verifier의 통계를 모으는 것이 좋습니다. Windows를 설치하면 Verifier.exe는 %WinDir%\System32 폴더에 존재합니다.

드라이버 상태(Driver Status)

Driver Status 등록 정보 페이지에서는 Driver Verifier의 현재 상태에 대한 이미지를 제공합니다. Verifier가 감지하는 드라이버를 확인할 수 있습니다. 상태는 다음 중 하나가 될 수 있습니다.
  • 로드됨: 드라이버가 현재 로드되고 확인됩니다.
  • 언로드됨: 드라이버가 현재 로드되어 있지 않지만 컴퓨터를 다시 시작한 이후 적어도 한 번 이상은 로드된 적이 있습니다.
  • 로드된 적 없음: 드라이버가 로드된 적이 없습니다. 이 상태는 드라이버의 이미지 파일이 손상되었거나 시스템에서 손실된 드라이버 이름을 지정했음을 나타낼 수 있습니다.
목록 머리글을 눌러 드라이버 이름이나 상태 순으로 목록을 정렬할 수 있습니다. 대화 상자의 오른쪽 위에서 현재 사용 중인 확인 유형을 볼 수 있습니다. 수동 새로 고침 모드로 전환하지 않으면 드라이버의 상태는 자동으로 업데이트됩니다. 대화 상자의 왼쪽 아래에서 라디오 단추를 사용하여 새로 고침 빈도를 수정할 수 있습니다. 또한 Update Now를 눌러 상태를 강제로 업데이트할 수도 있습니다.

특수 풀(Special Pool) 플래그를 사용하고 풀 할당 중 95% 미만을 특수 풀로 이동한 경우 이 페이지에 경고 메시지가 나타납니다. 이것은 풀 할당을 보다 정확하게 확인하려면 확인할 드라이버 집합을 좀더 작게 선택하거나 컴퓨터에 실제 메모리를 좀더 추가해야 함을 의미합니다.

글로벌 카운터(Global Counters)

Global Counters 등록 정보 페이지에서는 Driver Verifier에서 유지 관리하는 일부 카운터의 현재 값을 보여 줍니다. 카운터의 값이 0이면 연관된 Driver Verifier 플래그를 사용할 수 없음을 나타냅니다. 예를 들어, Other/Faults 카운터의 값이 0이면 낮은 리소스 시뮬레이션 플래그를 사용할 수 없음을 나타냅니다. 카운터 값은 기본적으로 자동 업데이트되므로 Verifier의 활동을 모니터할 수 있습니다. 새로 고침 빈도를 변경하거나, 수동 새로 고침으로 전환하거나, 대화 상자의 왼쪽 아래에서 컨트롤 그룹을 사용하여 강제로 새로 고침을 실행할 수 있습니다.

풀 추적(Pool Tracking)

이 등록 정보 페이지에서는 Driver Verifier에서 수집한 자세한 통계를 보여 줍니다. 이 페이지에서 보여 주는 모든 카운터는 Verifier의 풀 추적(Pool Tracking) 플래그와 관련이 있습니다. 대부분이 드라이버 단위 카운터입니다(예: 현재 할당, 현재 할당된 바이트 등). 이것은 특정 드라이버의 카운터를 보려면 맨 위 조합 상자에서 드라이버 이름을 선택해야 함을 의미합니다.

설정(Settings)

이 페이지에서 Driver Verifier 설정을 만들고 수정할 수 있습니다. 이 설정은 레지스트리에 저장되며 설정 내용을 적용하려면 컴퓨터를 다시 시작해야 합니다. 이 목록에서 현재 설치된 드라이버를 볼 수 있습니다. 각 드라이버는 다음 상태 중 하나일 수 있습니다.
  • 확인 설정: 드라이버가 현재 확인됩니다.
  • 확인 해제: 드라이버가 현재 확인되지 않습니다.
  • 확인 설정(재부팅 필요): 다음에 다시 시작한 후에만 드라이버가 확인됩니다.
  • 확인 해제(재부팅 필요): 드라이버가 현재 확인되지만 다음에 다시 시작한 후는 확인되지 않습니다.
목록에서 드라이버를 한 개 또는 여러 개 선택할 수 있고 목록에 나오는 두 개의 단추를 사용하여 상태를 전환할 수 있습니다. 드라이버 이름을 마우스 오른쪽 단추로 눌러 상태 전환을 수행할 수 있게 하는 상황에 맞는 메뉴를 표시할 수도 있습니다.

대화 상자의 아랫 부분에서 다음에 다시 시작한 후 확인할 추가 드라이버(공백으로 분리)를 지정할 수 있습니다. 아직 로드하지 않은 새 드라이버를 설치하려고 할 때 주로 이 편집 컨트롤을 사용합니다.

목록의 맨 위에 있는 라디오 단추 그룹을 Verify all drivers로 설정하면 해당 목록과 Verify, Don't Verify 단추 및 편집 컨트롤을 사용할 수 없습니다. 이것은 다음에 다시 시작한 후에 시스템의 모든 드라이버가 확인됨을 의미합니다.

대화 상자의 오른쪽 위에 있는 확인란을 사용하여 확인 유형을 설정할 수 있습니다. I/O Verification을 level 1이나 level 2로 설정할 수 있습니다. level 2는 level 1보다 강력합니다.

Apply를 눌러 해당 설정에 대한 수정 사항을 저장해야 합니다. 이 페이지에는 두 개의 단추가 더 있습니다.
  • Preferred Settings: 이 단추는 일반적으로 사용되는 설정(모든 드라이버 확인)을 선택합니다.
  • Reset All: 이 단추는 모든 Driver Verifier 설정을 취소하므로 어떤 드라이버도 확인되지 않습니다.
변경 내용을 적용하려면 Apply를 누른 후 컴퓨터를 다시 시작해야 합니다.

위반 설정(Volatile Settings)

이러한 등록 정보 페이지를 사용하여 Driver Verifier 플래그를 즉시 변경할 수 있습니다. 일부 Driver Verifier 플래그 상태를 전환할 수는 있지만 확인 중인 드라이버 목록을 변경할 수는 없습니다. 변경 내용을 적용하려면 일부 확인란의 상태를 변경한 후 Apply를 눌러야 합니다. 이 변경 내용은 즉시 적용되며 추가로 변경하거나 컴퓨터를 다시 시작하기 전까지 유지됩니다.

명령줄 인터페이스

명령줄에서 Verifier.exe를 실행할 수도 있습니다. 자세한 내용을 보려면 명령 프롬프트에서 verifier.exe /?를 입력하십시오. 다음은 주로 사용되는 명령줄 플래그에 대한 목록입니다.
  • verifier.exe /flags value [/iolevel 2]
    Driver Verifier 플래그의 십진수 값과 I/O verification에 대한 수준을 지정할 수 있습니다. 사용 가능한 플래그 목록을 보려면 명령 프롬프트에서 verifier.exe /?를 입력하거나 이 문서의 "Driver Verifier 사용" 절을 참조하십시오.

    다음 확인 비트 값 중 하나로 value 매개 변수를 대체합니다.
    0 - 특수 풀 확인
    1 - IRQL 확인
    2 - 낮은 리소스 시뮬레이션
    3 - 풀 추적
    4 - I/O 확인
    5 - 교착 상태 감지
    6 - 향상된 I/O 확인
    7 - DMA 확인
    예를 들어, 다음 명령을 입력합니다.
    c:\verifier /flags 3 /iolevel 2
    참고: 기본 I/O 확인 수준은 1입니다. I/O 확인 비트가 플래그에 설정되지 않은 경우 이 값은 무시됩니다.
  • verifier.exe /all
    시스템의 모든 드라이버를 확인합니다.
  • verifier.exe /volatile /flags value
    Verifier 플래그를 즉시 변경합니다.
  • verifier.exe /reset
    현재 모든 Driver Verifier 설정을 지웁니다.
  • verifier /query
    표준 출력으로 현재 Driver Verifier 상태와 카운터를 덤프합니다.
  • verifier.exe /log LOG_FILE_NAME [/interval seconds]
    로그 파일에 Driver Verifier 상태와 카운터를 기록합니다(여기서 seconds 는 지정한 시간임).




Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.

속성

기술 자료: 244617 - 마지막 검토: 2003년 10월 13일 월요일 - 수정: 2.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows 2000 Datacenter Server
키워드:?
kbhowto kbenv kbprogramming KB244617

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com