WDF_VIOLATION 参数
参数 1 表示错误检查的具体错误代码。
参数 4 保留。
Parameter 1 | 参数 2 | 参数 3 | 错误原因 |
---|---|---|---|
0x1 | 指向 WDF_POWER_ROUTINE_TIMED_OUT_DATA 结构的指针 | 保留 | 基于框架的驱动程序在电源操作期间超时。这通常意味着设备堆栈没有设置 DO_POWER_PAGABLE 位,并且在分页设备堆栈断电后驱动程序尝试了可分页操作。 |
0x2 | 保留 | 保留 | 正在尝试获取当前持有的锁。 |
0x3 | WDFREQUEST 句柄 | 保留在两个缓冲区上的未完成引用数 | Windows 驱动程序框架验证程序遇到致命错误。特别是,I/O 请求已完成,但框架请求对象无法删除,因为存在对输入缓冲区、输出缓冲区或者两者的未完成引用。 |
0x4 | 保留 | 来电地址 | NULL 参数被传递给需要非 NULL 值的函数。 |
0x5 | 在 | 保留 中传递的句柄值 | 错误类型的框架对象句柄被传递给框架对象方法。 |
0x6 | 见下表。 | ||
0x7 | 框架对象的句柄 | 保留 | 驱动程序试图通过调用 WdfObjectDereference 来删除句柄而不是调用 WdfObjectDelete 来错误地删除框架对象。 |
0x8 | DMA 事务对象的句柄 | 保留对 DMA 事务对象 | 进行了操作,而该对象未处于正确状态。 |
0x9 | 目前未使用。 | ||
0xA | 指向 WDF_QUEUE_FATAL_ERROR_DATA 结构的指针已 | 保留 | 处理当前在队列中的请求时发生致命错误。 |
0xB | 见下表。 | ||
0xC | WDFDEVICE 句柄 | 指向新 PnP IRP 的指针 | 当驱动程序正在处理另一个状态改变 PnP IRP 时,一个新的状态改变 PnP IRP 到达。 |
0xD | WDFDEVICE 句柄 | 指向电源 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 | 错误原因 |
---|---|---|
0x1 | IRP 的地址 | 没有更多的 I/O 堆栈位置可用于格式化基础 IRP。 |
0x2 | WDF 请求句柄值 | 尝试格式化不包含 IRP 的框架请求对象。 |
0x3 | WDF 请求句柄值 | 驱动程序尝试发送已发送到 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 value | 0x0 | 的原因传递给 WdfObjectAcquireLock 或者 WdfObjectReleaseLock 的句柄表示不支持同步锁的对象。 |
A WDF spin lock handle | 0x1 | 自旋锁正在被未获取它的线程释放。 |
解决方法
!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)。
原因
有关原因的解释,请参阅参数部分中每个代码的说明。
WDF_VIOLATION 错误检查的值为 0x0000010D。
这表明内核模式驱动程序框架 (KMDF) 检测到 Windows 在基于框架的驱动程序中发现错误。