Come eseguire l'analisi del codice per i driver
L'analisi del codice per i driver fornisce informazioni sui possibili difetti nel codice sorgente. È possibile eseguire manualmente l'analisi del codice ed eseguire automaticamente l'analisi del codice con ogni compilazione.
Contenuto dell'argomento:
- Esecuzione dell'analisi del codice
- Visualizzazione dei risultati dell'analisi del codice
- Eliminazione della segnalazione dei difetti
- Modifica dei limiti di utilizzo dello stack per l'avviso C6262 per i driver in modalità kernel
- Argomenti correlati
Importante
L'analisi del codice per i driver è disponibile in Windows 24H2 WDK e EWDK, ma è consigliabile che sia impostata per essere ritirata in una data futura.
In futuro, CodeQL sarà lo strumento di analisi statico principale per i driver. CodeQL offre un linguaggio di query potente che considera il codice come database su cui eseguire query, semplificando la scrittura di query per comportamenti, modelli e altro ancora specifici.
Per altre informazioni sull'uso di CodeQL, vedere CodeQL e il test del logo degli strumenti statici.
Esecuzione dell'analisi del codice
Per eseguire manualmente l'analisi del codice sorgente del driver
- In Visual Studio selezionare il file o la soluzione del progetto driver e selezionare la configurazione e la piattaforma del progetto da analizzare.
- Scegliere Esegui analisi codice nella soluzione dal menu Analizza o Compila.
Per eseguire l'analisi del codice sul codice sorgente del driver automaticamente con ogni compilazione
- In Visual Studio fare clic con il pulsante destro del mouse sul progetto o sulla soluzione driver in Esplora soluzioni e scegliere Proprietà.
- Nella finestra di dialogo delle proprietà del progetto fare clic su Analisi codice.
- Nella pagina Proprietà analisi codice per C/C++ selezionare la configurazione del progetto e la piattaforma da analizzare, ad esempio Windows 8 e Win32.
- Selezionare Abilita analisi del codice per C/C++ in Compilazione.
- In Set di regole selezionare Regole consigliate del driver Microsoft. Questo è il set di regole predefinito per i driver.
- Scegliere Compila soluzione dal menu Compila.
Visualizzazione dei risultati dell'analisi del codice
Se possibili difetti vengono rilevati nel codice sorgente, nella finestra Risultati analisi codice vengono visualizzati il numero di avviso dell'analisi del codice e il numero di riga nel file di origine in cui si verifica il difetto.
Per visualizzare i difetti
Nella finestra Risultati analisi codice fare clic sul numero di riga e nella finestra Risultati analisi codice viene visualizzata una descrizione del difetto.
La finestra Codice visualizza il codice sorgente e indica dove si verifica il difetto.
Per altre informazioni su un avviso specifico, fare clic sull'avviso nella finestra Risultati analisi codice.
Per visualizzare il file di log di analisi del codice associato a una compilazione
- Passare alla directory per la configurazione e la piattaforma di compilazione, ad esempio
\\Windows7Release\\x64
. - Se si usano le regole consigliate, il file di log viene chiamato
vc.\*codeanalysis.xml
. Se si sta creando un driver per Windows Server 2012, questo file viene usato per creare il log di verifica del driver.
Eliminazione della segnalazione dei difetti
In alcuni casi, è possibile eliminare il report di un messaggio di avviso specifico; ad esempio, se l'avviso è principalmente informativo e si conosce la causa dell'errore.
Per eliminare i messaggi di avviso
Per rimuovere un'istanza di un difetto segnalato, selezionare il numero di riga e l'avviso nella finestra Risultati analisi codice.
Nella descrizione espansa dell'avviso fare clic su Azioni>Elimina messaggio>nell'origine.
Una direttiva pragma warning con l'identificatore di eliminazione elimina l'avviso solo per la riga di codice che segue immediatamente l'istruzione di avviso #pragma.
#pragma warning(suppress: 6014)
Modifica dei limiti di utilizzo dello stack per l'avviso C6262 per i driver in modalità kernel
Nel codice in modalità utente e in modalità kernel, lo spazio dello stack è limitato e il commit di una pagina dello stack causa un'eccezione di overflow dello stack. L'utilizzo elevato dello stack è particolarmente preoccupante in modalità kernel perché lo spazio totale dello stack disponibile è di soli 12 KB. Il codice in modalità kernel deve limitare in modo aggressivo l'uso dello stack.
Lo strumento di analisi del codice genera l'avviso C6262 se in una funzione vengono usati più di 1 KB di spazio dello stack. Se si desidera analizzare le funzioni che potrebbero richiedere un utilizzo elevato delle risorse, è possibile personalizzare o ridurre il limite di soglia dello stack usato da C6262. Se si riduce il limite di soglia dello stack, lo strumento di analisi del codice può potenzialmente trovare altri problemi. È quindi possibile scegliere di risolvere i problemi di utilizzo dello stack. Ad esempio, è possibile abbassare la soglia a 400 byte per verificare se altre funzioni usano risorse.
Per personalizzare il limite di stacksize per C6262
- Aprire il file di progetto di Visual Studio (.vcxproj) per il driver in modalità kernel (o componente) nel Blocco note o in un altro editor di testo.
- Aggiungere un nuovo ItemDefinitionGroup> per il compilatore< ClCompile>.<
- Aggiungere l'elemento PREfastAdditionalOptions> e impostare i byte> stacksize<.< Il valore predefinito è stacksize1024.
<ItemDefinitionGroup>
<ClCompile>
<!-- Change stack depth for C6262 from 1024 to 400 -->
<PREfastAdditionalOptions>stacksize400</PREfastAdditionalOptions>
</ClCompile>
</ItemDefinitionGroup>
Salvare il file di progetto. Avviare Visual Studio, caricare il progetto driver aggiornato ed eseguire l'analisi del codice.
Per ripristinare il valore predefinito di 1 KB, annullare le modifiche apportate al file di progetto o modificare il valore della dimensione dello stack in stacksize1024.