Fehlerüberprüfung 0x10D: WDF_VIOLATION
Die WDF_VIOLATION Fehlerüberprüfung hat den Wert 0x0000010D. Dies gibt an, dass Kernel-Mode Driver Framework (KMDF) erkannt hat, dass Windows einen Fehler in einem frameworkbasierten Treiber gefunden hat.
Wichtig
Dieser Artikel richtet sich an Programmierer. Wenn Sie ein Kunde sind, der während der Verwendung Ihres Computers einen Bluescreen-Fehlercode erhalten hat, finden Sie weitere Informationen unter Behandeln von Bluescreenfehlern.
WDF_VIOLATION Parameter
Parameter 1 gibt den spezifischen Fehlercode der Fehlerprüfung an. Parameter 4 ist reserviert.
Parameter 1 | Parameter 2 | Parameter 3 | Fehlerursache |
---|---|---|---|
0x1 |
Zeiger auf eine WDF_POWER_ROUTINE_TIMED_OUT_DATA-Struktur |
Reserviert |
Bei einem frameworkbasierten Treiber ist ein Timeout während eines Strombetriebs aufgetreten. Dies bedeutet in der Regel, dass der Gerätestapel das DO_POWER_PAGABLE Bit nicht festgelegt hat und ein Treiber versucht hat, nach dem Herunterfahren des Auslagerungsgerätestapels einen auslagerungsfähigen Vorgang durchzuführen. |
0x2 |
Reserviert |
Reserviert |
Es wird versucht, eine Sperre zu erhalten, die derzeit gehalten wird. |
0x3 |
WDFREQUEST-Handle |
Die Anzahl der ausstehenden Verweise, die auf beiden Puffern verbleiben |
Windows Driver Framework Verifier ist ein schwerwiegender Fehler aufgetreten. Insbesondere wurde eine E/A-Anforderung abgeschlossen, aber ein Frameworkanforderungsobjekt kann nicht gelöscht werden, da ausstehende Verweise auf den Eingabepuffer, den Ausgabepuffer oder beides vorhanden sind. |
0x4 |
Reserviert |
Adresse des Anrufers |
Ein NULL-Parameter wurde an eine Funktion übergeben, die einen Wert ohne NULL erforderte. |
0x5 |
Der übergebene Handle-Wert |
Reserviert |
Ein Frameworkobjekthandle des falschen Typs wurde an eine Frameworkobjektmethode übergeben. |
0x6 |
Siehe dazu die folgende Tabelle. |
||
0x7 |
Das Handle des Frameworkobjekts |
Reserviert |
Ein Treiber hat versucht, ein Frameworkobjekt falsch zu löschen, indem er WdfObjectDereference aufgerufen hat , um ein Handle zu löschen, anstatt WdfObjectDelete aufzurufen. |
0x8 |
Das Handle des DMA-Transaktionsobjekts |
Reserviert |
Ein Vorgang ist für ein DMA-Transaktionsobjekt aufgetreten, während es sich nicht im richtigen Zustand befand. |
0x9 |
Derzeit nicht verwendet. |
||
0xA |
Ein Zeiger auf eine WDF_QUEUE_FATAL_ERROR_DATA-Struktur |
Reserviert |
Beim Verarbeiten einer Anforderung, die sich derzeit in der Warteschlange befindet, ist ein schwerwiegender Fehler aufgetreten. |
0xB |
Siehe dazu die folgende Tabelle. |
||
0xC |
WDFDEVICE-Handle |
Zeiger auf neue PnP-IRP |
Ein neues PnP-IRP zur Änderung des Zustands wurde eingetroffen, während der Treiber eine andere zustandsverändernde PnP-IRP verarbeitete. |
0xD |
WDFDEVICE-Handle |
Zeiger auf Energie-IRP |
Der Besitzer der Energierichtlinie eines Geräts hat eine Energie-IRP erhalten, die er nicht anzufordern hat. Es gibt möglicherweise mehrere Besitzer von Energierichtlinien, aber nur einer ist zulässig. Ein KMDF-Treiber kann den Besitz von Energierichtlinien ändern, indem er WdfDeviceInitSetPowerPolicyOwnership aufruft. |
0xE |
IRQL, bei dem die Ereignisrückruffunktion aufgerufen wurde. |
IRQL, bei dem die Ereignisrückruffunktion zurückgegeben wurde. |
Eine Ereignisrückruffunktion wurde nicht bei derselben IRQL zurückgegeben, bei der sie aufgerufen wurde. Die Rückruffunktion hat den IRQL direkt oder indirekt geändert (z. B. durch Den Erwerb eines Spinlocks, der IRQL auf DISPATCH_LEVEL hebt, aber den Spinlock nicht freigibt). |
0xF |
Adresse einer Ereignisrückruffunktion. |
Reserviert |
Eine Ereignisrückruffunktion ist in einen kritischen Bereich eingedrungen, hat den kritischen Bereich jedoch vor der Rückgabe nicht verlassen. |
Parameter 1 entspricht 0x6
Wenn Parameter 1 gleich 0x6 ist, ist bei der Behandlung einer WDF-Anforderung ein schwerwiegender Fehler aufgetreten. In diesem Fall gibt Parameter 2 den Typ des schwerwiegenden Fehlers an, der durch die Enumeration WDF_REQUEST_FATAL_ERROR definiert wurde.
Parameter 2 | Parameter 3 | Fehlerursache |
---|---|---|
0x1 |
Die Adresse des IRP |
Zum Formatieren der zugrunde liegenden IRP sind keine E/A-Stapelspeicherorte mehr verfügbar. |
0x2 |
Der WDF-Anforderungshandlewert |
Es wurde versucht, ein Frameworkanforderungsobjekt zu formatieren, das kein IRP enthielt. |
0x3 |
Der WDF-Anforderungshandlewert |
Der Treiber hat versucht, eine Frameworkanforderung zu senden, die bereits an ein E/A-Ziel gesendet wurde. |
0x4 |
Ein Zeiger auf eine WDR_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA-Struktur, die einen Zeiger auf den IRP, einen WDF-Anforderungshandlewert, eine IRP-Hauptfunktion und die Anzahl der Bytes enthält, die versucht wurden, geschrieben zu werden. |
Der Treiber hat eine Frameworkanforderung abgeschlossen, aber mehr Bytes in den Ausgabepuffer geschrieben, als im IRP angegeben sind. |
Parameter 1 entspricht 0xB
Wenn Parameter 1 gleich 0xB ist, war ein Versuch, eine Sperre abzurufen oder zu lösen, ungültig. In diesem Fall gibt Parameter 3 den aufgetretenen Fehler weiter an.
Parameter 2 | Parameter 3 | Fehlerursache |
---|---|---|
Der Handle-Wert |
0x0 |
Ein an WdfObjectAcquireLock oder WdfObjectReleaseLock übergebenes Handle stellt ein Objekt dar, das keine Synchronisierungssperren unterstützt. |
Ein WDF-Drehsperre-Griff |
0x1 |
Die Spinsperre wird von einem Thread freigegeben, der sie nicht abgerufen hat. |
Ursache
Eine Erläuterung der Ursache finden Sie in der Beschreibung der einzelnen Codes im Abschnitt Parameter.
Lösung
Die Debugerweiterung !analyze zeigt Informationen zur Fehlerüberprüfung an und kann beim Sammeln von Informationen hilfreich sein, z. B. das Modul für fehlerhaften Code.
In der Regel liefert die WDF-Dumpdatei weitere Informationen zu dem Treiber, der diese Fehlerprüfung verursacht hat. Verwenden Sie diesen Befehl, um die Protokolldatei anzuzeigen.
kd> !wdfkd.wdflogdump <WDF_Driver_Name>
Wenn Parameter 1 gleich 0x2 ist, untersuchen Sie den Stapel des Aufrufers, um die betreffende Sperre zu bestimmen.
Wenn Parameter 1 gleich 0x3 ist, enthält das Kernel-Mode Driver Framework-Fehlerprotokoll Details zu den ausstehenden Verweisen.
Wenn Parameter 1 gleich 0x4 ist, verwenden Sie den ln-Debuggerbefehl mit dem Wert von Parameter 3 als Argument, um zu bestimmen, welche Funktion einen Nicht-NULL-Parameter erfordert.
Wenn Parameter 1 gleich 0x7 ist, verwenden Sie den Erweiterungsbefehl !wdfkd.wdfhandleParameter 2 , um den Handletyp zu bestimmen.
Wenn Parameter 1 gleich 0xA ist, gibt die WDF_QUEUE_FATAL_ERROR_DATA-Struktur entweder die problematische Anforderung oder das Warteschlangenhandle an. Er gibt auch den NTSTATUS an, falls nicht STATUS_SUCCESS, sofern verfügbar.