Ermitteln, ob ein Treiber Frameworkobjekte ausläuft
In diesem Thema wird beschrieben, wie Sie Speicherverluste des Treibers ermitteln können, die durch unveröffentlichte Verweise verursacht werden. Es gilt für User-Mode Treiberframework (UMDF) Version 1 und 2.
UMDF 1
In UMDF Version 1 kann ein Aufrufstapel zu einem Speicherverlust führen, wenn jeder Aufruf von AddRef keinen übereinstimmenden Release-Aufruf aufweist.
Führen Sie die folgenden Schritte aus, um zu testen, ob Ihr UMDF-Treiber der Version 1 Frameworkobjekte ausläuft:
Verwenden Sie die WDF Verifier-Steuerelementanwendung , um die gewünschten Überprüfungsoptionen festzulegen. Legen Sie bei regelmäßigen Tests zunächst TrackObjects und nicht TrackRefCounts fest.
Wenn der Treiber entladen wird, tritt die Codeüberprüfung des Frameworks in den Debugger ein, wenn ein Frameworkobjekt nicht gelöscht wurde, und Sie werden aufgefordert, die Debuggererweiterung !wudfdumpobjects zu verwenden. Diese Debuggererweiterung zeigt eine Liste der nicht gelöschten Objekte an.
Wenn die Codeüberprüfung angibt, dass der Treiber Frameworkobjekte ausläuft, verwenden Sie die Steuerelementanwendung, um die Option TrackRefCounts festzulegen.
Wenn diese Option festgelegt ist, verfolgt der Prüfer verweise auf Frameworkobjekte, während der Treiber ausgeführt wird. Sie können die Debuggererweiterung !wudfrefhist verwenden, um jeden Aufrufstapel (Satz von Funktionsaufrufen) anzuzeigen, der die Verweisanzahl eines Objekts erhöht oder verringert. Wenn Sie die AddRef- und Release-Aufrufe in diesen Aufrufstapeln untersuchen, sollten Sie einen Stapel finden, der die Verweisanzahl des Objekts nicht verringert und somit das Leck verursacht.
Informationen zu zusätzlichen Überprüfungsoptionen finden Sie unter Verwenden der UMDF-Überprüfung.
Informationen zum Löschen von Frameworkobjekten finden Sie unter Verwalten der Lebensdauer von Objekten.
UMDF 2
In UMDF Version 2 sind unveröffentliche Verweise selten, können aber aufgrund von Aufrufkonflikten auftreten, wenn WdfObjectReference und WdfObjectDereference verwendet werden.
Führen Sie das folgende Verfahren aus, um zu testen, ob Ihr UMDF-Treiber der Version 2 Frameworkobjekte verloren hat:
Führen Sie die unter Bewährten Methoden beschriebenen Schritte aus, um Ihren Computer für das UMDF-Debuggen zu konfigurieren.
Um die Tagnachverfolgung zu verwenden, aktivieren Sie sowohl die UMDF-Überprüfung als auch die Nachverfolgung in der Registrierung. Beide Einstellungen werden im Unterschlüssel Parameters\Wdf des Treibers HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services\<Treibernamens> gespeichert.
Um die UMDF-Überprüfung zu aktivieren, legen Sie einen nonzero-Wert für VerifierOn fest.
Um die Handle-Nachverfolgung zu aktivieren, legen Sie den Wert von TrackHandles auf den Namen eines oder mehrerer Objekttypen fest, oder geben Sie ein Sternchen (*) an, um alle Objekttypen nachzuverfolgen.
Sie können die UMDF-Überprüfungseinstellungen auch mithilfe der WdfVerifier.exe-Anwendung ändern.
Starten Sie neu, stellen Sie eine Debuggerverbindung her, und verwenden Sie dann die folgenden Debuggerbefehle:
- !wdfkd.wdfdriverinfo 0x10 zum Anzeigen der Handlehierarchie
- !wdfkd.wdftagtracker zum Anzeigen von Taginformationen
Wenn UMDF Verifier aktiviert ist, werden Speicherverluste beim Entladen des Treibers erkannt, genau wie in KMDF.
Weitere Informationen zur Verwendung von Verweisanzahlen in KMDF- und UMDF-Treibern der Version 2 finden Sie unter Framework-Objektlebenszyklus.