정적 드라이버 검증 도구 이해
WDM(Windows 드라이버 모델) 또는 KMDF(커널 모드 드라이버 프레임워크), NDIS 또는 Storport를 준수하는 강력한 드라이버를 작성하려면 전문 지식과 드라이버가 I/O 관리자와 상호 작용하는 방식을 이해해야 합니다. 이러한 드라이버를 테스트하는 것은 똑같이 까다롭습니다.
다음과 같은 이유로 견고한 드라이버를 개발하는 것이 어려울 수 있습니다.
드라이버는 단일 프로세서 컴퓨터에서도 비동기적입니다.
운전자는 엄청나게 재진입합니다.
드라이버는 많은 모호한 규칙을 사용합니다.
드라이버 모델은 시간이 지남에 따라 진화와 나이입니다.
디바이스 드라이버 테스트는 다음과 같은 이유로 제한됩니다.
관찰. 드라이버와 운영 체제 간의 상호 작용에서 오류를 관찰할 수 없습니다. 드라이버는 암시적 사용 규칙을 위반하여 충돌 또는 부적절한 동작을 초래할 수 있지만 드라이버를 개발하고 테스트할 때 오류의 근본 원인을 감지하기는 어렵습니다.
제어력. 정상적인 상황에서 제대로 작동하는 드라이버는 스택의 드라이버가 IRP에 실패하는 경우와 같이 예외적인 상황에서만 발생하는 미묘한 오류가 있을 수 있습니다. 이러한 상황은 실행하기 어렵기 때문에 기존 테스트는 드라이버 코드를 통해 오류 경로를 적절하게 감지하지 못합니다.
SDV는 드라이버를 테스트할 때 갖는 관찰 및 제어를 모두 향상시킵니다. SDV는 WDM, KMDF, NDIS 및 Storport 함수의 적절한 사용을 위한 규칙을 정의하고 해당 규칙을 준수하는 드라이버의 모니터링을 통해 오류를 관찰하는 기능을 향상시킵니다. 예를 들어 WDM 규칙 LowerDriverReturn 은 특정 상황에서 드라이버의 디스패치 루틴이 항상 스택의 하위 드라이버에 의해 반환된 값을 반환해야 한다고 지정합니다.
또한 SDV는 다음을 제공하여 제어를 향상합니다.
여러 최악의 시나리오(예: 운영 체제 호출이 지속적으로 실패)가 발생할 수 있는 드라이버 환경의 적대적인 모델입니다.
드라이버에서 가능한 모든 실행 경로를 체계적으로 탐색하는 강력한 정적 분석(모델 검사라고 함)입니다.
SDV는 디바이스 드라이버에 대한 필수 단위 테스트 도구입니다. 드라이버를 적대적인 환경에 배치하고 드라이버 모델 사용 규칙 위반을 검색하여 드라이버를 통해 코드 경로를 체계적으로 테스트합니다.
Important
SDV는 더 이상 지원되지 않으며 Windows 24H2 WDK 또는 EWDK 릴리스에서는 SDV를 사용할 수 없습니다. 빌드 26017보다 최신의 WDK에서는 사용할 수 없으며 Windows 24H2 RTM WDK에는 포함되지 않습니다.
SDV는 WDK(Windows 드라이버 키트) 다운로드에서 Visual Studio 빌드 도구 17.1.5와 함께 Windows 11 버전 22H2 EWDK(2023년 10월 24일 릴리스)를 다운로드하여 계속 사용할 수 있습니다. SDV를 실행하는 데 엔터프라이즈 WDK만 사용하는 것이 좋습니다. 최신 버전의 Visual Studio와 함께 표준 WDK의 이전 버전을 사용하는 것은 권장되지 않습니다. 따라서 분석 실패가 발생할 수 있습니다.
앞으로 CodeQL은 드라이버의 기본 정적 분석 도구가 될 것입니다. CodeQL은 코드를 쿼리할 데이터베이스로 처리하는 강력한 쿼리 언어를 제공하므로 특정 동작, 패턴 등에 대한 쿼리를 간단하게 작성할 수 있습니다.
CodeQL 사용에 대한 자세한 내용은 CodeQL 및 정적 도구 로고 테스트를 참조하세요.