Problemi noti del driver statico - Windows 10 versione 1809

Questa pagina descrive i problemi comuni che possono verificarsi quando si usa lo strumento Static Driver Verifier (SDV) in Windows Driver Kit (WDK). Le informazioni seguenti riguardano in modo specifico la versione dello strumento fornito con Aggiornamento di Windows 10 (ottobre 2018) (versione 1809).

Vedere Problemi noti di WDK per problemi noti di SDV con la versione più recente ufficiale di WDK.

Errori di InterceptedBuild

Sintomo primario: SDV ha esito negativo con FATAL ERROR: Unrecoverable error in InterceptedBuild stage.

Quando si esamina il file DVL, verrà visualizzato un AssessmentScore valore con ScoreName="[driverName].[architecture].SDV.NA.Reason" e ScoreUnit="Unrecoverable error in InterceptedBuild stage."

Per gli errori di InterceptedBuild, seguire questa procedura per diagnosticare il problema.

  1. Eseguire di nuovo SDV dalla riga di comando di Visual Studio 2017 Native Tools con il flag /debug. Per informazioni dettagliate sulle opzioni di comando, vedere Comandi di Verifica driver statici.

    a. Eseguire prima di tutto la funzione di libreria SDV in qualsiasi progetto di libreria dipendente. Ad esempio: msbuild /p:Configuration=Release /p:Platform=x64 /t:sdv /p:inputs="/lib /debug".

    b. Eseguire quindi SDV nel progetto driver stesso. ad esempio msbuild /p:Configuration=Release /p:Platform=x64 /t:sdv /p:inputs="/check /debug"

  2. Verificare che l'errore si verifichi nuovamente nella fase InterceptedBuild.

  3. Passare alla sdv cartella generata nella cartella driver quando si esegue SDV.

  4. Aprire smvcl.log e cercare la frase "errore interno del compilatore".

    a. Se un messaggio di errore contenente un errore interno del compilatore e una frase simile all'errore irreversibile C1001: si è verificato un errore interno nel compilatore. (file del compilatore 'msc1.cpp', riga 1511) è presente, si tratta di un problema noto che richiede errata (ID errata 40705). Se è necessaria ulteriore assistenza, inviare un messaggio di posta elettronica stlogohelp@microsoft.coma .

    b. Se è presente un messaggio di errore contenente un errore interno del compilatore ma non è simile al precedente, è probabile che ciò richieda un errore, ma potrebbe non essere un problema noto esistente. Invia un messaggio di posta elettronica all'indirizzo stlogohelp@microsoft.com.

    c. Se non vengono visualizzate righe contenenti errori interni del compilatore, cercare eventuali righe che iniziano con errore. Questi possono o non essere problemi che richiedono errori. Invia un messaggio di posta elettronica all'indirizzo stlogohelp@microsoft.com.

  5. Aprire smvlink1.log e cercare la frase errore interno del compilatore.

    a. Se è presente un messaggio di errore contenente errori interni del compilatore e slamcl: errore: nella fase 2: memoria insufficiente, si tratta di un problema noto che richiede errori.

    b. Se non vengono visualizzate righe contenenti errori interni del compilatore, cercare eventuali righe che iniziano con errore. Questi possono o non essere problemi che richiedono errori. Invia un messaggio di posta elettronica all'indirizzo stlogohelp@microsoft.com.

    c. Se non viene visualizzata alcuna delle versioni precedenti, contattare MSFT per assistenza.

Per contattare MSFT per il supporto, assicurarsi che il codice sorgente non sia condiviso eseguendo quanto segue:

  1. Eseguire SDV con il flag /debug abilitato e inviare tramite pipe l'output a un file di testo.

  2. Passare alla sdv cartella nella directory del driver ed eseguire i comandi seguenti per cancellare i risultati della compilazione che potrebbero esporre le origini:

    del /s *.obj
    del /s *.rawcfg*
    del /s *.li
    del /s *.pdb
    del /s *.sys
    
  3. Inviare i file seguenti a stlogohelp@microsoft.com:

    a. File di testo con l'output dell'esecuzione di SDV

    b. File smexecute-NormalBuild.log

    c. File smvexecute-InterceptedBuild.log

    d. Sottocartella "sdv"

Runtime di Visual Studio C++ 2013 non presenti

Sintomo principale: quando si esegue SDV in un sistema che non dispone dei runtime di Visual Studio C++ 2012 e 2013, l'utente potrebbe visualizzare errori nelle caselle popup, ad esempio L'esecuzione del codice non può continuare perché [MSVCR110.dll o VCOMP110.dll] non è stato trovato. La reinstallazione del programma potrebbe risolvere questo problema.

In questo caso, la soluzione consiste nell'installare sia x86 che x64 Visual C++ Redistributable per Visual Studio 2012 e 2013.

Procedura consigliata: usare Visual Studio 2017 versione 15.8

Per impostazione predefinita, l'analisi del codice non compila automaticamente il driver in Visual Studio 15.7. Se il driver dipende dai file binari generati, ciò può causare un errore nel riquadro Output . È invece consigliabile usare la versione 15.8.

Errore di generazione DVL dopo la rimozione della configurazione da un progetto

Sintomo principale: dopo aver rimosso una configurazione da un progetto tramite la finestra di Configuration Manager, l'utente visualizza il messaggio seguente quando si seleziona Crea log di verifica del driver: Please select a driver project. Driver Verification Log cannot be created for the selected platform tool set: 'v100'"

Soluzione alternativa:

  1. Eseguire il backup del file di progetto e quindi aprire il file di progetto in un editor di testo.

  2. \<PropertyGroup Label="Globals"\> Nella sezione trovare due tag XML: uno con il formato e uno con il formato \<Configuration\>\[Configuration type\]\</Configuration\>\<Platform Condition="'$(Platform)' == ''"\>\[Architecture\]\</Platform\>, dove \[Configuration type\] e \[Architecture\] sono la configurazione predefinita e la versione per questo tipo di progetto.

  3. Aggiornare \[Configuration type\] e \[Architecture\] ai valori appropriati per il progetto. Ad esempio, se hai rimosso la piattaforma Win32, potresti eseguire l'aggiornamento \[Architecture\] a x64.

Soluzione alternativa:

  1. Aprire un prompt dei comandi di Visual Studio 2017 Native Tools.

  2. Passare alla cartella driver.

  3. Eseguire msbuild [Your Project] /p:Configuration=[Configuration type] /p:Platform=[Architecture] /t:dvl, dove \[Your Project\] è il file vcxproj, \[Configuration type\] è una configurazione valida, ad esempio Release, ed \[Architecture\] è un'architettura valida, ad esempio x64.

La generazione DVL non funziona in ServerCore, usare l'interfaccia utente grafica del server

Il test logo degli strumenti statici non riesce durante l'esecuzione. La revisione dei log di test mostra un errore simile a 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)

Assicurarsi che il pacchetto TAEF sia distribuito o RoMetadata.dll sia distribuito in un percorso nella variabile di ambiente PATH.

Il sintomo chiave è l'errore di caricare RoMetadata.dll.

Se si dispone di un'installazione dell'interfaccia utente grafica del server con la stessa architettura e la stessa versione di Windows dell'installazione di ServerCore, copiare il file RoMetadata.dll dall'interfaccia utente grafica del server a ServerCore. La DLL è disponibile nella cartella System32 ,ad esempio , C:\Windows\System32e deve essere inserita nella stessa cartella nel computer ServerCore. In questo modo il test deve essere eseguito in ServerCore. Se si verificano ancora problemi, fare riferimento alla soluzione alternativa successiva.

La seconda soluzione alternativa consiste nell'eseguire nell'interfaccia utente grafica del server e quindi unire il pacchetto con il pacchetto contenente i risultati di Server Core. Per informazioni sull'unione dei pacchetti, vedi Unire pacchetti.

Static Driver Verifier ha esito negativo e termina lib.exe/iwrap.exe con errore di 0xc0000142

Il file smvbuild.log contiene un messaggio simile a questo errore:

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.

Questo è un problema noto Se questo problema blocca la certificazione WHCP, usare errata 41600.