체계적인 낮은 리소스 시뮬레이션

체계적인 낮은 리소스 시뮬레이션 옵션은 커널 모드 드라이버에 리소스 오류를 삽입합니다. 이 옵션은 드라이버 오류 처리 경로에 침투합니다. 이러한 경로를 테스트하는 것은 역사적으로 매우 어려웠습니다. 체계적인 낮은 리소스 시뮬레이션 옵션은 예측 가능한 방식으로 리소스 오류를 삽입하므로 문제를 재현할 수 있습니다. 오류 경로는 쉽게 재현할 수 있으므로 이러한 문제에 대한 수정 사항을 쉽게 확인할 수 있습니다.

오류의 근본 원인을 확인할 수 있도록 삽입된 오류와 순서를 정확히 알 수 있는 디버거 확장이 제공됩니다.

주의 이 옵션은 컴퓨터에서 모든(또는 많은 수의) 드라이버를 확인할 때 사용하기 위한 것이 아닙니다. 이 옵션은 개별 드라이버 또는 연결된 필터 드라이버의 대상 테스트를 수행하는 경우에만 사용해야 합니다. 동시에 많은 수의 드라이버에서 이 옵션을 사용하면 예측할 수 없는 결과가 발생할 수 있으며 테스트 중인 드라이버와 관련이 없는 구성 요소에서 강제로 충돌이 발생할 수 있습니다.

참고 Windows 8.1 경우 WDK 8에서 사용할 수 있었던 스택 기반 오류 주입 기능이 드라이버 검증 도구에 통합되었습니다. Windows 8.1 실행하는 컴퓨터에서 체계적인 낮은 리소스 시뮬레이션 옵션을 사용합니다.

특정 드라이버에서 체계적인 낮은 리소스 시뮬레이션 옵션을 사용하도록 설정하면 해당 드라이버에서 커널로의 일부 호출을 가로채서 Ndis.sys. 체계적인 낮은 리소스 시뮬레이션은 호출 스택, 특히 호출 스택이 활성화된 드라이버에서 제공되는 호출 스택 부분을 확인합니다. 해당 스택을 처음 본 경우 해당 호출의 의미 체계에 따라 호출이 실패합니다. 그렇지 않으면 이전에 해당 호출을 본 적이 있으면 그대로 전달됩니다. 체계적인 낮은 리소스 시뮬레이션에는 드라이버를 여러 번 로드하고 언로드할 수 있다는 사실을 처리하는 논리가 포함되어 있습니다. 드라이버가 다른 메모리 위치에 다시 로드되더라도 호출 스택이 동일하다는 것을 인식합니다.

이 옵션 활성화

드라이버 검증 도구 관리자 또는 Verifier.exe 명령줄을 사용하여 하나 이상의 드라이버에 대한 체계적인 낮은 리소스 시뮬레이션 기능을 활성화할 수 있습니다. 자세한 내용은 드라이버 검증 도구 옵션 선택을 참조하세요. 체계적인 낮은 리소스 시뮬레이션 옵션을 활성화하거나 비활성화하려면 컴퓨터를 다시 시작해야 합니다.

  • 명령줄에서

    Windows 11

    명령줄에서 체계적인 낮은 리소스 시뮬레이션은 검증 도구 /rc 19 36 또는 검증 도구 /dif 19로 표현되며, 둘 다 필요한 DIF 모드를 포함합니다.

    이 기능은 다음 부팅 후 활성화되거나 명령 문자열에 /now 가 추가되면 즉시 활성화됩니다.

    Windows 10 이하

    명령줄에서 체계적인 낮은 리소스 시뮬레이션은 검증자 /flags 0x040000 (비트 18)로 표시됩니다. 체계적인 낮은 리소스 시뮬레이션을 위해 플래그 값 0x040000 사용하거나 플래그 값에 0x040000 추가합니다. 예를 들면 다음과 같습니다.

    verifier /flags 0x040000 /driver MyDriver.sys
    

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

    일반

    체계적인 낮은 리소스 시뮬레이션 옵션을 사용하도록 설정하면 /faultssystematicOPTION 명령줄 옵션을 사용하여 체계적인 낮은 리소스 시뮬레이션을 추가로 제어할 수 있습니다.

    OPTION Description

    enableboottime

    컴퓨터 재부팅에서 오류 주입을 사용하도록 설정합니다.

    disableboottime

    컴퓨터 재부팅에서 오류 주입을 사용하지 않도록 설정합니다(기본 설정임).

    recordboottime

    컴퓨터 전체에서 모드가 다시 부팅 되면 가상 에서 오류 주입을 사용하도록 설정합니다.

    resetboottime

    컴퓨터 재부팅에서 오류 삽입을 사용하지 않도록 설정하고 스택 제외 목록을 지웁니다.

    enableruntime

    동적으로 오류 주입을 사용하도록 설정합니다.

    disableruntime

    동적으로 오류 삽입을 사용하지 않도록 설정합니다.

    recordruntime

    what if 모드에서 오류 주입을 동적으로 사용하도록 설정합니다.

    resetruntime

    동적으로 오류 삽입을 사용하지 않도록 설정하고 이전에 오류가 발생한 스택 목록을 지웁니다.

    querystatistics

    현재 오류 주입 통계를 표시합니다.

    incrementcounter

    오류가 주입된 시기를 식별하는 데 사용되는 테스트 통과 카운터를 증분합니다.

    getstackid COUNTER

    표시된 삽입된 스택 식별자를 검색합니다.

    excludestack STACKID

    오류 주입에서 스택을 제외합니다.

  • 드라이버 검증 도구 관리자 사용

    1. 드라이버 검증 도구 관리자를 시작합니다. 명령 프롬프트 창에 검증 도구를 입력합니다.
    2. 사용자 지정 설정 만들기(코드 개발자용)를 선택한 다음, 다음을 클릭합니다.
    3. 전체 목록에서 개별 설정 선택을 선택합니다.
    4. (검사) 체계적인 낮은 리소스 시뮬레이션을 선택합니다.
    5. 컴퓨터를 다시 시작합니다.

체계적인 낮은 리소스 시뮬레이션으로 인한 버그 검사 디버깅

체계적인 낮은 리소스 시뮬레이션에서 발견된 대부분의 문제는 버그 검사를 초래합니다. 이러한 코드 버그의 원인을 파악 하기 위해 Windows용 디버깅 도구 는 디버거 확장(kdexts.dll) 및 필요한 기호를 제공합니다.

디버거 확장을 실행하려면

  • 디버거 명령 프롬프트에서 다음 명령을 입력합니다.

    !verifier 0x800
    

그러면 삽입된 가장 최근 오류의 호출 스택을 보여 주는 정보가 디버거에 덤프됩니다.