IRQL 검사 강제 적용

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

IRQL 강제 검사를 사용하도록 설정하면 드라이버 검증 도구는 시스템 메모리 사용에 극도의 압력을 가합니다. 확인되는 드라이버가 스핀 잠금을 요청하거나 , KeSynchronizeExecution을 호출하거나, IRQL을 DISPATCH_LEVEL 이상으로 발생시킬 때마다 모든 시스템 페이징 가능한 풀, 코드 및 데이터(드라이버의 페이징 가능한 코드 및 데이터 포함)가 작업 집합에서 잘립니다. 드라이버가 이 메모리에 액세스하려고 하면 드라이버 검증 도구에서 버그 검사 발생합니다.

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

메모리 사용량에 대한 이러한 압력은 확인을 위해 선택되지 않은 드라이버에 직접적인 영향을 미치지 않습니다. 확인을 위해 선택되지 않은 드라이버가 IRQL을 발생시키는 경우 트리밍 작업이 트리거되지 않습니다. 그러나 확인 중인 드라이버가 IRQL을 발생시키는 경우 드라이버 검증 도구는 확인되지 않는 드라이버에서 사용할 수 있는 페이지를 트리밍합니다. 따라서 확인되지 않는 드라이버에서 커밋된 오류는 이 옵션이 활성 상태일 때 가끔 적발될 수 있습니다.

IRQL 발생 및 스핀 잠금 모니터링

확인 중인 드라이버에서 만든 KESynchronizeExecution 에 대한 IRQL 발생, 스핀 잠금 및 호출 수를 모니터링할 수 있습니다. 드라이버 검증 도구가 작업 집합에서 페이저닝 가능한 메모리를 트리밍한 횟수도 모니터링할 수 있습니다. 이러한 통계는 드라이버 검증 도구 관리자, 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 강제 검사 옵션은 비트 1(0x2)으로 표시됩니다. IRQL 강제 검사를 활성화하려면 플래그 값 0x2 사용하거나 플래그 값에 0x2 추가합니다. 예:

    verifier /flags 0x2 /driver MyDriver.sys
    

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

    명령에 /volatile 매개 변수를 추가하여 컴퓨터를 다시 부팅하지 않고 IRQL 강제 검사를 활성화하고 비활성화할 수도 있습니다. 예:

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

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

    IRQL 강제 검사 기능도 표준 설정에 포함되어 있습니다. 예:

    verifier /standard /driver MyDriver.sys
    
  • 드라이버 검증 도구 관리자 사용

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

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