드라이버에 대한 코드 분석을 실행하는 방법
드라이버에 대한 코드 분석은 소스 코드의 가능한 결함에 대한 정보를 제공합니다. 코드 분석을 수동으로 실행할 수 있으며 각 빌드에서 코드 분석을 자동으로 실행할 수도 있습니다.
이 항목의 내용:
Important
드라이버에 대한 코드 분석은 Windows 24H2 WDK 및 EWDK에서 사용할 수 있지만 나중에 사용 중지되도록 설정되어 있는 것이 좋습니다.
앞으로 CodeQL은 드라이버의 기본 정적 분석 도구가 될 것입니다. CodeQL은 코드를 쿼리할 데이터베이스로 처리하는 강력한 쿼리 언어를 제공하므로 특정 동작, 패턴 등에 대한 쿼리를 간단하게 작성할 수 있습니다.
CodeQL 사용에 대한 자세한 내용은 CodeQL 및 정적 도구 로고 테스트를 참조하세요.
코드 분석 실행
드라이버 소스 코드에서 수동으로 코드 분석을 실행하려면
- Visual Studio에서 드라이버 프로젝트 파일 또는 솔루션을 선택하고 분석할 프로젝트 구성 및 플랫폼을 선택합니다.
- 분석 또는 빌드 메뉴에서 솔루션에서 코드 분석 실행을 클릭합니다.
각 빌드를 사용하여 드라이버 소스 코드에 대한 코드 분석을 자동으로 실행하려면
- Visual Studio에서 솔루션 탐색기 드라이버 프로젝트 또는 솔루션을 마우스 오른쪽 단추로 클릭하고 속성을 클릭합니다.
- 프로젝트의 속성 대화 상자에서 코드 분석을 클릭합니다.
- C/C++ 속성에 대한 코드 분석 페이지에서 분석하려는 프로젝트 구성 및 플랫폼(예: Windows 8 및 Win32)을 선택합니다.
- 빌드 시 C/C++에 대한 코드 분석 사용을 선택합니다.
- 규칙 집합에서 Microsoft 드라이버 권장 규칙을 선택합니다. 드라이버에 대한 기본 규칙 집합입니다.
- 빌드 메뉴에서 솔루션 빌드를 클릭합니다.
코드 분석 결과 보기
소스 코드 에서 가능한 결함이 발견되면 코드 분석 결과 창에 코드 분석 경고 번호와 결함이 발생한 소스 파일의 줄 번호가 표시됩니다.
결함을 보려면
코드 분석 결과 창에서 줄 번호를 클릭하면 코드 분석 결과 창에 결함에 대한 설명이 표시됩니다.
코드 창에 소스 코드가 표시되고 결함이 발생하는 위치를 나타냅니다.
특정 경고에 대해 자세히 알아보려면 코드 분석 결과 창에서 경고를 클릭합니다.
빌드와 연결된 코드 분석 로그 파일을 보려면
- 빌드 구성 및 플랫폼의 디렉터리로 이동합니다(예:
\\Windows7Release\\x64
). - 권장 규칙을 사용하는 경우 로그 파일을 호출
vc.\*codeanalysis.xml
합니다. Windows Server 2012용 드라이버를 만드는 경우 이 파일은 드라이버 확인 로그를 만드는 데 사용됩니다.
결함 보고서 표시 안 함
경우에 따라 특정 경고 메시지의 보고서를 표시하지 않을 수 있습니다. 예를 들어 경고가 주로 정보이며 오류의 원인을 알고 있는 경우입니다.
경고 메시지를 표시하지 않는 방법
보고된 결함의 인스턴스를 제거하려면 코드 분석 결과 창에서 줄 번호 및 경고를 선택합니다.
경고에 대한 확장된 설명에서 소스에서 메시지>표시 안 함 작업을>클릭합니다.
표시 안 함 지정자가 있는 pragma warning 지시문은 #pragma 경고 문 바로 뒤에 있는 코드 줄에 대해서만 경고를 표시하지 않습니다.
#pragma warning(suppress: 6014)
커널 모드 드라이버에 대한 경고 C6262에 대한 스택 사용 제한 변경
사용자 모드 및 커널 모드 코드에서는 스택 공간이 제한되며 스택 페이지를 커밋하지 않으면 스택 오버플로 예외가 발생합니다. 사용 가능한 총 스택 공간은 12KB에 불과하기 때문에 높은 스택 사용량은 커널 모드에서 특히 중요합니다. 커널 모드 코드는 스택 사용을 적극적으로 제한해야 합니다.
코드 분석 도구는 함수에서 로컬로 1KB 이상의 스택 공간을 사용하는 경우 경고 C6262 를 실행합니다. 리소스를 많이 사용할 수 있는 함수를 조사하려면 C6262에서 사용하는 스택 임계값 제한을 사용자 지정하거나 낮출 수 있습니다. 스택 임계값 제한을 낮추면 코드 분석 도구에서 잠재적으로 더 많은 문제를 찾을 수 있습니다. 그런 다음 이러한 스택 사용 문제를 해결하도록 선택할 수 있습니다. 예를 들어 임계값을 400바이트로 낮추어 다른 함수가 리소스를 사용하고 있는지 확인할 수 있습니다.
C6262에 대한 스택 크기 제한을 사용자 지정하려면
- 메모장 또는 다른 텍스트 편집기에서 커널 모드 드라이버(또는 구성 요소)에 대한 Visual Studio 프로젝트 파일(.vcxproj)을 엽니다.
- 컴파일러 ClCompile에 대한 새 <ItemDefinitionGroup>을 추가합니다>.<
- PREfastAdditionalOptions> 요소를 추가하고 스택 크기<바이트를> 설정합니다.< 기본값은 stacksize1024입니다.
<ItemDefinitionGroup>
<ClCompile>
<!-- Change stack depth for C6262 from 1024 to 400 -->
<PREfastAdditionalOptions>stacksize400</PREfastAdditionalOptions>
</ClCompile>
</ItemDefinitionGroup>
프로젝트 파일을 저장합니다. Visual Studio를 시작하고, 업데이트된 드라이버 프로젝트를 로드하고, 코드 분석을 실행합니다.
기본값인 1KB로 되돌리려면 프로젝트 파일의 변경 내용을 실행 취소하거나 스택 크기 값을 stacksize1024로 변경합니다.