Ermitteln, warum ein UMDF-Treiber zu viel Arbeitsspeicher verbraucht
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 in Verbindung mit einem UMDF-Treiber (User-Mode Driver Framework, Version 1) verwenden können, um zu ermitteln, warum ein UMDF-Treiber übermäßig viel Arbeitsspeicher verbraucht.
Ab UMDF Version 2 sollten Sie stattdessen die Wdfkd.dll Debuggererweiterungen verwenden. Weitere Informationen finden Sie unter Windows Driver Framework Extensions (Wdfkd.dll).
Führen Sie die folgenden Schritte aus, um die Speicherauslastung zu untersuchen:
Zeigen Sie das ausstehende Objekt in der Objektstruktur an, indem Sie die UMDF-Debuggererweiterung !wudfext.wudfobject verwenden.
Die Erweiterung !wudfext.wudfobject zeigt Informationen zu einem WDF-Objekt an, das seine übergeordneten und untergeordneten Beziehungen enthält. Wenn Sie Bit 0 des Flags-Parameters auf 1 (0x01) festlegen, führt !wudfext.wudfobject ein rekursives Dump der Objektstruktur aus, die am übergebenen Objekt verwurzelt ist. Verwenden Sie den folgenden Beispielbefehl, um die vollständige Objektstruktur anzuzeigen:
!wudfext.wudfobject <IWDFDriver*> 1
Ermitteln Sie, ob mehr ausstehende Objekte als erwartet angezeigt werden.
Ihr Treiber kann diese Objekte möglicherweise auslaufen (weitere Informationen zum Kompromittieren von WDF-Objekten finden Sie unter Ermitteln, wenn ein Treiber Framework-Objekte ausgibt).
Diese Objekte befinden sich möglicherweise in der Objektstruktur und würden daher schließlich freigegeben. Sie werden jedoch unnötigerweise angesammelt. Diese Objekte erfordern möglicherweise Folgendes:
- Korrekturen der übergeordneten Objekte.
- Explizites Löschen mithilfe der IWDFObject::D eleteWdfObject-Methode .