共用方式為


靜態驅動程式驗證器的已知問題 - Windows 10 1809 版

此頁面說明在 Windows 驅動程式套件 (WDK) 中使用靜態驅動程式驗證程式 (SDV) 工具時可能會遇到的常見問題。 下列資訊特別與Windows 10 2018 年 10 月更新 (版本 1809) 隨附的工具版本有關。

如需最新官方 WDK 的已知 SDV 問題,請參閱 WDK 已知問題

InterceptedBuild 失敗

主要徵兆:SDV 失敗並出現 FATAL ERROR: Unrecoverable error in InterceptedBuild stage

檢查 DVL 檔案時,您會看到具有 AssessmentScoreScoreName="[driverName].[architecture].SDV.NA.Reason" 和 的值 ScoreUnit="Unrecoverable error in InterceptedBuild stage."

針對 InterceptedBuild 失敗,請執行下列步驟來診斷問題。

  1. 使用 /debug 旗標從 Visual Studio 2017 Native Tools 命令列重新執行 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 (40705) 的已知問題。 如果您需要進一步的協助,請傳送電子郵件 stlogohelp@microsoft.com 給 。

    b. 如果包含 內部編譯器錯誤的錯誤 訊息存在,但看起來不像上述,這可能需要 errata,但可能不是現有的已知問題。 stlogohelp@microsoft.comEmail 。

    c. 如果您沒有看到包含 內部編譯器錯誤的任何行,請搜尋任何以 錯誤開頭的行。 這些可能或可能不是需要 errata 的問題。 stlogohelp@microsoft.comEmail 。

  5. 開啟 smvlink1.log 並搜尋片語 內部編譯器錯誤

    a. 如果包含 內部編譯器錯誤slamcl: error: 階段 2:記憶體不足 的錯誤訊息存在,這是需要 errata 的已知問題。

    b. 如果您沒有看到包含 內部編譯器錯誤的任何行,請搜尋任何以 錯誤開頭的行。 這些可能或可能不是需要 errata 的問題。 stlogohelp@microsoft.comEmail 。

    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 平臺,可能會改為更新 \[Architecture\] 為 x64。

替代的因應措施:

  1. 開啟 Visual Studio 2017 Native Tools 命令提示字元。

  2. 流覽至驅動程式資料夾。

  3. 執行 msbuild [Your Project] /p:Configuration=[Configuration type] /p:Platform=[Architecture] /t:dvl ,其中 \[Your Project\] 是 vcxproj 檔案、 \[Configuration type\] 是有效的組態,例如 Release,而且 \[Architecture\] 是有效的架構,例如 x64。

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 版本的伺服器 GUI 安裝,請將RoMetadata.dll檔案從伺服器 GUI 複製到 ServerCore。 例如,您可以在 System32 資料夾中找到 DLL (,例如, C:\Windows\System32) ,而且應該放在 ServerCore 電腦上的相同資料夾中。 這應該可讓測試在 ServerCore 上執行。 如果您仍然遇到問題,請參閱下一個因應措施。

第二個因應措施是在伺服器 GUI 上執行,然後將封裝與包含 Server Core 結果的套件合併。 如需合併套件的詳細資訊,請參閱 合併套件

靜態驅動程式驗證器失敗,並出現lib.exe/iwrap.exe並出現0xc0000142錯誤

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。