Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Das Windows Driver Kit (WDK) bietet Treiberüberprüfungstools, mit denen Sie Fehler während der Entwicklung erkennen und korrigieren können. Zu diesen Tools gehören statische Analysetools wie CodeQL und dynamische Tools wie Driver Verifier, die wichtige Fehler vor der Bereitstellung finden können. Die Verwendung dieser Überprüfungstools frühzeitig in der Entwicklung spart Zeit und verhindert schwerwiegende Treiberprobleme in der Produktion.
Die WDK-Dokumentation beschreibt diese Überprüfungstools und empfiehlt deren Verwendung, da jedes Tool verschiedene Arten von Treiberfehlern auf unterschiedliche Weise erkennt. Diese Tools sind wesentlich effizienter als manuelle Prüfungen. Sie können Fehler erkennen, die in der Regel nicht in Standardtreibertests gefunden werden, und sie verkörpern die Expertise von erfahrenen Treiberentwicklern und Windows-Treiberoberflächendesignern.
Um optimale Ergebnisse zu erzielen, verwenden Sie alle Tools, die auf Ihrem Treiber ausgeführt werden können. Wenn Sie eines dieser Tools weglassen, verpassen Sie möglicherweise einen schwerwiegenden Fehler in Ihrem Treiber.
Statische und dynamische Überprüfungstools
Es gibt zwei grundlegende Arten von Überprüfungstools:
Statische Überprüfungstools untersuchen den Treibercode, ohne den Treiber auszuführen. Da diese Tools nicht auf Tests angewiesen sind, die den Code ausführen, können sie äußerst gründlich sein. Theoretisch können statische Überprüfungstools den gesamten Treibercode untersuchen, einschließlich Codepfaden, die selten in der Praxis ausgeführt werden. Da der Treiber jedoch nicht tatsächlich ausgeführt wird, generieren diese Tools möglicherweise falsch positive Ergebnisse. Das heißt, sie melden möglicherweise einen Fehler in einem Codepfad, der nicht in der Praxis auftritt.
CodeQL ist das primäre statische Analysetool für Treiber. CodeQL stellt eine leistungsstarke Abfragesprache bereit, die Code als abgefragte Datenbank behandelt, sodass Abfragen für bestimmte Verhaltensweisen und Muster einfach geschrieben werden können. Das Windows-Hardwarekompatibilitätsprogramm erfordert CodeQL für STL-Tests (Static Tool Logo) auf unseren Client- und Serverbetriebssystemen. Weitere Informationen finden Sie unter CodeQL und dem Logotest für statische Tools.
Dynamische Überprüfungstools untersuchen den Treibercode, während der Treiber ausgeführt wird, in der Regel durch Abfangen von Aufrufen von häufig verwendeten Treiberunterstützungsroutinen und Substituieren von Aufrufen ihrer eigenen Fehlerüberprüfungsversionen derselben Routinen. Da der Treiber tatsächlich ausgeführt wird, während die dynamischen Tools die Überprüfung durchführen, sind falsch positive Ergebnisse selten. Da die dynamischen Tools jedoch nur die Aktionen erkennen, die während der Überwachung des Treibers auftreten, können die Tools bestimmte Treiberfehler verpassen, wenn die Treibertestabdeckung nicht ausreichend ist. Gleichzeitig können mithilfe der zur Laufzeit verfügbaren Informationen – z. B. Informationen, die schwieriger sind, statisch aus dem Quellcode zu extrahieren – bestimmte Klassen von Treiberfehlern erkennen, die mit statischen Analysetools schwieriger zu erkennen sind.
Verwenden Sie eine Kombination aus statischen und dynamischen Überprüfungstools. Mit statischen Tools können Sie Codepfade überprüfen, die in der Praxis schwierig zu üben sind, während die dynamischen Tools schwerwiegende Fehler finden, die im Treiber auftreten.
Übersicht über Überprüfungstools
Wichtig
Das Tool für statische Treiberüberprüfung (Static Driver Verifier, SDV) wird nicht mehr unterstützt. Es ist in WDKs, die neuer als Build 26017 sind, nicht verfügbar, einschließlich des Windows 24H2 RTM WDK. Die Verwendung des SDV für die Analyse wird nicht empfohlen.
Das WDK beschreibt die folgenden Überprüfungstools und empfiehlt deren Verwendung durch Treiberentwickler und Tester. Sie werden in der Reihenfolge aufgeführt, in der Sie sie in der Regel verwenden.
Nach dem Kompilieren des Codes
- CodeQL ist ein leistungsfähiges Semantikcodeanalysemodul. Die Kombination aus einer umfangreichen Suite von hochwertigen Sicherheitsabfragen und einer robusten Plattform macht es zu einem unschätzbaren Tool zum Sichern von Treibercode. Weitere Informationen finden Sie unter CodeQL und dem Logotest für statische Tools.
Wenn der Treiber ausgeführt wird
Verwenden Sie die folgenden dynamischen Überprüfungstools, sobald der Treiber erstellt wurde und ohne offensichtliche Fehler ausgeführt wird.
Driver Verifier ist ein dynamisches Überprüfungstool, das speziell für Windows-Treiber geschrieben wurde. Sie enthält mehrere Tests, die Sie gleichzeitig auf mehreren Treibern ausführen können. Driver Verifier ist so effektiv bei der Erkennung kritischer Fehler in Treibern, dass erfahrene Treiberentwickler und Tester ihn so konfigurieren, dass er bei jedem Lauf ihres Treibers in einer Entwicklungs- oder Testumgebung ausgeführt wird. Driver Verifier ist in Windows enthalten. Wenn Sie die Treiberüberprüfung für einen Treiber aktivieren, müssen Sie auch mehrere Tests auf dem Treiber ausführen. Die Treiberüberprüfung kann bestimmte Treiberfehler erkennen, die nur mit statischen Überprüfungstools schwer zu erkennen sind. Beispiele für diese Arten von Fehlern sind die folgenden:
Kernelpoolpufferüberläufe. Wenn der überprüfte Treiber Poolspeicherpuffer zuordnet, schützt Driver Verifier sie mithilfe einer nicht zugänglichen Speicherseite. Wenn der Treiber versucht, arbeitsspeicherüber das Ende des Puffers zu verwenden, initiiert driver Verifier eine Fehlerüberprüfung.
Verwenden des Arbeitsspeichers nach dem Freigeben. Spezielle Poolspeicherblöcke verwenden ihre eigene Speicherseite und teilen keine Speicherseiten mit anderen Zuordnungen. Wenn der Treiber den Speicherblock des Pools frei gibt, wird die entsprechende Speicherseite nicht zugänglich. Wenn der Treiber versucht, diesen Speicher nach dem Freigeben zu verwenden, stürzt der Treiber sofort ab.
Verwenden des ausgelagerten Speichers beim Ausführen mit erhöhten RECHTEN IRQL. Wenn ein überprüfter Treiber den IRQL bei DISPATCH_LEVEL oder höher auslöst, schneidet Driver Verifier den gesamten ausgelagerten Arbeitsspeicher aus dem Systemarbeitssatz ab und simuliert ein System unter Arbeitsspeicherdruck. Der Treiber stürzt ab, wenn versucht wird, eine dieser ausserseitigen virtuellen Adressen zu verwenden.
Simulation mit geringen Ressourcen. Um ein System unter Bedingungen mit niedrigen Ressourcen zu simulieren, kann driver Verifier verschiedene Betriebssystem-Kernel-APIs fehlschlagen, die Treiber aufrufen.
Speicherverluste. Driver Verifier verfolgt speicherzuordnungen eines Treibers und stellt sicher, dass der Treiber den Speicher freigibt, bevor er entladen wird.
E/A-Vorgänge, die zu viel Zeit in Anspruch nehmen, um abgeschlossen oder abgebrochen zu werden. Driver Verifier kann die Logik des Treibers testen, um auf Rückgabewerte von IoCallDriver zu reagieren.
DDI-Complianceüberprüfung. (Ab Windows 8 verfügbar) Driver Verifier wendet eine Reihe von DDI-Regeln (Device Driver Interface) an, die die richtige Interaktion zwischen einem Treiber und der Kernelschnittstelle des Betriebssystems überprüfen.
Der Kernel Address Sanitizer (KASAN) ist eine Fehlererkennungstechnologie, die von Windows-Treibern unterstützt wird, mit der Sie mehrere Klassen illegaler Speicherzugriffe erkennen können, z. B. Pufferüberläufe und verwendungsfreie Ereignisse.
Application Verifier ist ein dynamisches Überprüfungstool für Benutzermodusanwendungen und Treiber, die in C oder C++ geschrieben wurden. Verwalteter Code wird nicht überprüft.