Verwenden des Statischen Treiberüberprüfungsberichts

Der SDV-Bericht ist eine interaktive Anzeige der Überprüfungsergebnisse. In diesem Abschnitt wird erläutert, wie Sie den SDV-Bericht verwenden, um einen Codierungsfehler im Treiber zu finden. Ausführliche Informationen zum Bericht, zu den Features der Fenster und zu den Elementen in den Fenstern finden Sie unter Static Driver Verifier Report.

Öffnen sie den Fehleranzeiger für statische Treiberüberprüfungen.

Wenn SDV im Ergebnisbereich "Mängel" (Regelverletzungen) gemeldet hat, können Sie den code, der an der Verletzung beteiligt ist, im Fenster Fehleranzeige des Static Driver Verifier Report anzeigen. Im Fenster Fehleranzeige wird der Code im Pfad zum Regelverstoß angezeigt. Es gibt ein Fehleranzeigefenster für jede Regel, die verletzt wurde (Sie können jeweils nur ein Fehleranzeigefenster anzeigen).

So öffnen Sie das Fehleranzeigefenster für einen Fehler:

  • Wählen Sie eine Regel aus der Liste unter dem Knoten Fehler aus .

Rotes Kreissymbol mit einem weißen X, das einen Fehler darstellt.

Dieses Verfahren funktioniert nur bei Mängeln. SDV generiert kein Fehleranzeigefenster , wenn die Ergebnisse einer Überprüfung keine Defekte sind, z. B. Pässe, Timeouts, Leerzeichen, nicht zutreffend oder andere nicht defekte Ergebnisse.

Der folgende Screenshot zeigt eine Seite "Static Driver Verifier Report".

Screenshot: Seite

Überprüfen der Regel

Bevor Sie versuchen, die Regelverletzung im Code zu finden, machen Sie sich mit den Regeln vertraut, gegen die der Treiber verstoßen hat.

Der Abschnitt Static Driver Verifier Rules enthält ein Thema, in dem die einzelnen Regeln erläutert werden, z. B. CancelSpinLock.

Um den Code für die Regel anzuzeigen, klicken Sie im Bereich Quellcode des Berichts zur Überprüfung des statischen Treibers auf die Registerkarte mit dem Regelcode, z. B. CancelSpinLock.slic.

Beispielsweise wird die CancelSpinLock-Regel verletzt, wenn der Treiber IoAcquireCancelSpinLock oder IoReleaseCancelSpinLock außer Ordnung ruft oder wenn der Treiber die Routine beendet, bevor er die Drehsperre loslässt.

Nachverfolgen des Fehlerpfads

Wenn das Fenster Fehleranzeige geöffnet wird, wird das Element im Bereich Ablaufverfolgungsstruktur ausgewählt, das den ersten kritischen Treiberaufruf im Fehlerpfad darstellt. Im Bereich Quellcode ist die zugeordnete Zeile des Quellcodes blau hervorgehoben.

Der folgende Screenshot zeigt die öffnende Ansicht des Fensters Static Driver Verifier Defect Viewer für einen Verstoß gegen die CancelSpinLock-Regel durch den Fail_Driver1 Beispieltreiber. In diesem Beispiel ist der erste Treiberaufruf im Pfad zu einer Verletzung der CancelSpinLock-Regel ein Aufruf von IoAcquireCancelSpinLock in der DispatchSystemControl-Routine des Treibers.

Screenshot der öffnenden Ansicht des Fensters

Verwenden des Quellcodebereichs

Im Bereich Quellcode werden die bei der Überprüfung verwendeten Quelldateien angezeigt. Wenn ein Element im Bereich Ablaufverfolgungsstruktur ausgewählt ist, wird die dem Element zugeordnete Quellcodedatei oben im Dateistapel im angrenzenden Bereich Quellcode angezeigt. Um eine andere Quelldatei anzuzeigen, klicken Sie im Bereich Quellcode auf die Registerkarte für die Quelldatei.

Der folgende Screenshot zeigt den Bereich Quellcode. In diesem Quellcodebereich sind die Codezeilen, die hellblau hervorgehoben sind, die dem ausgewählten Element im Bereich Ablaufverfolgungsstruktur zugeordnet sind.

Screenshot des Bereichs

Die Zeilen im Treibercode, die im Pfad zum Fehler ausgeführt werden, werden in rotem Text angezeigt. Wenn Sie nur die Zeilen mit rotem Text betrachten, z. B. zeile 116 und 118 in diesem Beispiel, können Sie manchmal den Fehler sehen, insbesondere einen einfachen Fehler wie in diesem Beispiel. In diesem Fall ruft der Treiber die Drehsperre ab und kehrt dann von der Dispatchroutine zurück, ohne die Spinsperre loszulassen.

Schritt durch die Ablaufverfolgung

Um mit der Ablaufverfolgung zu beginnen, wählen Sie ein Element im Bereich Ablaufverfolgungsstruktur aus, und drücken Sie dann die NACH-UNTEN-TASTE. Jedes Mal, wenn Sie NACH-UNTEN drücken, wird das nächste Element im Bereich Ablaufverfolgungsstruktur ausgewählt.

Wenn Sie die Elemente im Bereich Ablaufverfolgungsstruktur durchlaufen, watch den Bereich Quellcode für Elemente aus dem Treibercode. Um einen reduzierten Codeabschnitt zu erweitern, drücken Sie die NACH-RECHTS-TASTE. Um einen erweiterten Codeabschnitt zu reduzieren, drücken Sie die NACH-LINKS-TASTE. Der Cursor überspringt alle reduzierten Codeabschnitte.

Wenn Sie durch die Elemente im Bereich Ablaufverfolgungsstruktur nach unten scrollen, wird die Quellcodedatei, aus der das ausgewählte Element stammt, an den Anfang des Dateistapels im Bereich Quellcode verschoben, und die zugehörige Codezeile wird hervorgehoben.

Der folgende Screenshot zeigt den Fehleranzeiger für statische Treiberüberprüfungen mit den Bereichen Ablaufverfolgungsstruktur und Quellcode.

Screenshot: Seite

Verwenden des Bereichs "Regeldatei" und "Zustand"

Sie können den Zustandsbereich verwenden, um den Satz boolescher Ausdrücke anzuzeigen, der die Werte der Variablen darstellt, die SDV während der Überprüfung nachverfolgt.

Die booleschen Ausdrücke, die im Bereich Zustand angezeigt werden, sind die Ausdrücke in diesem Satz, die auf TRUE ausgewertet werden. Wenn das Element im Bereich Ablaufverfolgungsstruktur den Wert eines beliebigen Ausdrucks ändert, ändert sich der Inhalt des Bereichs Zustand , um den neuen Satz von Ausdrücken anzuzeigen, der in TRUE ausgewertet wird.

Wenn Sie den Bereich Ablaufverfolgungsstruktur durchlaufen, können Sie sehen, wie SDV die Werte dieser Variablen verwendet, um die in der Regeldatei (*.slic) verwendeten Ausdrücke auszuwerten.

Der folgende Screenshot der Seite Static Driver Verifier Report zeigt, wie SDV-Tests zeigen, ob der Treiber zuvor eine Drehsperre erworben hatte. SDV-Tests, um festzustellen, ob der Treiber zuvor eine Spin-Sperre erworben hatte, d. h. wenn der Wert der Variablen s1 ist, d. h. gesperrt. In diesem Fall s!=1 (entsperrt), wie im Statusbereich angezeigt, legt SDV daher den Wert von s auf 1 fest, was angibt, dass die Sperre abgerufen wird.

Screenshot: Seite

Suchen der ABORT-Routine

Wenn der Treibercode gegen eine Regel verstößt, enthält der Bereich Ablaufverfolgungsstruktur eine ABORT-Routine zum Melden des Fehlers.

Wenn der Codepfad zu einem Fehler lang und komplex ist, ist es häufig nützlich, im Bereich Ablaufverfolgungsstruktur nach unten zu scrollen, bis Sie die ABORT-Routine finden, und dann die NACH-OBEN-TASTE verwenden, um den Code zu finden, der den Fehlerbericht am unmittelbarsten ausgelöst hat.

Wie im folgenden Screenshot gezeigt, ist die ABORT-Routine beispielsweise einer Zeile aus der Datei CancelSpinLock.slic zugeordnet, die den Fehler meldet, nachdem getestet wurde, ob die Sperre erworben wurde (s==gesperrt). Der Test ist Teil einer Unterroutine, die ausgeführt wird, wenn die Dispatchroutine endet. Aus diesen Informationen können Sie ableiten, dass der Treiber eine Drehsperre nicht loslassen konnte, bevor er von der Dispatchroutine zurückkehrt.

Screenshot: Seite

Schließen Sie den Fehleranzeiger für statische Treiberüberprüfungen.

Nachdem Sie den Codefehler identifiziert haben, der den Fehler verursacht hat, können Sie das Fenster Static Driver Verifier Defect Viewer für die aktuelle Regel schließen und dann die Fehleranzeige für eine andere Regel öffnen.

So schließen Sie die Fehleranzeige für eine Regel:

  • Wählen Sie im Menü Dateidie Option Beenden aus.

Sie können auch auf die Schaltfläche Schließen (X) für die Fehleranzeige klicken. Sie befindet sich direkt unter der Schaltfläche Schließen (X) für den Bericht zur Überprüfung des statischen Treibers.

Der folgende Screenshot zeigt, wie Sie die Fehleranzeige schließen.

Screenshot: Schließen der Fehleranzeige für eine Regel in Static Driver Verifier