지원되는 드라이버
SDV가 드라이버를 확인하려면 드라이버 코드, 특히 드라이버의 진입점 및 필수 드라이버 기능을 지원하는 함수 및 루틴의 코드를 해석할 수 있어야 합니다.
다음 섹션에서는 드라이버에 대한 기본 요구 사항 및 SDV에서 확인하는 드라이버에 대해 기대하는 특정 구문에 대해 설명합니다. 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 및 정적 도구 로고 테스트를 참조하세요.
기본 드라이버 특성
SDV는 다음과 같은 특성을 가진 드라이버만 확인할 수 있습니다.
SDV는 C 및 C++로 작성된 드라이버 및 라이브러리를 확인합니다.
SDV는 KMDF 규격 및 WDM 규격 디바이스 드라이버(함수 드라이버, 필터 드라이버 및 버스 드라이버), NDIS 드라이버(필터, 미니포트 및 프로토콜 드라이버) 및 Storport 드라이버에서만 전체 확인을 수행합니다.
SDV는 위의 범주에 맞지 않는 드라이버에서 제네릭 속성(예: NullCheck)의 제한된 확인을 시도합니다.
SDV는 WDM 함수 역할 형식을 사용하여 드라이버 콜백 함수를 선언하는 WDM 드라이버를 확인할 수 있습니다. 함수를 선언하는 방법에 대한 자세한 내용은 WDM 드라이버에 함수 역할 형식을 사용하여 함수 선언을 참조 하세요.
SDV는 SDV-KMDF 콜백 함수 역할 유형을 사용하여 각 콜백 함수를 선언하는 경우 커널 모드 드라이버 프레임워크에서 생성된 드라이버를 확인할 수 있습니다. 자세한 내용은 KMDF 드라이버에 함수 역할 형식을 사용하여 함수 선언을 참조 하세요.
SDV-NDIS 콜백 함수 형식을 사용하여 각 콜백 함수에 함수 선언에 주석을 달면 SDV는 NDIS 드라이버를 확인할 수 있습니다. 자세한 내용은 NDIS 드라이버에 함수 역할 형식을 사용하여 함수 선언을 참조 하세요.
SDV는 함수 선언을 사용하여 각 콜백 함수에 주석을 달면 Storport 드라이버를 확인할 수 있습니다. SDV-Storport 콜백 함수 형식을 사용하여 이 작업을 수행합니다. 자세한 내용은 Storport 드라이버에 함수 역할 형식을 사용하여 함수 선언을 참조 하세요.
기본 드라이버 요구 사항
SDV가 WDM 드라이버를 확인하려면 드라이버는 다음을 수행해야 합니다.
Wdm.h 또는 Ntddk.h 포함(Wdm.h는 Ntddk.h의 하위 집합임).
디바이스 개체 소개 및 다음에 설명 된 메서드를 사용하여 디바이스 개체를 만듭니다.
언로드 루틴 작성에 권장되는 대로 작성된 언로드 루틴을 갖습니다.
함수 역할 형식 선언 사용에 설명된 함수 역할 형식 선언을 사용하여 각 디스패치 함수를 선언합니다. WDM 역할 형식 및 _Dispatch_type_(형식) 주석에 대한 자세한 내용은 WDM 드라이버에 함수 역할 형식을 사용하여 함수 선언을 참조 하세요.
SDV가 KMDF 드라이버를 확인하려면 드라이버는 다음을 수행해야 합니다.
Wdf.h 및 Ntddk.h를 포함합니다.
프레임워크를 사용하여 드라이버를 개발하는 데 설명된 KMDF 개체를 만듭니다.
함수 역할 형식 선언 사용에 설명된 SDV-KMDF 콜백 함수 역할 형식을 사용하여 각 콜백 함수에 주석을 추가합니다. 지원되는 역할 형식 목록은 정적 드라이버 검증 도구 KMDF 함수 선언을 참조 하세요.
SDV가 NDIS 드라이버를 확인하려면 드라이버는 다음을 수행해야 합니다.
Ndis.h 및 Ntddk.h를 포함합니다.
네트워크 디자인 가이드의 지침에 따라 NDIS 드라이버를 만듭니다.
함수 역할 형식 선언 사용에 설명된 대로 SDV-NDIS 콜백 함수 역할 형식을 사용하여 각 콜백 함수에 주석을 추가합니다. 지원되는 역할 형식 목록은 정적 드라이버 검증 도구 NDIS 함수 선언을 참조 하세요.
또한 SDV는 다음을 지원하는 드라이버를 확인할 수 있습니다.
예약 함수 이름
드라이버 또는 라이브러리 코드가 SDV 에서 내부적으로 사용하는 것과 동일한 함수 이름 패턴을 사용하는 경우 SDV 확인 엔진 이 제대로 작동하지 않습니다.
특히 다음과 같은 경우 SDV는 코드를 올바르게 해석하지 않습니다.
이 코드에는 __init 시작하고 __init123 같은 하나 이상의 정수가 뒤에 잇는 함수 이름이 포함됩니다.
코드에는 sdv_Func 같은 sdv_ 시작하거나 Func_sdv_ 또는 Func_sdv_foo 같은 _sdv_문자열을 포함하는 함수 이름이 포함됩니다.
라이브러리는 파일을 사용하여
.def
내보낸 함수의 이름을 바꾸고 외부 이름은 라이브러리의 다른 정적 함수 이름과 동일합니다.
드라이버 코드 또는 라이브러리 코드에 이러한 요소가 포함된 경우 SDV는 드라이버를 확인하거나 라이브러리를 처리하려고 시도하지만 결과는 NSF(지원되지 않는 기능)입니다. SDV 결과에 대한 자세한 내용은 정적 드라이버 검증 도구 결과 해석을 참조 하세요.