다음을 통해 공유


정적 도구 로고 테스트

이 테스트는 드라이버의 안정성과 보안을 향상하도록 설계된 정적 분석을 수행합니다. 인증을 위해 정적 도구 로고 테스트를 통과하려면 커널 모드 드라이버 제출이 필요합니다. Windows 하드웨어 호환성 프로그램을 준수하려면 서명 또는 인증을 위해 Microsoft에 제출하기 위해 커널 모드 드라이버의 정적 분석에 CodeQL 을 사용해야 합니다.

테스트 세부 정보

   
사양
  • Device.DevFund.StaticTools.StaticAnalysisForDrivers
Platforms
  • Windows 11 클라이언트(x64)
  • Windows 11, 클라이언트(ARM64)
  • Windows Server
지원되는 릴리스
  • Windows 11 클라이언트(x64)
  • Windows 11, 클라이언트(ARM64)
  • Windows Server
예상 실행 시간(분) 5
범주 개발
시간 제한(분) 0
다시 부팅 필요 false
특별한 구성 필요 false
형식 automatic

Windows 클라이언트 인증에 대한 정적 분석

CodeQL은 소프트웨어 보안을 위한 효과적인 정적 분석 기술입니다. 가치가 높은 보안 쿼리의 광범위한 모음과 강력한 플랫폼의 조합으로 타사 드라이버 코드를 보호하는 데 매우 중요한 도구가 됩니다.

Windows 에코시스템의 보안 기준을 높이기 위해 Microsoft는 모든 드라이버 제출이 드라이버 소스 코드에서 CodeQL 엔진을 사용하고 "반드시 수정해야 함"으로 간주되는 쿼리를 수정해야 한다고 명시하는 Windows 하드웨어 호환성 프로그램에 이 요구 사항을 추가했습니다.

이 요구 사항은 정적 도구 로고 테스트의해 적용됩니다.

드라이버 소스 코드에서 CodeQL을 다운로드하고 실행하는 방법에 대한 자세한 내용은 CodeQL 및 정적 도구 로고 테스트를 참조하세요. 아래의 "CodeQL 및 DVL 생성" 섹션과 함께 나와 있는 해당 페이지를 따르면 정적 도구 로고 테스트가 테스트의 일부로 드라이버 소스 코드에서 CodeQL을 실행한 결과를 제대로 사용하도록 할 수 있습니다.

CodeQL 및 정적 도구 로고 테스트는 어떤 유형의 드라이버에 적용됩니까?

현재 정적 도구 로고 테스트를 수행하려면 CodeQL을 실행하고 그래픽 드라이버를 제외한 모든 커널 모드 드라이버에 대해 전달된 "Must-Fix" 쿼리 집합이 필요합니다. 현재 필요하지는 않지만 그래픽 드라이버 에서 CodeQL을 실행하는 것이 좋습니다 . 일부 쿼리는 사용자 모드 구성 요소에서 유용한 결함을 찾을 수도 있습니다.

향후에는 그래픽 드라이버, 사용자 모드 드라이버 및 드라이버 구성 요소 및 기타 드라이버 패키지 구성 요소에 대한 결과가 필요하도록 테스트 및 해당 쿼리를 확장할 것으로 예상합니다. 그래픽 드라이버 또는 사용자 모드 드라이버에서 CodeQL을 실행하는 예기치 않은 동작 또는 가양성 문제가 발생하는 경우 Windows-Driver-Developer-Supplemental-Tools 리포지토리문제를 제출하세요.

그래픽 드라이버에서 테스트를 실행하는 경우 테스트는 HLK에 채워지지만 기본적으로 통과합니다. 사용자 모드 구성 요소에서만 실행 중이거나 코드 없이 드라이버 패키지를 제출하는 경우(예: inf 확장) 테스트가 채워지지 않을 수 있습니다. 커널 모드 구성 요소를 제출하고 테스트가 예기치 않게 채워지지 않는 경우 드라이버가 테스트 서명되었는지 확인합니다(아래 참고 참조).

Windows Server 인증에 대한 정적 분석의 새로운 기능

Windows Server 2025 인증의 경우 CodeQL은 정적 도구 로고 테스트에 필요한 도구가 되며, 이는 모든 드라이버 제출이 WHCP에 허용되도록 모든 '수정해야 함' 규칙을 최소한 통과해야 한다는 것을 의미합니다. 그러나 Windows Server 2022 이하에 대해 인증하는 경우 CA, SDV 및 CodeQL을 사용할 수 있습니다. 일치하는 OS 릴리스 버전과 함께 WDK 빌드를 사용합니다.

다른 버전의 WDK를 다운로드하는 방법에 대한 자세한 내용은 WDK(Windows 드라이버 키트) 다운로드를 참조하세요. Windows 참가자 프로그램에 참여하여 WDK Insider Preview 빌드(https://aka.ms/wipwdk)를 다운로드합니다.

CodeQL 및 DVL(드라이버 확인 로그) 생성

Microsoft는 정적 도구 로고 테스트를 사용하여 CodeQL 쿼리를 실행해야 하는 요구 사항을 적용하고 있습니다. 정적 도구 로고 테스트는 DVL(드라이버 확인 로그)을 사용하여 드라이버 소스 코드에서 실행되는 다양한 정적 분석의 결과를 수집합니다. 그런 다음 이 DVL은 HLK 테스트를 통해 정적 도구 로고 테스트의 일부로 구문 분석됩니다.

CodeQL 결과는 인증되는 드라이버가 인증을 위해 HLK 테스트를 통과하기 위해 적절한 CodeQL 쿼리를 실행했음을 보여주는 데 DVL을 사용하는 것과 동일한 모델을 따릅니다.

DVL이 생성되는 .vcxproj 파일과 동일한 디렉터리에 .sarif 파일을 배치합니다. 정확한 이름은 중요하지 않으며 파일이 ".sarif"로 끝나기만 하면 됩니다.

추가 설명서

이 기능 영역의 테스트에는 다음 항목에서 찾을 수 있는 필수 조건, 설정, 문제 해결 정보를 포함한 추가 설명서가 있을 수 있습니다.

테스트 실행

테스트를 실행하기 전에 다음 단계를 수행하여 DVL(드라이버 확인 로그)을 만들어야 합니다.

  1. 드라이버 소스 코드에 필요한 대로 CodeQL, 정적 드라이버 검증 도구 및 코드 분석 도구를 실행합니다.

  2. DVL 파일을 생성하는 유틸리티를 실행합니다. 제출에 포함할 드라이버 확인 로그 파일을 만드는 방법에 대한 자세한 내용은 드라이버 확인 로그 만들기를 참조하세요.

  3. DVL 파일을 만드는 데 사용된 컴퓨터의 DVL 파일을 정적 도구 로고 테스트를 실행할 때 사용되는 테스트 컴퓨터로 복사합니다. 테스트 컴퓨터의 %systemdrive%\DVL 디렉터리에 파일을 복사합니다. 새 드라이버 확인 로그를 복사하기 전에 테스트 컴퓨터의 디렉터리에 들어 있는 콘텐츠를 삭제해야 합니다.

  4. 정적 도구 로고 테스트를 실행합니다. HLK에서 테스트가 채워지지 않으면 드라이버가 테스트 서명되었는지 확인합니다(아래 참조). 또는 패키지의 일부로 .sys 파일을 제출하지 않는 경우 테스트가 채워지지 않을 것으로 예상됩니다.

참고 항목

정적 도구 로고 테스트의 목표는 드라이버 개발자가 제출하기 전에 드라이버에서 CodeQL을 실행하여 버그를 제거하도록 요구하는 것입니다. 그러나 아키텍처 제한으로 인해 인증을 차단하는 스택의 다른 드라이버에 대한 CodeQL 결과를 실수로 요청하는 테스트의 과거 보고서를 받았습니다.

Windows 24H2에서 이 문제를 해결하기 위해 테스트 중인 디바이스에 대한 드라이버의 서명이 검사 모델로 이동했습니다. 이 변경으로 인해 받은 편지함 Windows 드라이버는 테스트에 의해 플래그가 지정되지 않습니다. 또한 다른 타사 디바이스에서 HLK 테스트를 수행하는 개발자의 차단을 해제하기 위해 테스트는 WHCP 서명된 드라이버에 대한 결과 플래그 지정을 방지합니다.

인증을 위해 이 테스트를 실행할 때 테스트 기능이 올바르게 작동하는지 확인하기 위해 드라이버에 서명해야 합니다. 이렇게 하지 않으면 테스트가 CodeQL 위반에 대해 경고하지 못하거나 테스트가 열거하지 못할 수 있습니다.

참고 항목

정적 도구 로고 테스트에는 코드 QL이 실행되었음을 표시하는 DVL 파일만 필요합니다. 테스트를 위해 모든 규칙이 통과해야 하는 것은 아닙니다. 또한 이 작업은 데스크톱이 있는 서버에서 실행해야 합니다. HLK 테스트가 Server Core를 사용하지 못하는 경우(오류 메시지: "RoMetadata.dll을 찾을 수 없음") 해결 방법은 데스크톱이 있는 서버에서 실행한 다음 Server Core의 결과가 포함된 패키지와 패키지를 병합하는 것입니다. 패킷을 병합하는 방법에 대한 정보는 /windows-hardware/test/hlk/user/merge-packages에서 찾을 수 있습니다.

문제 해결

HLK 테스트 실패의 일반적인 문제 해결은 Windows HLK 테스트 실패 문제 해결을 참조하세요.

자세한 정보

명령 구문

명령 옵션 설명

TE.exe /inproc /enablewttlogging /appendwttlogging Devfund_DvlTest.dll /p:WDKClass=[WDKClass] /p:DeviceClass=[DeviceClass] /p:QueryDriverNames=[QueryDriverNames]

테스트를 실행합니다.

참고 항목

이 테스트 이진에 대한 명령줄 도움말을 보려면 /?를 입력합니다.

파일 목록

파일 위치

Devfund_DvlTest.dll

<testbinroot>\OSBinRoot

Microsoft.StaticToolsLogo.ObjectModel.dll

<testbinroot>\OSBinRoot

TE.exe

<testbinroot>\OSBinRoot

매개 변수

매개 변수 이름 매개 변수 설명
WDKClass 디바이스 클래스
DeviceClass 디바이스 클래스 매개 변수
QueryDriverNames 예상되는 드라이버 이름