Verwenden von UMDF Verifier
Das Framework bietet integrierte Überprüfungsfunktionen, mit denen Sie einen ausgeführten UMDF-Treiber (User-Mode Driver Framework) testen können. Diese Funktionalität, manchmal ALS UMDF Verifier bezeichnet, überprüft den Zustand des Treibers und die Argumente, die der Treiber an Frameworkobjektmethoden übergibt. Sie können UMDF Verifier selbst oder zusammen mit dem allgemeinen Tool Application Verifier (AppVerif.exe) verwenden.
UMDF Verifier überprüft die Sperrerfassung und Hierarchien, überprüft die korrekte E/A-Abbruch- und Warteschlangennutzung und stellt sicher, dass der Treiber und das Framework den dokumentierten Verträgen entsprechen.
UMDF Verifier verursacht Fehler im UMDF-Treibercode, um den Hostprozess zu überprüfen . Eine UMDF-Fehlerüberprüfung führt jedoch nicht dazu, dass ein blauer Textbildschirm mit Informationen zum Fehler angezeigt wird. Stattdessen eine UMDF-Fehlerüberprüfung:
Erstellt eine Speicherabbilddatei und speichert die Datei im Protokolldateiverzeichnis des Computers (z. B. %windir%\System32\LogFiles\WUDF\Xxx.dmp).
Hinweis Ab UMDF 2.15 lautet das Protokollverzeichnis %ProgramData%\Microsoft\WDF.
Erstellt einen Fehlerbericht für Microsoft (Opt-In).
Wechselt in den Debugger, wenn eine an den Computer angefügt ist.
Beendet den Hostprozess und deaktiviert das Gerät.
Ab UMDF 2.0 gibt UMDF Verifier in einigen Fällen Haltepunkte aus und verursacht eine UMDF-Fehlerüberprüfung in anderen Fällen. Dieses Verhalten ähnelt dem von KMDF Verifier.
Es wird dringend empfohlen, alle Entwicklungen und Tests Ihres Treibers durchzuführen, nachdem Application Verifier (AppVerif.exe) auf WUDFHost.exe aktiviert wurde. Verwenden Sie den folgenden Befehl, fügen Sie einen Debugger an, und starten Sie dann neu.
AppVerif -enable Heaps Exceptions Handles Locks Memory TLS Leak -for WudfHost.exe
Ab Version 2.0 von UMDF wird BEI Ausführung von Application Verifier auf dem Treiberhostprozess (Wudfhost) AUTOMATISCH UMDF Verifier für alle UMDF 2.0-Treiber in diesem Host sowie für alle UMDF 2.0-Treiber in zukünftigen Treiberhostprozessen aktiviert.
In UMDF 1.11 und früher ist die Überprüfung des Frameworks immer aktiviert, und Sie können sie nicht deaktivieren.
Aktivieren und Deaktivieren der UMDF-Überprüfung
Sie können UMDF Verifier manuell aktivieren, indem Sie "VerifierOn" auf einen Nichtzerowert im Unterschlüssel "Parameters\Wdf" des Registrierungsschlüssels "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services\<Driver name> registry key" festlegen.
Hinweis : Das Vorhandensein eines VerifierOn-Werts überhaupt, sogar auf Null festgelegt, setzt die Verknüpfung mit der Anwendungsprüfer außer Kraft. Daher wird empfohlen, den Wert zu löschen, wenn Sie ihn nicht erzwingen, anstatt ihn auf Null festzulegen.
Um festzustellen, ob UMDF Verifier aktiviert ist, legen Sie einen Haltepunkt an einem Speicherort fest, nachdem Ihr Treiber WdfDriverCreate aufgerufen hat, und verwenden Sie den Erweiterungsbefehl !wdfdriverinfo-Debugger:
!wdfkd.wdfdriverinfo Ihr Treibername> **** 0x1 <
Weitere Informationen zu den Debuggererweiterungsbefehlen finden Sie unter Debuggererweiterungen für frameworkbasierte Treiber.
Steuern des Verhaltens der Prüfer
Sie können das Verhalten von UMDF Verifier steuern, indem Sie Werte in der Registrierung ändern. Alternativ können Sie die WDF Verifier-Steuerelementanwendung verwenden, um diese Werte festzulegen.
Die folgenden Registrierungswerte können mit UMDF 1 verwendet werden.x-Treiber sowie UMDF 2.0- und höher-Treiber.
VerifyDownLevel (REG_DWORD)
Wenn VerifyDownLevel auf einen Wert ungleich Null festgelegt ist und der Treiber mit einer Version des Frameworks erstellt wurde, das älter als die aktuelle Version ist, enthält die Überprüfung des Frameworks Tests, die nach dem Erstellen des Treibers hinzugefügt wurden. Wenn dieser Wert nicht vorhanden ist oder auf Null festgelegt ist, enthält die Überprüfung des Frameworks nur die Tests, die beim Erstellen des Treibers vorhanden waren.
Wenn Ihr Treiber beispielsweise mit Version 1.7 des Frameworks erstellt wurde und Version 1.9 des Frameworks auf dem Computer installiert ist, bewirkt das Festlegen von VerifyDownLevel auf "nonzero", dass der Prüfer Tests enthält, die der Version 1.9 des Prüfers hinzugefügt wurden, wenn der Treiber ausgeführt wird.
Dieser Wert befindet sich im Unterschlüssel "Parameters\Wdf " des Registrierungsschlüssels "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services\DriverName ".
TrackObjects (REG_DWORD)
Wenn TrackObjects auf einen Wert ungleich Null festgelegt ist, gibt das Framework den Debugger ein, wenn der Treiber entladen wird, wenn frameworkbasierte Objekte verloren gegangen sind (nicht gelöscht).
Während regulärer Tests sollten Sie TrackObjects und nicht TrackRefCounts aktivieren. Wenn der Prüfer meldet, dass der Treiber Framework-Objekte ausläuft, verwenden Sie die Steuerelementanwendung, um die Option "TrackRefCounts verifier" zu aktivieren.
Dieser Wert befindet sich im Unterschlüssel "DefaultHostProcessGuid" des Registrierungsschlüssels HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services, wobei DefaultHostProcessGuid ein Wert ist, den Sie im Unterschlüssel HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF finden können.
TrackRefCounts (REG_DWORD)
Wenn TrackRefCounts auf einen Wert ungleich Null festgelegt ist, verwaltet das Framework eine Anzahl der Verweise auf jedes frameworkbasierte Objekt. Sie können die Debuggererweiterung !wudfrefhist verwenden, um die Änderungen der Referenzanzahl eines Objekts anzuzeigen.
Wenn TrackRefCounts auf einen Wert ungleich Null festgelegt wird, wird die Leistung des Treibers beeinträchtigt. Daher sollten Sie den Wert bei 0 belassen, es sei denn, Sie debuggen einen Objektlöschfehler.
Dieser Wert befindet sich im Unterschlüssel "DefaultHostProcessGuid" des Registrierungsschlüssels HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services, wobei DefaultHostProcessGuid ein Wert ist, den Sie im Unterschlüssel HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF finden können.
Zusätzlich zu den oben aufgeführten Registrierungswerten können UMDF 2.0 und höhere Treiber auch viele der Registrierungswerte verwenden, die in "Using KMDF Verifier" aufgeführt sind.