WDF_VIOLATION 参数

参数 1 表示错误检查的具体错误代码。
参数 4 保留。

Parameter 1参数 2参数 3错误原因
0x1指向 WDF_POWER_ROUTINE_TIMED_OUT_DATA 结构的指针保留基于框架的驱动程序在电源操作期间超时。这通常意味着设备堆栈没有设置 DO_POWER_PAGABLE 位,并且在分页设备堆栈断电后驱动程序尝试了可分页操作。
0x2保留保留正在尝试获取当前持有的锁。
0x3WDFREQUEST 句柄保留在两个缓冲区上的未完成引用数Windows 驱动程序框架验证程序遇到致命错误。特别是,I/O 请求已完成,但框架请求对象无法删除,因为存在对输入缓冲区、输出缓冲区或者两者的未完成引用。
0x4保留来电地址NULL 参数被传递给需要非 NULL 值的函数。
0x5保留 中传递的句柄值错误类型的框架对象句柄被传递给框架对象方法。
0x6见下表。
0x7框架对象的句柄保留驱动程序试图通过调用 WdfObjectDereference 来删除句柄而不是调用 WdfObjectDelete 来错误地删除框架对象。
0x8DMA 事务对象的句柄保留对 DMA 事务对象进行了操作,而该对象未处于正确状态。
0x9目前未使用。
0xA指向 WDF_QUEUE_FATAL_ERROR_DATA 结构的指针已保留处理当前在队列中的请求时发生致命错误。
0xB见下表。
0xCWDFDEVICE 句柄指向新 PnP IRP 的指针当驱动程序正在处理另一个状态改变 PnP IRP 时,一个新的状态改变 PnP IRP 到达。
0xDWDFDEVICE 句柄指向电源 IRP 的指针设备的电源策略所有者收到了它没有请求的电源 IRP。可能有多个电源策略所有者,但只允许一个。KMDF 驱动程序可以通过调用 WdfDeviceInitSetPowerPolicyOwnership 来更改电源策略所有权。
0xE调用事件回调函数的 IRQL。事件回调函数返回的 IRQL。事件回调函数没有以调用它的同一个 IRQL 返回。回调函数直接或者间接更改了 IRQL(例如,通过获取自旋锁,将 IRQL 提升到 DISPATCH_LEVEL,但不释放自旋锁)。
0xF事件回调函数的地址。保留事件回调函数进入临界区,但返回前未离开临界区。

参数 1 等于 0x6

如果参数 1 等于 0x6,则在处理 WDF 请求时发生了致命错误。
在这种情况下,参数 2 进一步指定已发生的致命错误的类型,如枚举 WDF_REQUEST_FATAL_ERROR 所定义。

Parameter 2参数 3错误原因
0x1IRP 的地址没有更多的 I/O 堆栈位置可用于格式化基础 IRP。
0x2WDF 请求句柄值尝试格式化不包含 IRP 的框架请求对象。
0x3WDF 请求句柄值驱动程序尝试发送已发送到 I/O 目标的框架请求。
0x4指向 WDR_REQUEST_FATAL_ERROR_INFORMATION_LENGTH_MISMATCH_DATA 结构的指针,该结构包含指向 IRP 的指针、WDF 请求句柄值、IRP 主函数和尝试写入的字节数驱动程序已完成框架请求,但已将更多字节写入输出缓冲区比 IRP 中指定的要多。

参数 1 等于 0xB

如果参数 1 等于 0xB,则尝试获取或者释放锁是无效的。
在这种情况下,参数 3 进一步指定了已发生的错误。

Parameter 2参数 3错误
The handle value0x0的原因传递给 WdfObjectAcquireLock 或者 WdfObjectReleaseLock 的句柄表示不支持同步锁的对象。
A WDF spin lock handle0x1自旋锁正在被未获取它的线程释放。

解决方法

!analyze 调试扩展显示有关错误检查的信息,有助于收集信息,例如故障代码模块。

详细步骤查看我们的教程 在windows 中使用WinDBG 调试dmp文件

通常,WDF 转储文件将提供有关导致此错误检查的驱动程序的更多信息。
使用此命令查看日志文件。

kd> !wdfkd.wdflogdump <WDF_Driver_Name>

如果参数 1 等于 0x2 ,则检查调用者的堆栈以确定有问题的锁。

如果参数 1 等于 0x3 ,驱动程序的内核模式驱动程序框架错误日志将包括有关未完成引用的详细信息。

如果参数 1 等于 0x4 ,则使用 ln 调试器命令并将参数 3 的值作为其参数来确定哪个函数需要非 NULL 参数。

如果参数 1 等于 0x7 ,则使用 !wdfkd.wdfhandle 参数 2 扩展命令来确定句柄类型。

如果参数 1 等于 0xA ,则 WDF_QUEUE_FATAL_ERROR_DATA 结构将指示有问题的请求或者队列句柄。
如果可用,它还将指示 NTSTATUS(如果不是 STATUS_SUCCESS)。

https://onitroad.com 更多教程

原因

有关原因的解释,请参阅参数部分中每个代码的说明。

Windows 蓝屏代码 0x10D:WDF_VIOLATION

WDF_VIOLATION 错误检查的值为 0x0000010D。
这表明内核模式驱动程序框架 (KMDF) 检测到 Windows 在基于框架的驱动程序中发现错误。

日期:2020-09-17 00:15:34 来源:oir作者:oir