Driver supportati
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 prevede i driver che verifica. SDV non verifica che i driver siano conformi a questi requisiti, ma se il driver non è conforme, sdV potrebbe non essere eseguito e, in rari casi, segnala 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.
SDV può comunque essere usato scaricando Windows 11 versione 22H2 EWDK (rilasciata il 24 ottobre 2023) con gli strumenti di compilazione di Visual Studio 17.1.5 da Scaricare Windows Driver Kit (WDK) . È consigliabile usare 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 altre informazioni sull'uso di CodeQL, vedere CodeQL e il test del logo degli strumenti statici.
Caratteristiche di base del driver
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 conformi a WDM (driver di funzione, driver di filtro e driver bus), driver NDIS (driver di filtro, miniport e protocolli) 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 prodotti da Kernel-Mode Driver Framework, purché si dichiari ogni funzione di callback 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 dichiarazione di funzione usando un 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. A tale scopo, usare un tipo di funzione di callback SDV-Storport. 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.
Disporre di una routine scaricamento scritta come consigliato in Scrittura di una routine di scaricamento.
Dichiarare ogni funzione dispatch usando una dichiarazione del tipo di ruolo funzione, descritta in Uso delle dichiarazioni del tipo di ruolo della funzione. Per informazioni sui tipi di ruolo WDM e sulle annotazioni di _Dispatch_type_ (tipo), vedere Dichiarazione di funzioni tramite tipi di ruolo 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 usando un tipo di ruolo della funzione di callback SDV-KMDF, descritto in Uso delle dichiarazioni del tipo di ruolo della funzione. Per un elenco dei tipi di ruolo supportati, vedere Static Driver Verifier KMDF Function Declarations.For a list of the supported role types, see Static Driver Verifier 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 della funzione. Per un elenco dei tipi di ruolo supportati, vedere Dichiarazioni di funzione NDIS del driver statico.
Inoltre, SDV può verificare i driver che supportano:
Strumentazione gestione Windows (WMI).
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
.def
funzione 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 verificare il driver o elaborare la libreria, ma il risultato non è supportato feature (NSF). Per altre informazioni sui risultati sdv, vedere Interpretazione dei risultati del driver statico.