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.
Sie können die folgenden Konfigurationen verwenden, um während der Entwicklung einen User-Mode Driver Framework (UMDF)-Treiber zu debuggen. Alle Konfigurationen umfassen zwei Computer, einen Host und ein Ziel.
- Kopieren Sie den Treiber manuell in das Ziel. Führen Sie das Debuggen im Benutzermodus für das Ziel aus. In diesem Szenario verbinden Sie sich manuell mit einer Instanz des Treiber-Host-Prozesses, der auf dem Zielsystem ausgeführt wird.
- Kopieren Sie den Treiber manuell in das Ziel, und führen Sie dann das Debuggen im Kernelmodus vom Host aus.
Es wird empfohlen, alle UMDF-Treibertests und -entwicklung mit einem angefügten Kerneldebugger durchzuführen.
Bewährte Methoden
Es wird empfohlen, alle UMDF-Treibertests mit einem angefügten Kerneldebugger durchzuführen.
Die folgenden Einstellungen werden empfohlen. Sie können diese Einstellungen manuell festlegen oder das WDF Verifier Control Application (WDFVerifier.exe) Tool im WDK verwenden, um diese Einstellungen anzuzeigen oder zu ändern.
Anwendungsüberprüfung auf WUDFHost.exeaktivieren:
AppVerif –enable Heaps Exceptions Handles Locks Memory TLS Leak –for WudfHost.exeWenn Ausnahmen auftreten, sendet Application Verifier Diagnosemeldungen an den Debugger und bricht ein.
Wenn Sie eine Kernelmodusdebuggingsitzung verwenden, legen Sie HostFailKdDebugBreak so fest, dass der Reflektor in den Kernelmodusdebugger einbricht, bevor der Treiberhostprozess beendet wird. Diese Einstellung ist standardmäßig ab Windows 8 aktiviert.
Deaktivieren Sie die Poolerstellung, indem Sie UmdfHostProcessSharing auf ProcessSharingDisabled festlegen. Weitere Informationen finden Sie unter Angeben von WDF-Direktiven in INF-Dateien.
Wenn ein UMDF-Gerät fehlschlägt, versucht das Framework, es bis zu fünf Mal neu zu starten. Sie können den automatischen Neustart deaktivieren, indem Sie DebugModeFlags auf 0x01 festlegen. Weitere Informationen finden Sie unter Registrierungswerte für das Debuggen von WDF-Treibern.
Starten Sie Ihren Computer neu.
Informationen zum Debuggen von UMDF-Treiberproblemen finden Sie unter "Gründe ermitteln, warum der Reflektor den Hostprozess beendet hat" und "Debuggen von Abstürzen bei UMDF-Treibern".
Manuelles Anhängen von WinDbg (Debuggen im Benutzermodus)
Auf dem Zielcomputer können Sie WinDbg manuell an die Instanz von WUDFHost anfügen, die den Treiber hosten soll. Wenn Sie verbinden, gelangen Sie in den Debugger, sodass Sie Haltepunkte in Ihrem Treiber festlegen können.
Da die Treiberinitialisierung kurz nach dem Laden von WUDFHost erfolgt, können Sie den Initialisierungscode nicht rechtzeitig manuell anhängen, um ihn zu debuggen. Legen Sie stattdessen einen Registrierungswert fest, damit der Hostprozess bei der Hostinitialisierung oder treiberladezeit einige Sekunden warten kann. Diese Verzögerung gibt Ihnen Zeit, WinDbg an die richtige Instanz des WUDFHost-Prozesses anzufügen.
Folgen Sie diesen Schritten:
- Legen Sie in der Registrierung auf dem Zielcomputer HostProcessDbgBreakOnStart oder HostProcessDbgBreakOnDriverLoad auf eine bestimmte Anzahl von Sekunden und Neustart fest.
- Öffnen Sie auf dem Zielcomputer WinDbg als Administrator.
- Wählen Sie im Menü "Datei " die Option "An Prozess anhängen" aus. Wählen Sie „Von ausführbarer Datei“ aus, und suchen Sie alle Prozesse, die den Namen WUDFHost.exe tragen (möglicherweise gibt es keine). Wenn es Prozesse mit dem Namen WUDFHost.exegibt, notieren Sie sich ihre Prozess-IDs für zukünftige Verweise.
- Aktivieren Sie im Geräte-Manager den Treiber.
- Wiederholen Sie Schritt 2, und suchen Sie eine neue Instanz von WUDFHost.exe. Wenn keine neue Instanz von WUDFHost.exeangezeigt wird, wählen Sie "Abbrechen" und dann erneut "An Prozess anhängen" aus. Wenn Sie die neue Instanz von WUDFHost.exegefunden haben, wählen Sie sie aus, und wählen Sie "OK" aus.
Wenn gerätepooling verwendet wird und Sie den Registrierungswert HostProcessDbgBreakOnDriverLoad festlegen, werden möglicherweise Debuggerunterbrechungen angezeigt, da andere Treiber geladen werden. Sie können gerätepooling mithilfe des UMDF-Debugmodus deaktivieren.
Um den Debugmodus zu verwenden, verwenden Sie entweder die F5-Option in Visual Studio, oder legen Sie die Werte "DebugModeFlags " und "DebugModeBinaries " in der Registrierung fest.
Ausführliche Informationen zu UMDF-Registrierungswerten finden Sie unter Registrierungswerte für das Debuggen von WDF-Treibern (KMDF und UMDF).For detailed information about UMDF registry values, see Registry Values for Debugging WDF Drivers (KMDF and UMDF).
Verwenden von WinDbg zum Remotedebugging von einem Hostcomputer (Kernelmodusdebugging)
Richten Sie von einem Remotehost eine Debugsitzung im Kernelmodus ein. Legen Sie dann den aktuellen Prozess auf die Instanz von Wudfhost fest, die Ihren Treiber hostet. Wenn Sie ein Debugging über einen Remote-Kerneldebugger ausführen, legen Sie HostProcessDbgBreakOnDriverStart oder HostProcessDbgBreakOnDriverLoad auf 0x80000000 fest, um kein Timeout anzugeben, aber in den Kerneldebugger einzubrechen.
Führen Sie die folgenden Schritte aus:
Pooling deaktivieren. Aktivieren Sie DebugModeFlags , und listen Sie Ihren Treiber in DebugModeBinaries auf.
Wenn Ihr Treiber UMDF 1.11 oder höher verwendet, ist HostFailKdDebugBreak standardmäßig aktiviert. Überspringen Sie diesen Schritt.
Wenn Ihr Treiber UMDF 1.9 oder früher verwendet, legen Sie HostFailKdDebugBreak auf 1 fest.
Wenn Sie Probleme im Zusammenhang mit Timeouts debuggen, deaktivieren Sie HostProcessDbgBreakOnDriverStart und HostProcessDbgBreakOnDriverLoad. (Wenn HostProcessDbgBreakOnDriverStart oder HostProcessDbgBreakOnDriverLoad ungleich Null ist, deaktiviert das Framework Timeouts, sodass der Reflektor den Host nicht beendet, während ein Benutzermodus-Debugger an den Hostprozess angefügt ist.) Wenn Sie treiberinitialisierungscode debuggen müssen, anstatt diese beiden Werte zu verwenden, versuchen Sie, den folgenden Befehl in WinDbg auszugeben, bevor Der Treiber geladen wird: sxe ld:MyDriver.dll (Unterbrechung beim Modulladevorgang)
Starten Sie den Neustart, wenn Sie Registrierungsänderungen vorgenommen haben.
Je nachdem, welche Auswahl Sie in den vorherigen Schritten getroffen haben, wird der Remote-Kerneldebugger ausgelöst, wenn der Treiber auf dem Ziel geladen oder entladen wird.