Share via


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.