Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
Affinché SDV verifichi un driver, deve essere in grado di interpretare il codice del driver, in particolare, i punti di ingresso del driver e il codice nelle funzioni e nelle routine che supportano la funzionalità del driver necessaria.
Le sezioni seguenti descrivono i requisiti di base per i driver e la sintassi specifica che SDV si aspetta dai driver che verifica. SDV non verifica che i driver siano conformi a questi requisiti, ma se il driver non è conforme, SDV potrebbe non funzionare e, in rari casi, segnalare risultati falsi positivi o falsi negativi a causa di un'interpretazione errata.
Importante
SDV non è più supportato e SDV non è disponibile nelle versioni WDK o EWDK di Windows 24H2. Non è disponibile in WDK più recente rispetto alla build 26017 e non è incluso in Windows 24H2 RTM WDK.
Per scaricare SDV, basta scaricare Windows 11 versione 22H2 di EWDK (rilasciata il 24 ottobre 2023) con Visual Studio build tools 17.1.5 da Scarica il Kit di Sviluppo Driver per Windows (WDK). Si raccomanda solo l'uso di Enterprise WDK per eseguire SDV. L'uso di versioni precedenti del WDK standard in combinazione con le versioni recenti di Visual Studio non è consigliato, in quanto ciò genererà probabilmente errori di analisi.
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 ulteriori informazioni sull'uso di CodeQL, vedere CodeQL e il logo di Static Tools.
Caratteristiche di base del driver software
SDV è in grado di verificare solo i driver con le caratteristiche seguenti:
SDV verifica i driver e le librerie scritti in C e C++.
SDV esegue la verifica completa solo sui driver di dispositivo conformi a KMDF e a WDM (driver di funzione, driver di filtro e driver bus), driver NDIS (driver di filtro, miniport e driver di protocollo) e driver Storport.
SDV tenta la verifica limitata delle proprietà generiche (ad esempio NullCheck) sui driver che non rientrano nelle categorie precedenti.
SDV può verificare i driver WDM che dichiarano le funzioni di callback del driver usando i tipi di ruolo di funzione WDM. Per informazioni su come dichiarare le funzioni, vedere Dichiarazione di funzioni tramite tipi di ruolo di funzione per i driver WDM.
SDV può verificare i driver generati da Kernel-Mode Driver Framework, purché ogni funzione di callback venga dichiarata usando un tipo di ruolo della funzione di callback SDV-KMDF. Per altre informazioni, vedere Dichiarazione di funzioni tramite tipi di ruolo di funzione per i driver KMDF.
SDV può verificare i driver NDIS, purché ogni funzione di callback venga annotata con la sua dichiarazione di funzione usando il tipo di funzione di callback SDV-NDIS. Per altre informazioni, vedere Dichiarazione di funzioni tramite tipi di ruolo di funzione per i driver NDIS.
SDV può verificare i driver Storport, purché sia possibile annotare ogni funzione di callback con la dichiarazione di funzione. Utilizza un tipo di funzione di callback SDV-Storport per farlo. Per altre informazioni, vedere Dichiarazione di funzioni tramite tipi di ruolo di funzione per i driver Storport.
Requisiti di base dei driver
Affinché SDV verifichi un driver WDM, il driver deve:
Includere Wdm.h o Ntddk.h (Wdm.h è un subset di Ntddk.h).
Creare oggetti dispositivo usando i metodi descritti in Introduzione agli oggetti dispositivo e come segue.
Avere una routine di scaricamento scritta come consigliato in Scrittura di una routine di scaricamento.
Dichiarare ogni funzione dispatch usando una dichiarazione di tipo di ruolo di funzione, descritta in Uso delle dichiarazioni di tipo di ruolo di funzione. Per informazioni sui tipi di ruolo WDM e sulle annotazioni _Dispatch_type_ (tipo), vedere Dichiarare funzioni usando ruoli di funzione per i driver WDM.
Affinché SDV verifichi un driver KMDF, il driver deve:
Includere Wdf.h e Ntddk.h.
Creare gli oggetti KMDF descritti in Uso del framework per sviluppare un driver.
Annotare ogni funzione di callback utilizzando un tipo di ruolo SDV-KMDF, come descritto in Uso delle dichiarazioni per ruoli di funzione. Per un elenco dei tipi di ruolo supportati, vedere Static Driver Verifier KMDF Function Declarations.
Affinché SDV verifichi un driver NDIS, il driver deve:
Includere Ndis.h e Ntddk.h.
Seguire le linee guida nella Guida alla progettazione di rete per creare driver NDIS.
Annotare ogni funzione di callback usando un tipo di ruolo della funzione di callback SDV-NDIS, come descritto in Uso delle dichiarazioni del tipo di ruolo funzione. Per un elenco dei tipi di ruolo supportati, vedere Static Driver Verifier NDIS Function Declarations.
Inoltre, SDV può verificare i driver che supportano:
Nomi di funzioni riservate
Il motore di verifica SDV non funziona correttamente quando il driver o il codice della libreria usa gli stessi modelli di nome di funzione usati internamente da SDV.
In particolare, SDV non interpreta correttamente il codice se:
Il codice include nomi di funzione che iniziano con __init e sono seguiti da uno o più numeri interi, ad esempio __init123.
Il codice include nomi di funzione che iniziano con sdv_, ad esempio sdv_Func o includono la stringa _sdv_, ad esempio Func_sdv_ o Func_sdv_foo.
La libreria usa un file per rinominare una
.deffunzione esportata e il nome esterno corrisponde al nome di un'altra funzione statica nella libreria.
Se il codice del driver o il codice della libreria include questi elementi, SDV tenta di elaborare la libreria o verificare il driver, ma il risultato è Funzionalità non supportata (NSF). Per altre informazioni sui risultati SDV, vedere Interpreting Static Driver Verifier Results.