정적 드라이버 검증 도구 알려진 문제 - Windows 10 버전 1809

이 페이지에서는 WDK(Windows 드라이버 키트)에서 SDV(정적 드라이버 검증 도구) 도구를 사용할 때 발생할 수 있는 일반적인 문제에 대해 설명합니다. 아래 정보는 특히 Windows 10 2018년 10월 업데이트(버전 1809)와 함께 제공되는 도구 버전과 관련이 있습니다.

최신 공식 WDK 의 알려진 SDV 문제에 대한 WDK 알려진 문제를 참조하세요.

InterceptedBuild 오류

기본 증상: SDV가 와 함께 FATAL ERROR: Unrecoverable error in InterceptedBuild stage실패합니다.

DVL 파일을 검사할 때 및 가 있는 값 ScoreName="[driverName].[architecture].SDV.NA.Reason"AssessmentScore 표시됩니다.ScoreUnit="Unrecoverable error in InterceptedBuild stage."

InterceptedBuild 오류의 경우 다음 단계를 수행하여 문제를 진단합니다.

  1. Visual Studio 2017 네이티브 도구 명령줄에서 /debug 플래그를 사용하여 SDV를 다시 실행합니다. 명령 옵션에 대한 자세한 내용은 정적 드라이버 검증 도구 명령을 참조하세요.

    a. 먼저 종속 라이브러리 프로젝트에서 SDV의 라이브러리 함수를 실행합니다. 예: msbuild /p:Configuration=Release /p:Platform=x64 /t:sdv /p:inputs="/lib /debug".

    b. 그런 다음 드라이버 프로젝트 자체에서 SDV를 실행합니다. 예: msbuild /p:Configuration=Release /p:Platform=x64 /t:sdv /p:inputs="/check /debug"

  2. InterceptedBuild 단계에서 오류가 다시 발생하는지 확인합니다.

  3. SDV를 sdv 실행할 때 드라이버 폴더에 생성된 폴더로 이동합니다.

  4. 를 열고 smvcl.log "내부 컴파일러 오류"라는 구를 검색합니다.

    a. 내부 컴파일러 오류가 포함된 오류 메시지와 심각한 오류 C1001과 유사한 구가 있는 경우: 컴파일러에서 내부 오류가 발생했습니다. (컴파일러 파일 'msc1.cpp', 줄 1511) 가 있습니다. 이는 errata(errata ID 40705)가 필요한 알려진 문제입니다. 추가 지원이 필요한 경우 으로 이메일을 보내 stlogohelp@microsoft.com주세요.

    b. 내부 컴파일러 오류가 포함된 오류 메시지가 있지만 위와 같이 보이지 않으면 오류 메시지가 필요할 수 있지만 기존 알려진 문제가 아닐 수 있습니다. stlogohelp@microsoft.com으로 메일을 보내세요.

    c. 내부 컴파일러 오류가 포함된 줄이 표시되지 않으면 오류로 시작하는 줄을 검색합니다. 이러한 문제는 errata가 필요한 문제일 수도 있으며 그렇지 않을 수도 있습니다. stlogohelp@microsoft.com으로 메일을 보내세요.

  5. smvlink1.log를 열고 내부 컴파일러 오류 구를 검색합니다.

    a. 내부 컴파일러 오류 및 slamcl이 포함된 오류 메시지: 오류: 2단계: 메모리 부족이 있는 경우 이는 errata가 필요한 알려진 문제입니다.

    b. 내부 컴파일러 오류가 포함된 줄이 표시되지 않으면 오류로 시작하는 줄을 검색합니다. 이러한 문제는 errata가 필요한 문제일 수도 있으며 그렇지 않을 수도 있습니다. stlogohelp@microsoft.com으로 메일을 보내세요.

    c. 위의 항목이 표시되지 않으면 MSFT에 문의하여 지원을 요청하세요.

지원을 위해 MSFT에 문의하려면 다음을 실행하여 소스 코드가 공유되지 않는지 확인하세요.

  1. /debug 플래그를 사용하도록 설정된 SDV를 실행하고 출력을 텍스트 파일로 파이프합니다.

  2. 드라이버 디렉터리의 폴더로 sdv 이동하고 다음 명령을 실행하여 원본을 노출할 수 있는 빌드 결과를 지웁니다.

    del /s *.obj
    del /s *.rawcfg*
    del /s *.li
    del /s *.pdb
    del /s *.sys
    
  3. 에 다음 파일을 보냅니다 stlogohelp@microsoft.com.

    a. SDV 실행 출력이 있는 텍스트 파일

    b. smexecute-NormalBuild.log 파일

    c. smvexecute-InterceptedBuild.log 파일

    d. "sdv" 하위 폴더

Visual Studio C++ 2013 런타임이 없음

기본 증상: Visual Studio C++ 2012 및 2013 런타임이 없는 시스템에서 SDV를 실행하는 경우 [MSVCR110.dll 또는 VCOMP110.dll]을 찾을 수 없기 때문에 코드 실행이 진행될 수 없음과 같은 팝업 상자에 오류가 표시될 수 있습니다. 프로그램을 다시 설치하면 이 문제가 해결됩니다.

이 경우 솔루션은 x86 및 x64 Visual Studio용 Visual C++ 재배포 가능 패키지 2012 및 2013을 모두 설치하는 것입니다.

모범 사례: Visual Studio 2017 버전 15.8 사용

기본적으로 코드 분석은 Visual Studio 15.7에서 드라이버를 자동으로 빌드하지 않습니다. 드라이버가 생성되는 이진 파일에 의존하는 경우 출력 창에서 오류가 발생할 수 있습니다. 대신 버전 15.8을 사용하는 것이 좋습니다.

프로젝트에서 구성을 제거한 후 DVL 생성 실패

기본 증상: Configuration Manager 창을 통해 프로젝트에서 구성을 제거한 후 드라이버 확인 로그 만들기를 선택하면 다음 메시지가 표시됩니다.Please select a driver project. Driver Verification Log cannot be created for the selected platform tool set: 'v100'"

해결 방법:

  1. 프로젝트 파일을 백업한 다음 텍스트 편집기에서 프로젝트 파일을 엽니다.

  2. \<PropertyGroup Label="Globals"\> 섹션에서 두 개의 XML 태그를 찾습니다. 하나는 형식이고 하나는 형식 \<Configuration\>\[Configuration type\]\</Configuration\>\<Platform Condition="'$(Platform)' == ''"\>\[Architecture\]\</Platform\>이고, 여기서 \[Configuration type\]\[Architecture\] 은 이 유형의 프로젝트에 대한 기본 구성 및 릴리스입니다.

  3. \[Architecture\] 를 프로젝트에 적합한 값으로 업데이트 \[Configuration type\] 합니다. 예를 들어 Win32 플랫폼을 제거한 경우 대신 x64로 업데이트 \[Architecture\] 할 수 있습니다.

대체 해결 방법:

  1. Visual Studio 2017 네이티브 도구 명령 프롬프트를 엽니다.

  2. 드라이버 폴더로 이동합니다.

  3. 를 실행 msbuild [Your Project] /p:Configuration=[Configuration type] /p:Platform=[Architecture] /t:dvl합니다. 여기서 \[Your Project\] 은 vcxproj 파일이며 릴리스 \[Configuration type\] 와 같은 유효한 구성이며 x64와 \[Architecture\] 같은 유효한 아키텍처입니다.

DVL 생성이 ServerCore에서 작동하지 않음, 서버 GUI 사용

실행 시 정적 도구 로고 테스트가 실패합니다. 테스트 로그를 검토하면 다음과 유사한 오류가 표시됩니다. Failed to load 'C:\hlk\JobsWorkingDir\Tasks\WTTJobRun4749E809-0166-E811-8368-F4521454FFE1\Devfund_DvlTest.dll'. (Could not load managed test module because RoMetadata.dll could not be found)

TAEF 패키지가 배포되었는지 또는 RoMetadata.dll PATH 환경 변수의 위치에 배포되었는지 확인합니다.

주요 증상은 RoMetadata.dll 로드하지 못하는 것입니다.

ServerCore 설치와 동일한 아키텍처 및 Windows 버전을 사용하여 Server GUI를 설치한 경우 RoMetadata.dll 파일을 Server GUI에서 ServerCore로 복사합니다. DLL은 System32 폴더(예: C:\Windows\System32)에서 찾을 수 있으며 ServerCore 컴퓨터의 동일한 폴더에 배치되어야 합니다. 이렇게 하면 ServerCore에서 테스트를 실행할 수 있습니다. 여전히 문제가 발생하는 경우 다음 해결 방법을 참조하세요.

두 번째 해결 방법은 서버 GUI에서 실행한 다음, 패키지를 Server Core의 결과가 포함된 패키지와 병합하는 것입니다. 패키지 병합에 대한 자세한 내용은 패키지 병합을 참조하세요.

정적 드라이버 검증 도구가 0xc0000142 오류와 함께 종료 lib.exe/iwrap.exe 실패

smvbuild.log 파일에는 다음 오류와 유사한 메시지가 포함되어 있습니다.

c:\Program Files\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(1144,5): error MSB6006: "Lib.exe" exited with code -1073741502.

Done executing task "LIB" -- FAILED.

이것은 알려진 문제입니다. 이 문제가 WHCP 인증을 차단하는 경우 errata 41600을 사용하세요.