WDK(Windows 드라이버 키트)는 개발 중에 오류를 감지하고 수정하는 데 도움이 되는 드라이버 확인 도구를 제공합니다. 이러한 도구에는 CodeQL과 같은 정적 분석 도구와 배포 전에 중요한 버그를 찾을 수 있는 드라이버 검증 도구와 같은 동적 도구가 포함됩니다. 개발 초기에 이러한 확인 도구를 사용하면 시간이 절약되고 프로덕션 환경에서 심각한 드라이버 문제를 방지할 수 있습니다.
WDK 설명서에서는 이러한 확인 도구에 대해 설명하고 각 도구가 다양한 방식으로 다양한 유형의 드라이버 오류를 감지하기 때문에 사용을 권장합니다. 이러한 도구는 수동 검사보다 훨씬 효율적입니다. 일반적으로 표준 드라이버 테스트에서 찾을 수 없는 오류를 감지할 수 있으며, 검증된 드라이버 개발자 및 Windows 드라이버 인터페이스 디자이너의 전문 지식을 구현합니다.
최상의 결과를 위해 드라이버에서 실행할 수 있는 모든 도구를 사용합니다. 이러한 도구를 생략하면 드라이버에서 심각한 버그가 누락될 수 있습니다.
정적 및 동적 확인 도구
다음과 같은 두 가지 기본 유형의 확인 도구가 있습니다.
정적 확인 도구 는 드라이버를 실행하지 않고 드라이버 코드를 검사합니다. 이러한 도구는 코드를 연습하는 테스트에 의존하지 않으므로 매우 철저할 수 있습니다. 이론적으로 정적 확인 도구는 실제로 거의 실행되지 않는 코드 경로를 포함하여 모든 드라이버 코드를 검사할 수 있습니다. 그러나 드라이버가 실제로 실행되고 있지 않기 때문에 이러한 도구는 가짜 긍정 결과를 발생할 수 있습니다. 즉, 실제로 발생하지 않는 코드 경로에서 오류를 보고할 수 있습니다.
CodeQL 은 드라이버의 기본 정적 분석 도구입니다. CodeQL은 코드를 쿼리할 데이터베이스로 처리하는 강력한 쿼리 언어를 제공하므로 특정 동작 및 패턴에 대한 쿼리를 간단하게 작성할 수 있습니다. Windows 하드웨어 호환성 프로그램에는 클라이언트 및 서버 운영 체제에서 STL(정적 도구 로고) 테스트용 CodeQL이 필요합니다. 자세한 내용은 CodeQL 및 정적 도구 로고 테스트를 참조하세요.
동적 확인 도구 는 드라이버가 실행되는 동안 일반적으로 일반적으로 사용되는 드라이버 지원 루틴에 대한 호출을 가로채고 동일한 루틴의 자체 오류 검사 버전에 대한 호출을 대체하여 드라이버 코드를 검사합니다. 동적 도구가 확인을 수행하는 동안 드라이버가 실제로 실행 중이므로 가양성 결과는 거의 없습니다. 그러나 동적 도구는 드라이버를 모니터링하는 동안 발생하는 작업만 감지하기 때문에 드라이버 테스트 적용 범위가 적절하지 않은 경우 도구에서 특정 드라이버 결함을 놓칠 수 있습니다. 동시에 런타임에 사용 가능한 정보(예: 소스 코드에서 정적으로 추출하기 어려운 정보)를 사용하여 동적 확인 도구는 정적 분석 도구로 검색하기 어려운 특정 클래스의 드라이버 오류를 검색할 수 있습니다.
정적 및 동적 확인 도구의 조합을 사용합니다. 정적 도구를 사용하면 실제로 실행하기 어려운 코드 경로를 확인할 수 있으며 동적 도구는 드라이버에서 발생하는 심각한 오류를 찾을 수 있습니다.
확인 도구 개요
Important
SDV(정적 드라이버 검증 도구) 도구는 더 이상 지원되지 않습니다. Windows 24H2 RTM WDK를 포함하여 빌드 26017보다 최신의 WDK에서는 사용할 수 없습니다. 분석에 SDV를 사용하지 않는 것이 좋습니다.
WDK는 다음 확인 도구를 설명하고 드라이버 개발자 및 테스터의 사용을 권장합니다. 일반적으로 사용하는 순서대로 나열됩니다.
코드가 컴파일된 후
- CodeQL은 강력한 의미 체계 코드 분석 엔진입니다. 광범위한 고부가가치 보안 쿼리와 강력한 플랫폼의 조합은 드라이버 코드를 보호하는 데 매우 중요한 도구입니다. 자세한 내용은 CodeQL 및 정적 도구 로고 테스트를 참조하세요.
드라이버가 실행되는 경우
드라이버가 빌드되고 명백한 오류 없이 실행되는 즉시 다음 동적 확인 도구를 사용합니다.
드라이버 검증 도구 는 특히 Windows 드라이버용으로 작성된 동적 확인 도구입니다. 여기에는 여러 드라이버에서 동시에 실행할 수 있는 여러 테스트가 포함됩니다. 드라이버 검증 도구는 드라이버 개발자와 테스터가 개발 또는 테스트 환경에서 드라이버가 실행될 때마다 실행되도록 구성하는 드라이버에서 심각한 버그를 찾는 데 매우 효과적입니다. 드라이버 검증 도구는 Windows에 포함되어 있습니다. 드라이버에 대해 드라이버 검증 도구를 사용하도록 설정하는 경우 드라이버에서 여러 테스트를 실행해야 합니다. 드라이버 검증 도구는 정적 확인 도구만 사용하여 감지하기 어려운 특정 드라이버 버그를 검색할 수 있습니다. 이러한 유형의 버그의 예는 다음과 같습니다.
커널 풀 버퍼 오버런. 확인된 드라이버가 풀 메모리 버퍼를 할당하는 경우 드라이버 검증 도구는 액세스할 수 없는 메모리 페이지를 사용하여 보호합니다. 드라이버가 버퍼의 끝을 지나 메모리를 사용하려고 하면 드라이버 검증 도구가 버그 검사를 시작합니다.
메모리를 해제한 후 사용 특수 풀 메모리 블록은 자체 메모리 페이지를 사용하며 메모리 페이지를 다른 할당과 공유하지 않습니다. 드라이버가 풀 메모리 블록을 해제하면 해당 메모리 페이지에 액세스할 수 없게 됩니다. 드라이버가 메모리를 해제한 후 해당 메모리를 사용하려고 하면 드라이버가 즉시 충돌합니다.
관리자 권한 IRQL에서 실행하는 동안 페이지 가능 메모리 사용 확인된 드라이버가 DISPATCH_LEVEL 이상에서 IRQL을 발생시키는 경우 드라이버 검증 도구는 시스템 작업 집합에서 모든 페이징 가능한 메모리를 트리밍하여 메모리 부족 상태에서 시스템을 시뮬레이션합니다. 이러한 페이즈 가능한 가상 주소 중 하나를 사용하려고 하면 드라이버가 충돌합니다.
낮은 리소스 시뮬레이션. 낮은 리소스 조건에서 시스템을 시뮬레이션하기 위해 드라이버 검증 도구는 드라이버가 호출하는 다양한 운영 체제 커널 API에 실패할 수 있습니다.
메모리 누수. 드라이버 검증 도구는 드라이버에서 수행한 메모리 할당을 추적하고 드라이버가 언로드되기 전에 메모리를 해제하는지 확인합니다.
완료하거나 취소하는 데 너무 많은 시간이 걸리는 I/O 작업입니다. 드라이버 검증 도구는
STATUS_PENDING의 반환 값에 응답하기 위해 드라이버의 논리를 테스트할 수 있습니다.DDI 규정 준수 검사. (Windows 8부터 사용 가능) 드라이버 검증 도구는 드라이버와 운영 체제의 커널 인터페이스 간의 적절한 상호 작용을 확인하는 DDI(디바이스 드라이버 인터페이스) 규칙 집합을 적용합니다.
KASAN(커널 주소 소독기)은 버퍼 오버플로 및 사용 후 사용 이벤트와 같은 여러 종류의 잘못된 메모리 액세스를 검색할 수 있는 Windows 드라이버에서 지원되는 버그 감지 기술입니다.
애플리케이션 검증 도구 는 C 또는 C++로 작성된 사용자 모드 애플리케이션 및 드라이버를 위한 동적 확인 도구입니다. 관리 코드를 확인하지 않습니다.