IRQL 강제 검사

커널 모드 드라이버는 높은 IRQL에서 또는 스핀 잠금이 유지되는 동안 페이징 가능한 메모리에 액세스하는 것이 금지되지만, 페이지가 실제로 작업 집합에서 잘라지지 않고 디스크로 페이지 출력된 경우 그러한 동작이 감지되지 않을 수 있습니다.

IRQL 강제 검사를 사용하도록 설정하면 드라이버 검증 도구로 인해 시스템 메모리 사용이 크게 증가합니다. 검증 중인 드라이버가 스핀 잠금을 요청하거나, KeSynchronizeExecution을 호출하거나, IRQL을 DISPATCH_LEVEL 이상으로 높이는 경우 드라이버의 모든 페이징 가능한 코드와 데이터를 포함하여 시스템의 모든 페이징 가능한 풀, 코드 및 데이터가 작업 집합에서 잘립니다. 드라이버가 이러한 메모리 중 일부에 액세스하려는 경우 드라이버 검증 도구는 버그 검사를 실행합니다.

Windows Vista부터 이 옵션을 선택하면 드라이버 검증 도구는 특정 동기화 개체가 페이징 가능한 메모리에 포함되는 경우를 감지합니다. 운영 체제 커널은 관리자 권한 IRQL에서 이러한 동기화 개체에 액세스하므로 이러한 개체는 페이지될 수 없습니다. 드라이버 검증 도구는 페이징 가능한 KTIMER, PRKMUTEX, PKSPIN_LOCK, PRKEVENT, PKSPIN_LOCK, PRKSEMAPHORE, PERESOURCE 및 FAST_MUTEX 구조를 감지할 수 있습니다.

이러한 메모리 사용 증가는 검증이 선택되지 않은 드라이버에 직접 영향을 주지 않습니다. 검증이 선택되지 않은 드라이버에서 IRQL이 발생하는 경우 자르기 작업이 트리거되지 않습니다. 그러나 검증 중인 드라이버가 IRQL을 올리면, 드라이버 검증 도구는 검증되지 않는 드라이버에서 사용할 수 있는 페이지를 자릅니다. 따라서 이 옵션이 활성 상태인 경우, 검증되지 않는 드라이버에서 커밋한 오류가 더러 파악될 수 있습니다.

IRQL 올림 및 스핀 잠금 모니터링

IRQL 올림, 스핀 잠금, 드라이버의 KeSynchronizeExecution에 대한 호출 등의 횟수를 모니터링할 수 있습니다. 드라이버 검증 도구가 작업 집합에서 페이징 가능한 메모리를 자른 횟수도 모니터링할 수 있습니다. 이러한 통계는 드라이버 검증 도구 관리자, Verifier.exe 명령줄 또는 로그 파일에 표시할 수 있습니다. 자세한 내용은 글로벌 카운터 모니터링을 참조하세요.

이러한 통계를 모니터링하는 데 커널 디버거 확장 !verifier를 사용할 수도 있습니다. 이 확장은 드라이버 검증 도구 관리자의 정보와 유사한 정보를 제공합니다. Windows XP 이상에서 !verifier 0x8 확장은 검증 중인 드라이버에서 수행한 최신 IRQL 변경 사항의 로그를 표시합니다. 디버거 확장에 대한 자세한 내용은 Windows 디버깅을 참조하세요.

DISPATCH_LEVEL 이상에서 KeEnterCriticalRegion 또는 KeLeaveCriticalRegion 호출

KeEnterCriticalRegionKeLeaveCriticalRegion은 일반 커널 APC(비동기 프로시저 호출)의 전달과 함께 드라이버 코드의 중요 순서 실행을 동기화하는 데 사용할 수 있는 API입니다. KeEnterCriticalRegionKeLeaveCriticalRegion API는 IRQL = DISPATCH_LEVEL 이상에서 호출할 수 없습니다. DISPATCH_LEVEL 이상에서 KeEnterCriticalRegion 또는 KeLeaveCriticalRegion을 호출하면 시스템 정지 또는 메모리 손상이 발생할 수 있습니다.

Windows 7부터 IRQL 강제 검사 옵션이 사용되면 드라이버 검증 도구는 DISPATCH_LEVEL 이상에서 이러한 API에 대해 호출됩니다.

이 옵션 활성화

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

  • 명령줄에서

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

    
    verifier /flags 0x2 /driver MyDriver.sys
    
    

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

    또한 Windows 2000 이상에서는 명령에 /volatile 매개 변수를 추가하면 컴퓨터를 다시 부팅하지 않고도 IRQL 강제 검사를 활성화 및 비활성화할 수 있습니다. 예를 들면 다음과 같습니다.

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

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

    IRQL 강제 검사 기능은 표준 설정에도 포함되어 있습니다. 예를 들면 다음과 같습니다.

    
    verifier /standard /driver MyDriver.sys
    
    
  • 드라이버 검증 도구 관리자 사용
    1. 드라이버 검증 도구 관리자를 시작합니다. 명령 프롬프트 창에 Verifier를 입력합니다.
    2. 사용자 지정 설정 만들기(코드 개발자용)를 선택하고 다음을 클릭합니다.
    3. 전체 목록에서 개별 설정 선택을 선택합니다.
    4. IRQL 강제 검사를 선택합니다.

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

 

 

표시:
© 2015 Microsoft