Behandeln von UMDF 2.0-Treiberabstürzen
Ab version 2 User-Mode Driver Framework (UMDF) können Sie eine Teilmenge der Debuggererweiterungsbefehle verwenden, die in Wdfkd.dll implementiert sind, um einen UMDF-Treiber zu debuggen. In diesem Artikel werden Befehle beschrieben, die Sie zum Beheben von UMDF-Treiberproblemen verwenden können.
Ermitteln des Absturzes eines UMDF 2.0-Treibers
Wenn der Treiberhostprozess beendet wird, hat Ihr Treiber möglicherweise ein Problem bei einem Rückruf, das dazu führt, dass der Hosttimeoutschwellenwert überschritten wird. In diesem Fall beendet der Reflektor den Treiberhostprozess.
Richten Sie zur Untersuchung zunächst eine Debugsitzung im Kernelmodus ein, wie unter Aktivieren des Debuggens eines UMDF-Treibers beschrieben. Es wird dringend empfohlen, alle Entwicklungen und Tests Ihres UMDF-Treibers mit einem Kerneldebugger durchzuführen, der an das Testsystem angefügt ist, und application verifier (AppVerif.exe) auf WUDFHost.exe zu aktivieren. Verwenden Sie den folgenden Befehl, fügen Sie einen Kerneldebugger an, und starten Sie dann neu.
AppVerif –enable Heaps Exceptions Handles Locks Memory TLS Leak –for WudfHost.exe
Wenn HostFailKdDebugBreak festgelegt ist, wechselt der Reflektor in den Kernelmodusdebugger, wenn der Timeoutschwellenwert überschritten wird. In der Debuggerausgabe werden mehrere Vorschläge für den Einstieg angezeigt, einschließlich links, die Sie auswählen können. Beispiel:
**** Problem detected in UMDF driver "WUDFOsrUsbFx2". !process 0xFFFFE0000495B080 0x1f, !devstack 0xFFFFE000032BFA10, Problem code 3 **** **** Dump UMDF driver image name and stack: !wdfkd.wdfumdevstack 0x000000BEBB49AE20 **** Dump UM Irps for this stack: !wdfkd.wdfumirps 0x000000BEBB49AE20 **** Dump UMDF trace log: !wmitrace.logdump WUDFTrace **** Helpful UMDF debugger extension commands: !wdfkd.wdfhelp **** Note that driver host process may get terminated if you go past this break, making it difficult to debug the problem!
Verwenden Sie !analyze , um Informationen zum Fehler und andere UMDF-Erweiterungsbefehle anzuzeigen, die Sie ausprobieren können. Dieser Befehl kann bei UMDF-Überprüfungsfehlern oder nicht behandelten UMDF-Ausnahmen helfen. Sie können es zum Live-Kerneldebuggen oder Debuggen von Absturzabbilddateien von Benutzern aus %ProgramData%\Microsoft\WDF verwenden.
Verwenden Sie !process 0 0x1f wudfhost.exe , um alle Wudfhost.exe Treiberhostprozesse, einschließlich Threadstapelinformationen, auflisten.
Sie können auch !wdfkd.wdfumtriage und !wdfkd.wdfldr verwenden, um alle Treiber anzuzeigen, die derzeit an WDF gebunden sind. Wenn Sie den Imagenamen eines UMDF-Treibers auswählen, zeigt der Debugger die Adresse des Hostingprozesses an. Anschließend können Sie die Prozessadresse auswählen, um spezifische Informationen für diesen Prozess anzuzeigen.
Verwenden Sie ggf . .process /r /p Process , um den Prozesskontext in den Wudfhost-Prozess zu wechseln, der Ihren Treiber hostt. Verwenden Sie .cache forcedecodeuser und lmu , um zu überprüfen, ob Ihr Treiber im aktuellen Prozess gehostet wird.
Untersuchen Sie Threadaufrufstapel (! Threadadresse), um zu ermitteln, ob ein Timeback eines Treiberrückrufs zu einem Timeout kommt. Sehen Sie sich die Anzahl der Teilstriche für die Threads an. In Windows 8.1 ist das Timeout des Reflektors nach einer Minute.
Verwenden Sie !wdfkd.wdfdriverinfo MyDriver.dll 0x10 , um die Gerätestruktur ausführlich anzuzeigen. Wählen Sie dann !wdfdevice aus. Dieser Befehl zeigt detaillierte Informationen zum Status von Energie, Energierichtlinie und Plug & Play (PnP) an.
Verwenden Sie !wdfkd.wdfumirps , um nach ausstehenden IRPs zu suchen.
Verwenden Sie !wdfkd.wdfdevicequeues, um die status der Treiberwarteschlangen zu überprüfen.
In einer Debugsitzung im Kernelmodus können Sie !wmitrace.logdump WudfTrace verwenden, um das Ablaufverfolgungsprotokoll anzuzeigen.
Anzeigen des UMDF 2.0-IFR-Protokolls
In einer Debugsitzung im Kernelmodus können Sie den Erweiterungsbefehl !wdfkd.wdflogdump verwenden, um die Protokolldatensätze von Windows Driver Frameworks (WDF) In-Flight Recorder (IFR) anzuzeigen, sofern verfügbar.
Suchen nach Speicherabbilddateien
Informationen zum Suchen nach Abbilddateien im Benutzermodus finden Sie unter Ermitteln, warum der Reflektor den Hostprozess beendet hat . Informationen zum Festlegen des Registrierungswerts LogMinidumpType zum Angeben des Typs der in der Minidump-Datei gespeicherten Informationen finden Sie unter Verwenden der WPP-Softwareablaufverfolgung in UMDF-Treibern.