Anzeigen von UMDF-Objekten
Warnung
UMDF 2 ist die neueste Version von UMDF und ersetzt UMDF 1. Alle neuen UMDF-Treiber sollten mit UMDF 2 geschrieben werden. UMDF 1 werden keine neuen Features hinzugefügt, und die Unterstützung für UMDF 1 in neueren Versionen von Windows 10 ist eingeschränkt. Universelle Windows-Treiber müssen UMDF 2 verwenden.
Die archivierten UMDF 1-Beispiele finden Sie im Treiberbeispielupdate Windows 11, Version 22H2 – Mai 2022.
Weitere Informationen finden Sie unter Erste Schritte mit UMDF.
In diesem Thema wird beschrieben, wie Sie die Wudfext.dll-Debuggererweiterungen verwenden können, um Informationen zu Objekten anzuzeigen, die von einem Umdf-Treiber (User-Mode Driver Framework, Version 1) verwendet werden.
Ab UMDF Version 2 sollten Sie stattdessen die Wdfkd.dll Debuggererweiterungen verwenden. Weitere Informationen finden Sie unter Windows Driver Framework Extensions (Wdfkd.dll).
Sie können die folgenden Schritte ausführen, um Informationen zu UMDF-Objekten der Version 1 anzuzeigen:
Verwenden Sie eine der folgenden UMDF-Debuggererweiterungen, um Gerätestapel anzuzeigen, die sich im Hostprozess befinden:
!wudfext.umdevstacks
!wudfext.umdevstack , wie im folgenden Beispiel gezeigt:
!wudfext.umdevstack <dev-stack-addr>
Die Informationen umfassen Treiberobjekte und Geräteobjekte für jeden Treiber. Derzeit lässt UMDF nur einen Gerätestapel in einem Hostprozess zu, sodass es keinen Unterschied zwischen den Ausgaben dieser beiden Erweiterungen gibt.
Zeigen Sie die vollständige Objektstruktur mit der UMDF-Debuggererweiterung !wudfext.wudfobject an, wie im folgenden Beispiel gezeigt:
!wudfext.wudfobject <IWDFDriver*> 1
Verwenden Sie die UMDF-Debuggererweiterung !wudfext.wudfdevice, wie im folgenden Beispiel gezeigt, um den Plug & Play (PnP) und den Energieverwaltungsstatus des Geräts zu bestimmen:
!wudfext.wudfdevice <IWDFDevice*>
Führen Sie die folgenden Schritte aus, um die Warteschlangen zu ermitteln, die dem Gerät zugeordnet sind:
Verwenden Sie die UMDF-Debuggererweiterung !wudfext.wudfdevicequeues , um die Warteschlangen anzuzeigen, die dem Gerät zugeordnet sind. Diese Erweiterung zeigt Warteschlangeneigenschaften, Warteschlangenstatus und treibereigene Anforderungen an.
Verwenden Sie die UMDF-Debuggererweiterung !wudfext.wudfqueue , wie im folgenden Beispiel gezeigt, um Informationen zu jeder Warteschlange abzurufen:
!wudfext.wudfqueue <IWDFIoQueue*>
Verwenden Sie die UMDF-Debuggererweiterung !wudfext.wudfrequest , um Informationen zu einer bestimmten Anforderung abzurufen. Diese Informationen enthalten das zugrunde liegende E/A-Anforderungspaket (I/O Request Packet, IRP) für den Benutzermodus. Anhand der IRP-Informationen im Benutzermodus können Sie ermitteln, wo die Anforderung derzeit im Stapel verarbeitet wird. Sie können auch die UMDF-Debuggererweiterung !wudfext.umirp verwenden, um diese IRP-Informationen im Benutzermodus abzurufen.
Bestimmen Sie alle E/A-Ziele wie folgt:
Verwenden der UMDF-Debuggererweiterung !wudfext.wudfobject zum Anzeigen der untergeordneten Objekte des Geräteobjekts. E/A-Zielobjekte sind untergeordnete Objekte des Geräteobjekts.
Verwenden der UMDF-Debuggererweiterung !wudfext.wudfiotarget , wie im folgenden Beispiel gezeigt, um Informationen zu jedem E/A-Zielobjekt anzuzeigen:
!wudfext.wudfiotarget <IWDFTarget*>
Diese Erweiterung zeigt den Status des Ziels und die Liste der gesendeten Anforderungen an.
Es gibt derzeit keine UMDF-Debuggererweiterung, mit der Sie alle E/A-Ziele anzeigen können.
Verwenden Sie die folgenden UMDF-Debuggererweiterungen, um Informationen zu Dateiobjekten anzuzeigen:
!wudfext.wudfrequest oder !wudfext.umirp
Verwenden Sie die Debuggererweiterung !wudfext.wudfrequest oder !wudfext.umirp , um Dateien anzuzeigen, die untergeordnete Objekte von Geräteobjekten sind.!wudfext.wudffile
Verwenden Sie die UMDF-Debuggererweiterung !wudfext.wudffile , wie im folgenden Beispiel gezeigt, um Informationen zu einer Frameworkdatei anzuzeigen:!wudfext.wudffile <IWDFFile*>
!wudfext.umfile
Verwenden Sie die UMDF-Debuggererweiterung !wudfext.umfile wie im folgenden Beispiel gezeigt, um Informationen zu einer UMDF-Intra-Stack-Datei anzuzeigen (d. h. ein Dateiobjekt, das ein Treiber im Stapel erstellt hat, im Gegensatz zu einem Dateiobjekt, das von einer Anwendung oder einem Treiber in einem anderen Stapel erstellt wurde):!wudfext.umfile <addr>
In einigen Fällen ist möglicherweise keine entsprechende Frameworkdatei vorhanden, und IRP-Informationen im Benutzermodus können eine UMDF-Intra-Stack-Datei enthalten.
Informationen, die in !wudfext.umfile angezeigt werden, umfassen alle IRPs, die in die Warteschlange der UMDF-Intra-Stack-Datei eingereiht werden. Nur vom Treiber erstellte Dateien verfolgen Benutzermodus-IRPs, die in die Warteschlange dieser Dateien eingereiht werden. Bei von der Anwendung erstellten Dateien verfolgt der E/A-Manager die Kernelmodus-IRPs nach.
!wudfext.umdevstacks und !wudfext.umdevstack
Verwenden Sie die Ausgabe der UMDF-Debuggererweiterungen !wudfext.umdevstacks und !wudfext.umdevstack , um ausstehende UMDF-Intra-Stack-Dateien anzuzeigen, die treiberseitig erstellten Dateien entsprechen.