정적 드라이버 검증 도구 명령(MSBuild)
WDK(Windows 드라이버 키트)를 설치하거나 EWDK(Enterprise Windows 드라이버 키트) 를 실행하여 Visual Studio 명령 프롬프트 창에서 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 및 정적 도구 로고 테스트를 참조하세요.
msbuild /t:sdv /p:Inputs="Parameters" ProjectFile /p:Configuration=configuration /p:Platform=platform
릴리스 구성(예 : /p:Configuration="Windows 7 릴리스")을 선택해야 합니다. 지원되는 릴리스 구성 목록은 드라이버 빌드를 참조 하세요. 플랫폼은 Win32(x86의 경우) 또는 x64(예: /p:Platform=Win32)일 수 있습니다.
참고 항목
컴퓨터의 전원 관리 계획을 확인하여 분석 중에 컴퓨터가 절전 모드로 전환되지 않도록 해야 합니다.
매개 변수
/스캔하다
드라이버의 소스 코드에서 함수 역할 형식 선언을 검색합니다. 드라이버 제공 콜백 함수를 선언하고 루틴을 디스패치하는 방법에 대한 자세한 내용은 함수 역할 형식 선언 사용을 참조 하세요. 이 검사 중에 SDV는 드라이버를 확인하는 데 필요한 드라이버 진입점을 검색하려고 시도합니다. 드라이버의 프로젝트 디렉터리에 만든 파일인 Sdv-map.h에서 검사 결과를 기록합니다.
자세한 내용은 소스 코드 준비를 참조하세요.
/check:Rule | rule,...
지정된 규칙을 사용하여 확인을 시작합니다. 각 규칙을 쉼표로 구분하여 둘 이상의 규칙을 지정할 수 있습니다. /check: 명령을 실행하고 드라이버의 Visual Studio 프로젝트 파일(*.vcxproj)을 지정합니다.
규칙은 하나 이상의 문자를 나타내는 와일드카드 문자(*)를 포함하는 규칙 또는 규칙 이름 패턴의 이름입니다. 단독으로 사용하는 경우 와일드카드 문자(*)는 모든 규칙을 나타냅니다.
/check:RuleList.sdv
지정된 규칙 목록 파일의 규칙을 사용하여 확인을 시작합니다. 이 매개 변수를 사용하여 하나의 파일만 나열할 수 있습니다. 규칙 목록 파일에서 각 줄은 하나의 규칙 이름이거나 모든 SDV 규칙을 나타내는 와일드카드 문자(*)일 수 있습니다. /check:RuleList.sdv 명령을 실행하고 드라이버의 Visual Studio 프로젝트 파일(*.vcxproj)을 지정합니다.
RuleList.sdv는 규칙 목록 파일의 정규화된 경로 및 파일 이름입니다. 파일에는 .sdv 파일 이름 확장명이 있어야 합니다. 파일이 로컬 디렉터리에 있지 않으면 경로가 필요합니다. 경로 또는 파일 이름에 공백이 포함된 경우 RuleList를 묶 어야 합니다.sdv (따옴표)입니다.
규칙을 지정하지 않고 /check: 옵션을 지정하면 SDV는 드라이버 모델에 대한 기본 규칙 집합으로 실행됩니다.
/lib
현재 디렉터리에서 라이브러리를 처리합니다. SDV는 MSBuild.exe 호출하여 외부 사용을 위해 라이브러리를 컴파일하고 빌드하며, 드라이버 확인에 라이브러리를 포함해야 하는 파일을 생성합니다.
라이브러리가 필요한 드라이버를 확인하기 전에 이 매개 변수를 사용합니다. msbuild /t:sdv /p:Inputs="/lib" 명령을 실행하고 라이브러리에 대한 Visual Studio 프로젝트 파일(*.vcxproj)을 지정합니다.
/lib 매개 변수의 사용 및 효과에 대한 자세한 내용은 정적 드라이버 검증 도구의 라이브러리 처리를 참조하세요.
/보기
정적 드라이버 검증 도구를 엽니다. /view 명령을 실행하고 드라이버의 Visual Studio 프로젝트 파일(*.vcxproj)을 지정합니다.
확인이 완료되는 즉시 결과를 사용할 수 있으며 /clean 명령을 사용하여 드라이버의 프로젝트 디렉터리에서 SDV 파일을 삭제할 때까지 계속 사용할 수 있습니다.
/깨끗이
디렉터리에서 SDV 파일을 삭제합니다. 이러한 파일은 정적 드라이버 검증 도구 보고서 표시 를 생성하는 데 사용되므로 /clean 명령은 확인 보고서도 삭제합니다.
/clean 명령을 실행하고 드라이버 또는 라이브러리에 대한 Visual Studio 프로젝트 파일(*.vcxproj)을 지정합니다. 이 명령은 지정된 프로젝트에 대해서만 SDV 파일을 삭제합니다.
각 확인 전에 드라이버 프로젝트에 대해 /clean 명령을 실행합니다.
라이브러리 파일이 오래된 경우(예: 라이브러리 코드가 변경될 때) 라이브러리에 대해 /clean 명령을 실행합니다.
승인된 플래그가 Sdv-map.h 파일(Approved=true)에서 true로 설정된 경우 /clean 명령은 Sdv-map.h 파일을 제거하지 않습니다. 그런 다음 SDV는 이 파일을 사용하여 나중에 확인할 수 있습니다.
/?
SDV 명령에 대한 사용량을 표시합니다. 이 매개 변수를 사용하는 명령은 빌드 환경 창에서 실행할 필요가 없습니다.
설명
매개 변수 없이 msbuild /t:/sdv p:/Inputs= /?를 실행하면 SDV 명령에 대한 사용량이 표시됩니다.
/clean 명령은 SDV가 확인을 위해 정적 드라이버 검증 도구 보고서 표시를 만드는 데 사용하는 파일을 삭제합니다. 이 명령을 실행한 후에는 확인에 대한 정적 드라이버 검증 도구 보고서 표시를 더 이상 사용할 수 없습니다.
예제
mydriver 프로젝트의 로컬 디렉터리에 있는 드라이버 파일에 대한 모든 규칙을 사용하여 SDV를 실행하려면 다음을 수행합니다.
msbuild /t:sdv /p:Inputs="/check:*" mydriver.VcxProj /p:Configuration="Windows 7 Release"/p:Platform=Win32
로컬 디렉터리의 드라이버 파일에서 CancelSpinLock 규칙을 사용하여 SDV를 실행하려면 다음을 수행합니다.
msbuild /t:sdv /p:Inputs="/check:CancelSpinLock" mydriver.VcxProj /p:Configuration="Windows 7 Release" /p:Platform=Win32
D:\SDV 디렉터리의 Rules1.sdv 규칙 목록 파일에 지정된 규칙을 사용하여 SDV를 실행하려면 다음을 수행합니다.
msbuild /t:sdv /p:Inputs="/check:D:\SDV\Rules1.sdv" mydriver.VcxProj /p:Configuration="Windows 7 Release" /p:Platform=Win32
SDV를 다시 실행하려면 이번에는 /clean 옵션을 사용합니다.
msbuild /t:sdv /p:Inputs="/clean" mydriver.VcxProj /p:Configuration="Windows 7 Release"/p:Platform=Win32
로컬 디렉터리에서 드라이버의 최신 확인 결과를 볼 수 있도록 정적 드라이버 검증 도구를 표시하려면 다음을 수행합니다.
msbuild /t:sdv /p:Inputs="/view" mydriver.VcxProj /p:Configuration="Windows 7 Release" /p:Platform=Win32