Bug Check 0x10D: WDF_VIOLATION

The WDF_VIOLATION bug check has a value of 0x0000010D. This indicates that Kernel-Mode Driver Framework (KMDF) detected that Windows found an error in a framework-based driver.

Important

This article is for programmers. If you're a customer who has received a blue screen error code while using your computer, see Troubleshoot blue screen errors.

WDF_VIOLATION Parameters

Parameter 1 indicates the specific error code of the bug check. Parameter 4 is reserved.

Parameter 1 Parameter 2 Parameter 3 Cause of Error

0x1

Pointer to a WDF_POWER_ROUTINE_TIMED_OUT_DATA structure

Reserved

A framework-based driver has timed out during a power operation. This typically means that the device stack did not set the DO_POWER_PAGABLE bit and a driver attempted a pageable operation after the paging device stack was powered down.

0x2

Reserved

Reserved

An attempt is being made to acquire a lock that is currently being held.

0x3

WDFREQUEST handle

The number of outstanding references that remain on both buffers

Windows Driver Framework Verifier has encountered a fatal error. In particular, an I/O request was completed, but a framework request object cannot be deleted because there are outstanding references to the input buffer, the output buffer, or both.

0x4

Reserved

The caller's address

A NULL parameter was passed to a function that required a non-NULL value.

0x5

The handle value passed in

Reserved

A framework object handle of the incorrect type was passed to a framework object method.

0x6

See table below.

0x7

The handle of the framework object

Reserved

A driver attempted to delete a framework object incorrectly by calling WdfObjectDereference to delete a handle instead of calling WdfObjectDelete.

0x8

The handle of the DMA transaction object

Reserved

An operation occurred on a DMA transaction object while it was not in the correct state.

0x9

Currently unused.

0xA

A pointer to a WDF_QUEUE_FATAL_ERROR_DATA structure

Reserved

A fatal error has occurred while processing a request that is currently in the queue.

0xB

See table below.

0xC

WDFDEVICE handle

Pointer to new PnP IRP

A new state-changing PnP IRP arrived while the driver was processing another state-changing PnP IRP.

0xD

WDFDEVICE handle

Pointer to power IRP

A device's power policy owner received a power IRP that it did not request. There might be multiple power policy owners, but only one is allowed. A KMDF driver can change power policy ownership by calling WdfDeviceInitSetPowerPolicyOwnership.

0xE

IRQL at which the event callback function was called.

IRQL at which the event callback function returned.

An event callback function did not return at the same IRQL at which it was called. The callback function changed the IRQL directly or indirectly (for example, by acquiring a spinlock, which raises IRQL to DISPATCH_LEVEL, but not releasing the spinlock).

0xF

Address of an event callback function.

Reserved

An event callback function entered a critical region, but it did not leave the critical region before returning.

Parameter 1 is equal to 0x6

If Parameter 1 is equal to 0x6, then a fatal error was made in handling a WDF request. In this case, Parameter 2 further specifies the type of fatal error that has been made, as defined by the enumeration WDF_REQUEST_FATAL_ERROR.

Parameter 2 Parameter 3 Cause of Error

0x1

The address of the IRP

No more I/O stack locations are available to format the underlying IRP.

0x2

The WDF request handle value

An attempt was made to format a framework request object that did not contain an IRP.

0x3

The WDF request handle value

The driver attempted to send a framework request that has already been sent to an I/O target.

0x4

A pointer to a WDR_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA structure that contains a pointer to the IRP, a WDF request handle value, an IRP major function, and the number of bytes attempted to be written

The driver has completed a framework request, but has written more bytes to the output buffer than are specified in the IRP.

Parameter 1 is equal to 0xB

If Parameter 1 is equal to 0xB, then an attempt to acquire or release a lock was invalid. In this case, Parameter 3 further specifies the error that has been made.

Parameter 2 Parameter 3 Cause of Error

The handle value

0x0

A handle passed to WdfObjectAcquireLock or WdfObjectReleaseLock represents an object that does not support synchronization locks.

A WDF spin lock handle

0x1

The spin lock is being released by a thread that did not acquire it.

Cause

See the description of each code in the Parameters section for an explanation of the cause.

Resolution

The !analyze debug extension displays information about the bug check and can be helpful in gathering information, such as the faulting code module.

Typically, the WDF dump file will yield further information on the driver that caused this bug check. Use this command to look at the log file.

kd> !wdfkd.wdflogdump <WDF_Driver_Name>

If Parameter 1 is equal to 0x2, examine the caller's stack to determine the lock in question.

If Parameter 1 is equal to 0x3, the driver's Kernel-Mode Driver Framework error log will include details about the outstanding references.

If Parameter 1 is equal to 0x4, use the ln debugger command with the value of Parameter 3 as its argument to determine which function requires a non-NULL parameter.

If Parameter 1 is equal to 0x7, use the !wdfkd.wdfhandleParameter 2 extension command to determine the handle type.

If Parameter 1 is equal to 0xA, then the WDF_QUEUE_FATAL_ERROR_DATA structure will indicate either the problematic request or the queue handle. It will also indicate the NTSTATUS, if not STATUS_SUCCESS, when available.