Unterstützte Treiber
Damit SDV einen Treiber überprüfen kann, muss er den Treibercode interpretieren können, insbesondere die Einstiegspunkte des Treibers und den Code in Funktionen und Routinen, die die erforderliche Treiberfunktionalität unterstützen.
In den folgenden Abschnitten werden die grundlegenden Anforderungen für Treiber und die spezifische Syntax beschrieben, die SDV von den überprüften Treibern erwartet. SDV überprüft nicht, ob Treiber diese Anforderungen erfüllen. Wenn der Treiber diese Anforderungen jedoch nicht erfüllt, kann die SDV möglicherweise nicht ausgeführt werden, und in seltenen Fällen werden falsch positive oder falsch negative Ergebnisse aufgrund von Fehlinterpretationen angezeigt.
Grundlegende Treibereigenschaften
SDV kann nur Treiber mit den folgenden Merkmalen überprüfen:
SDV überprüft Treiber und Bibliotheken, die in C und C++ geschrieben sind.
SDV führt die vollständige Überprüfung nur für KMDF-kompatible und WDM-kompatible Gerätetreiber (Funktionstreiber, Filtertreiber und Bustreiber), NDIS-Treiber (Filter-, Miniport- und Protokolltreiber) und Storport-Treiber durch.
SDV versucht die eingeschränkte Überprüfung generischer Eigenschaften (z. B . NullCheck) für Treiber, die nicht in die oben genannten Kategorien passen.
SDV kann WDM-Treiber überprüfen, die ihre Treiberrückruffunktionen mithilfe der WDM-Funktionsrollentypen deklarieren. Informationen zum Deklarieren von Funktionen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für WDM-Treiber.
SDV kann Treiber überprüfen, die aus dem Kernelmodustreiber-Framework erstellt werden, vorausgesetzt, Sie deklarieren jede Rückruffunktion mithilfe eines SDV-KMDF-Rückruffunktionsrollentyps. Weitere Informationen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für KMDF-Treiber.
SDV kann NDIS-Treiber überprüfen, vorausgesetzt, Sie kommentieren jede Rückruffunktion mit der Funktionsdeklaration mithilfe eines SDV-NDIS-Rückruffunktionstyps. Weitere Informationen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für NDIS-Treiber.
SDV kann Storport-Treiber überprüfen, vorausgesetzt, Sie kommentieren jede Rückruffunktion mit der Funktionsdeklaration. Dazu verwenden Sie einen SDV-Storport Rückruffunktionstyp. Weitere Informationen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für Storport-Treiber.
Grundlegende Treiberanforderungen
Damit SDV einen WDM-Treiber überprüfen kann, muss der Treiber:
Schließen Sie Wdm.h oder Ntddk.h ein (Wdm.h ist eine Teilmenge von Ntddk.h).
Erstellen Sie Geräteobjekte mithilfe von Methoden, die unter Einführung in Geräteobjekte und im Folgenden beschrieben werden.
Sie verfügen über eine Entladeroutine, die wie unter Schreiben einer Entladeroutine empfohlen geschrieben wurde.
Deklarieren Sie jede Dispatchfunktion mithilfe einer Funktionsrollentypdeklaration, die unter Verwenden von Funktionsrollentypdeklarationen beschrieben wird. Informationen zu den WDM-Rollentypen und den anmerkungen _Dispatch_type_ (Typ) finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für WDM-Treiber.
Damit SDV einen KMDF-Treiber überprüfen kann, muss der Treiber:
Schließen Sie Wdf.h und Ntddk.h ein.
Erstellen Sie die kmdf-Objekte, die unter Verwenden des Frameworks zum Entwickeln eines Treibers beschrieben sind.
Kommentieren Sie jede Rückruffunktion mithilfe eines SDV-KMDF-Rückruffunktionsrollentyps, der unter Verwenden von Funktionsrollentypdeklarationen beschrieben wird. Eine Liste der unterstützten Rollentypen finden Sie unter Deklarationen von KMDF-Funktionen für die statische Treiberüberprüfung.
Damit SDV einen NDIS-Treiber überprüfen kann, muss der Treiber:
Schließen Sie Ndis.h und Ntddk.h ein.
Befolgen Sie die Richtlinien im Netzwerkentwurfshandbuch , um NDIS-Treiber zu erstellen.
Kommentieren Sie jede Rückruffunktion mithilfe eines SDV-NDIS-Rückruffunktionsrollentyps, wie unter Verwenden von Funktionsrollentypdeklarationen beschrieben. Eine Liste der unterstützten Rollentypen finden Sie unter Deklarationen von NDIS-Funktionen der statischen Treiberüberprüfung.
Darüber hinaus kann SDV Treiber überprüfen, die Folgendes unterstützen:
Reservierte Funktionsnamen
Die SDV-Überprüfungs-Engine funktioniert nicht ordnungsgemäß, wenn der Treiber- oder Bibliothekscode die gleichen Funktionsnamensmuster verwendet, die sdv intern verwendet.
Insbesondere interpretiert SDV Code nicht ordnungsgemäß, wenn:
Der Code enthält Funktionsnamen, die mit __init beginnen und auf die mindestens eine ganze Zahl folgt, z. B. __init123.
Der Code enthält Funktionsnamen, die mit sdv_ beginnen, z. B. sdv_Func, oder die Zeichenfolge _sdv_, z. B. Func_sdv_ oder Func_sdv_foo.
Die Bibliothek verwendet eine DEF-Datei, um eine exportierte Funktion umzubenennen, und der externe Name entspricht dem Namen einer anderen statischen Funktion in der Bibliothek.
Wenn der Treibercode oder Bibliothekscode diese Elemente enthält, versucht SDV, den Treiber zu überprüfen oder die Bibliothek zu verarbeiten. Das Ergebnis ist jedoch Nicht unterstützte Funktion (NSF). Weitere Informationen zu SDV-Ergebnissen finden Sie unter Interpretieren von Ergebnissen der statischen Treiberüberprüfung.