备注
_POOL_TYPE 代码在 Ntddk.h 中枚举。
特别是,0(零)表示非分页池,1(一)表示分页池。
(Windows 8 和更高版本的 Windows)如果 DDI 合规性检查导致错误检查,请对驱动程序源代码运行静态驱动程序验证程序并指定导致错误检查的 DDI 合规性规则(由参数 1 值标识)。
静态驱动程序验证程序可以在源代码中找到问题的原因。
DRIVER_VERIFIER_DETECTED_VIOLATION 错误检查的值为 0x000000C4.
这是 Driver Verifier 发现的致命错误的一般错误检查代码。
有关更多信息,请参阅在启用驱动程序验证程序时处理错误检查。
原因
有关原因说明,请参阅参数部分中每个代码的说明。
可以使用 !analyze -v 扩展获得更多信息。
on It Road.com
解决方法
仅当 Driver Verifier 被指示监控一个或者多个驱动程序时,才会发生此错误检查。
如果我们不打算使用 Driver Verifier,则应停用它。
我们也可以考虑删除导致此问题的驱动程序。
如果我们是驱动程序编写者,请使用通过此错误检查获得的信息来修复代码中的错误。
有关驱动程序验证程序的完整详细信息,请参阅驱动程序验证程序。
DRIVER_VERIFIER_DETECTED_VIOLATION 参数
参数 1 标识违规类型。
其余参数的含义随参数1的值而变化。
参数值说明如下表。
注意 如果我们在查看此表中的所有 5 列时遇到问题,请尝试以下操作:
- 将浏览器窗口扩展到全尺寸。
- 将光标置于表格中并使用箭头键左右滚动。
0x00 到 0x70
参数 1 | 参数 2 | 参数 3 | 参数 4 | 错误原因 |
---|---|---|---|---|
0x00 | 当前 IRQL | 池类型 | 字节数 | 驱动程序请求零字节池分配。 |
0x01 | 当前 IRQL | 池类型 | 分配大小,以字节为单位 | 驱动程序尝试使用 IRQL > APC_LEVEL 分配分页内存。 |
0x02 | 当前 IRQL | 池类型 | 分配大小,以字节为单位 | 驱动程序尝试使用 IRQL > DISPATCH_LEVEL 分配非分页内存。 |
0x03 | 调用者试图分配多于一页的 must success 池,但一页是此 API 允许的最大值。 | |||
0x10 | Bad Address | 0 | 0 | 驱动程序试图释放未从分配调用返回的地址。 |
0x11 | 当前 IRQL | 池类型 池 | 地址 | 驱动程序尝试使用 IRQL > APC_LEVEL 释放分页池。 |
0x12 | 当前 IRQL | 池类型 池 | 地址 | 驱动程序尝试使用 IRQL > DISPATCH_LEVEL 释放非分页池。 |
0x13 or 0x14 | 保留 | 指向池头 | 池头内容的指针 | 驱动程序试图释放已经释放的内存池。 |
0x15 | 定时器入口 | 池类型 | 池地址被释放 | 调用者试图释放的池包含一个活动计时器。 |
0x16 | 保留 | 池地址 | 0 | 驱动程序试图在错误地址释放池,或者驱动程序将无效参数传递给内存例程。 |
0X17 | 资源条目 | 池类型 | 正在释放 | 的池地址调用者试图释放的池包含一个活动的 ERESOURCE。 |
0x30 | 当前 IRQL | 请求的 IRQL | 0 | 驱动程序将无效参数传递给 KeRaiseIrql。(参数或者是低于当前 IRQL 的值,或者是高于 HIGH_LEVEL 的值。这可能是使用未初始化参数的结果。) |
0x31 | 当前 IRQL | 请求的 IRQL | 0:新的 IRQL 是坏的 1:新的 IRQL 在内部无效DPC例程 | 驱动程序将无效参数传递给 KeLowerIrql。(该参数或者是高于当前 IRQL 的值,或者是高于 HIGH_LEVEL 的值。这可能是使用未初始化参数的结果。) |
0x32 | 当前 IRQL | 自旋锁地址 | 0 | 驱动程序在 DISPATCH_LEVEL 以外的 IRQL 上调用 KeReleaseSpinLock。(这可能是由于自旋锁的双重释放。) |
0x33 | 当前 IRQL | 快速互斥地址 | 0 | 驱动程序尝试使用 IRQL > APC_LEVEL 获取快速互斥。 |
0x34 | 当前 IRQL | 线程 APC 禁用计数 | 快速互斥地址 | 驱动程序试图以 APC_LEVEL 以外的 IRQL 释放快速互斥。 |
0x35 | 当前 IRQL | 自旋锁地址 | 旧 IRQL | 内核释放了一个 IRQL 不等于 DISPATCH_LEVEL 的自旋锁。 |
0x36 | 当前 IRQL | 自旋锁编号 | 旧 IRQL | 内核释放了一个排队自旋锁,其 IRQL 不等于 DISPATCH_LEVEL。 |
0x37 | 当前 IRQL | 线程 APC 禁用计数 | 资源 | 驱动程序尝试获取资源,但 APC 未被禁用。 |
0x38 | 当前 IRQL | 线程 APC 禁用计数 | 资源 | 驱动程序试图释放资源,但 APC 未被禁用。 |
0x39 | 当前 IRQL | 线程 APC 禁用计数 | 互斥 | 驱动程序试图获取一个互斥“不安全”,其 IRQL 不等于 APC_LEVEL 进入。 |
0x3A | 当前 IRQL | 线程 APC 禁用计数 | 互斥 | 驱动程序试图在进入时释放一个不等于 APC_LEVEL 的 IRQL 的互斥锁“不安全”。 |
0x3B | 当前 | 要等待的IRQL对象 | 超时参数 | KeWaitXxx 例程正在 DISPATCH_LEVEL 或者更高级别调用。 |
0x3C | 传递给例程 | 对象类型 | 0 | 的句柄 驱动程序调用 ObReferenceObjectByHandle 带有错误句柄。 |
0x3D | 0 | 0 | 错误资源 | 的地址驱动程序将错误(未对齐)资源传递给 ExAcquireResourceExclusive。 |
0x3E | 0 | 0 | 0 | 驱动程序为当前不在临界区中的线程调用 KeLeaveCriticalRegion。 |
0x3F | 对象地址 | 新对象引用计数。-1:取消引用情况 1:引用情况 | 0 | 驱动程序将 ObReferenceObject 应用于引用计数为零的对象,或者驱动程序将 ObDereferenceObject 应用于引用计数为零的对象。 |
0x40 | 当前 IRQL | 自旋锁地址 | 0 | 驱动程序调用 KeAcquireSpinLockAtDpcLevel,IRQL < DISPATCH_LEVEL。 |
0x41 | 当前 IRQL | 自旋锁地址 | 0 | 驱动程序调用 KeReleaseSpinLockFromDpcLevel,IRQL < DISPATCH_LEVEL。 |
0x42 | 当前 IRQL | 自旋锁地址 | 0 | 驱动程序使用 IRQL > DISPATCH_LEVEL 调用 KeAcquireSpinLock。 |
0x51 | 分配的基地址 | 超出分配的引用地址 | 收费字节数 | 驱动程序在写入超过分配末尾后尝试释放内存。仅当驱动程序验证程序的池跟踪选项处于活动状态时,才会使用此参数进行错误检查。 |
0x52 | 分配的基地址 | 哈希条目 | 收费字节数 | 驱动程序在写入超过分配末尾后尝试释放内存。仅当驱动程序验证程序的池跟踪选项处于活动状态时,才会使用此参数进行错误检查。 |
0x53 | 分配的基地址 | Header | 保留 | 驱动程序在写入超过分配末尾后尝试释放内存。仅当 Driver Verifier 的 Pool Tracking 选项处于活动状态时,才会使用此参数进行错误检查。 |
0x54 | 分配的基地址 | 保留 | 池散列大小 | 驱动程序在写入超过分配末尾后尝试释放内存。仅当 Driver Verifier 的 Pool Tracking 选项处于活动状态时,才会使用此参数进行错误检查。 |
0x59 | Base address of allocation | Listindex | 保留 | 驱动程序在写入超过分配末尾后尝试释放内存。仅当驱动程序验证程序的池跟踪选项处于活动状态时,才会使用此参数进行错误检查。 |
0x60 | 从分页池分配的字节数 | 从非分页池分配的字节 | 数 未释放的分配总数 | 驱动程序卸载时未先释放其池分配。仅当驱动程序验证程序的池跟踪选项处于活动状态时,才会使用此参数进行错误检查。 |
0x61 | 从分页池 | 分配的字节 | 数从非分页池分配的字节数 未释放的分配总数 | 驱动程序线程正在尝试在卸载驱动程序时分配池内存。仅当驱动程序验证程序的池跟踪选项处于活动状态时,才会使用此参数进行错误检查。 |
0x62 | 驱动程序名称 | 保留 | 未释放的分配总数,包括分页池和非分页池 | 驱动程序在没有首先释放其池分配的情况下卸载。仅当驱动程序验证程序的池跟踪选项处于活动状态时,才会使用此参数进行错误检查。键入 !verifier 3 drivername.sys 以获取有关泄漏导致错误检查的分配的信息。 |
0x6F | MDL 地址 | 被锁定的 | 物理页面 系统中的最高物理页面 | MmProbeAndLockPages 调用不在 PFN 数据库中的页面。这通常是驱动程序调用此例程来锁定其自己的私有双端口 内存。这不仅不是必需的,它还会破坏具有非连续物理 内存 的机器上的内存。 |
0x70 到 0x91
参数 1 | 参数2 | 参数3 | 参数4 | 错误原因 |
---|---|---|---|---|
0x70 | 当前IRQL | MDL 地址 | 访问方式 | 驱动程序使用 IRQL > DISPATCH_LEVEL 调用 MmProbeAndLockPages。 |
0x71 | 当前 IRQL | MDL 地址 | 进程地址 | 驱动程序调用 MmProbeAndLockProcessPages 与 IRQL > DISPATCH_LEVEL。 |
0x72 | 当前 IRQL | MDL 地址 | 进程地址 | 驱动程序使用 IRQL > DISPATCH_LEVEL 调用 MmProbeAndLockSelectedPages。 |
0x73 | 当前 IRQL | 在 32 位 Windows 中:物理地址的低 32 位 在 64 位 Windows 中:64 位物理地址 | 字节数 | 驱动程序使用 IRQL > DISPATCH_LEVEL 调用 MmMapIoSpace。 |
0x74 | 当前IRQL | MDL地址 | 访问模式 | 驱动在内核模式下调用MmMapLockedPages,IRQL > DISPATCH_LEVEL。 |
0x75 | 当前IRQL | MDL地址 | 访问模式 | 驱动在用户模式下调用MmMapLockedPages,IRQL > APC_LEVEL。 |
0x76 | 当前IRQL | MDL地址 | 访问模式 | 驱动在内核模式下调用MmMapLockedPagesSpecifyCache IRQL > DISPATCH_LEVEL。 |
0x77 | 当前 IRQL | MDL 地址 | 访问模式 | 驱动在用户模式下调用 MmMapLockedPagesSpecifyCache IRQL > APC_LEVEL。 |
0x78 | 当前 IRQL | MDL 地址 | 0 | 驱动程序使用 IRQL > DISPATCH_LEVEL 调用 MmUnlockPages。 |
0x79 | 当前 IRQL | 虚拟地址未映射 | MDL 地址 | 驱动程序在内核模式下调用 MmUnmapLockedPages,IRQL > DISPATCH_LEVEL。 |
0x7A | 当前 IRQL | 虚拟地址未映射 | MDL 地址 | 驱动程序在用户模式下调用 MmUnmapLockedPages,IRQL > APC_LEVEL。 |
0x7B | 当前 IRQL | 未映射的虚拟地址 | 字节数 | 驱动程序使用 IRQL > APC_LEVEL 调用 MmUnmapIoSpace。 |
0x7C | MDL 地址 | MDL 标志 | 0 | 驱动程序调用了 MmUnlockPages,并传递了一个其页面从未成功锁定的 MDL。 |
0x7D | MDL 地址 | MDL 标志 | 0 | 驱动程序调用了 MmUnlockPages,并传递了一个 MDL,其页面来自非分页池。(这些永远不应该被解锁。) |
0x7E | 当前 IRQL | DISPATCH_LEVEL | 0 | 驱动程序调用 MmAllocatePagesForMdl、MmAllocatePagesForMdlEx 或者 MmFreePagesFromMdl,IRQL > DISPATCH_LEVEL。 |
0x7F | 当前 IRQL | MDL 地址 | MDL 标志 | 驱动程序调用 BuildMdlForNonPagedPool 并传递一个 MDL,其页面来自分页池。 |
0x80 | 当前 IRQL | 事件地址 | 0 | 驱动程序使用 IRQL > DISPATCH_LEVEL 调用 KeSetEvent。 |
0x81 | MDL 地址 | MDL 标志 | 0 | 驱动程序称为 MmMapLockedPages。(我们应该改用 MmMapLockedPagesSpecifyCache,并将 BugCheckOnFailure 参数设置为 FALSE。) |
0x82 | MDL 地址 | MDL 标志 | 0 | 驱动程序调用 MmMapLockedPagesSpecifyCache,其中 BugCheckOnFailure 参数等于 TRUE。(此参数应设置为 FALSE。) |
0x83 | 要映射的物理地址范围的开始 要映射 | 的字节 | 数 未锁定的第一个页面帧编号 | 驱动程序调用 MmMapIoSpace 时未锁定 MDL 页。由被映射的物理地址范围表示的物理页必须在进行此调用之前已锁定。 |
0x85 | MDL 地址 | 要映射的页数 | 未锁定的第一页框架编号 | 驱动程序在没有锁定 MDL 页面的情况下调用了 MmMapLockedPages。 |
0x89 | MDL address | 指向MDL中非内存页的指针 MDL 中 | 的非内存页号 | MDL 没有标记为“I/O”,但它包含非内存页地址。 |
0x91 | 保留 | 保留 | 保留 | 驱动程序使用操作系统不支持的方法切换堆栈。唯一支持的扩展内核模式堆栈的方法是使用 KeExpandKernelStackAndCallout。 |
0XA0到0x140
参数 1 | 参数 2 | 参数 3 | 参数 4 | 错误原因 |
---|---|---|---|---|
0xA0 | 指向发出读或者写请求的 IRP 的指针 | 下层设备的设备对象 | 检测到错误的扇区号 | 在硬盘上检测到循环冗余校验 (CRC) 错误。仅当驱动程序验证程序的磁盘完整性检查选项处于活动状态时,才会使用此参数进行错误检查。 |
0xA1 | 发出读或者写请求的 IRP 的副本。(实际的 IRP 已经完成。) 下位 | 设备的设备对象 | 检测到 | 错误的扇区号 在一个扇区上检测到CRC 错误(异步)。仅当驱动程序验证程序的磁盘完整性检查选项处于活动状态时,才会使用此参数进行错误检查。 |
0xA2 | 发出读或者写请求的 IRP,或者 | 较低设备的此 IRP设备对象的副本 | 检测到错误的扇区编号 | CRCDISK 校验和副本不匹配。这可能是一个分页错误。仅当驱动程序验证程序的磁盘完整性检查选项处于活动状态时,才会使用此参数进行错误检查。 |
0xB0 | MDL 地址 | MDL 标志 | 不正确的 MDL 标志 | 驱动程序为带有不正确标志的 MDL 调用 MmProbeAndLockPages。例如,驱动程序将 MmBuildMdlForNonPagedPool 创建的 MDL 传递给 MmProbeAndLockPages。 |
0xB1 | MDL 地址 | MDL 标志 | 不正确的 MDL 标志 | 驱动程序为带有不正确标志的 MDL 调用 MmProbeAndLockProcessPages。例如,驱动程序将 MmBuildMdlForNonPagedPool 创建的 MDL 传递给 MmProbeAndLockProcessPages。 |
0xB2 | MDL 地址 | MDL 标志 | 不正确的 MDL 标志 | 驱动程序为带有错误标志的 MDL 调用 MmMapLockedPages。例如,驱动程序传递了一个已映射到系统地址或者未锁定到 MmMapLockedPages 的 MDL。 |
0xB3 | MDL 地址 | MDL 标志 | 缺少 MDL 标志(至少有一个是预期的) | 驱动程序为带有错误标志的 MDL 调用了 MmMapLockedPages。例如,驱动程序传递了一个未锁定到 MmMapLockedPages 的 MDL。 |
0xB4 | MDL 地址 | MDL 标志 | 意外的部分 MDL 标志 | 驱动程序为部分 MDL 调用了 MmUnlockPages。部分 MDL 是由 IoBuildPartialMdl 创建的。 |
0xB5 | MDL 地址 | MDL 标志 | 意外的部分 MDL 标志 | MmUnmapLockedPages 在部分 MDL(用 IoBuildPartialMdl 创建)上调用。 |
0xB6 | MDL 地址 | MDL 标志 | 缺少 MDL 标志 | MmUnmapLockedPages 在未映射到系统地址的 MDL 上调用。 |
0xB7 | 损坏的物理页数。 | 第一个损坏的物理页。 | 最后损坏的物理页。 | 系统 BIOS 在睡眠转换期间损坏了低物理内存。 |
0xB8 | MDL 地址 | MDL flags | 保留 MDL | 描述的页面仍然被映射。驱动程序必须在调用 IoFreeMdl 之前取消页面映射。 |
0xB9 | 地址被取消映射。 | MDL 地址。使用错误的用户空间地址调用了 | 保留的 | MmUnmapLockedPages。 |
0xC0 | IRP 的地址 | 0 | 保留 | 驱动程序调用 IoCallDriver 并禁用中断。 |
0xC1 | 驱动程序调度例程的地址 | 保留 | 保留 | 一个驱动程序调度例程在中断被禁用的情况下返回。 |
0xC2 | 0 | 0 | 0 | 中断被禁用后,驱动程序调用了快速 I/O 调度例程。 |
0xC3 | 驱动程序快速 I/O 分派例程的地址 | 保留 | 保留 | 驱动程序快速 I/O 分派例程在中断禁用的情况下返回。 |
0xC5 | 驱动程序分派例程 | 的地址当前线程 | 的 APC 禁用计数 在调用驱动程序分派例程之前线程的 APC 禁用计数 | 驱动程序调度例程已更改线程的 APC 禁用计数。每次驱动程序调用 KeEnterCriticalRegion、FsRtlEnterFileSystem 或者获取互斥锁时,APC 禁用计数都会递减。每次驱动程序调用 KeLeaveCriticalRegion、KeReleaseMutex 或者 FsRtlExitFileSystem 时,APC 禁用计数都会增加。因为这些调用应该总是成对的,所以每当一个线程退出时,APC 禁用计数应该为零。负值表示驱动程序已禁用 APC 调用而未重新启用它们。正值表示反之亦然。 |
0xC6 | 驱动程序的地址 Fast I/O 分派例程 | 当前线程 | 的 APC 禁用计数 在调用 Fast I/O 驱动程序分派例程之前线程的 APC 禁用计数 | 驱动程序快速 I/O 调度例程已更改线程的 APC 禁用计数。每次驱动程序调用 KeEnterCriticalRegion、FsRtlEnterFileSystem 或者获取互斥锁时,APC 禁用计数都会递减。每次驱动程序调用 KeLeaveCriticalRegion、KeReleaseMutex 或者 FsRtlExitFileSystem 时,APC 禁用计数都会增加。因为这些调用应该总是成对的,所以每当一个线程退出时,APC 禁用计数应该为零。负值表示驱动程序已禁用 APC 调用而未重新启用它们。正值表示反之亦然。 |
0xCA | 后备列表的地址 | 保留 | 保留 | 驱动程序试图重新初始化后备列表。 |
0xCB | 后备列表地址 | 保留 | 保留 | 驱动程序已尝试删除未初始化的后备列表。 |
0xCC | 后备列表的 | 地址 池分配的起始地址 池分配的 | 大小 | 驱动程序试图释放包含活动后备列表的池分配。 |
0xCD | 后备列表的地址 | 调用者指定的 | 块大小 支持的最小块大小 | 驱动程序试图创建分配块大小过小的后备列表。 |
0xD0 | ERESOURCE 结构的地址 | 保留 | 保留 | 驱动程序试图重新初始化 ERESOURCE 结构。 |
0xD1 | ERESOURCE 结构的地址 | 保留 | 保留 | 驱动程序试图删除未初始化的 ERESOURCE 结构。 |
0xD2 | ERESOURCE 结构的 | 地址 池分配的起始地址 池分配的 | 大小 | 驱动程序试图释放包含活动 ERESOURCE 结构的池分配。 |
0xD5 | 由已检查的驱动程序构建版本创建的 IO_REMOVE_LOCK 结构的地址 | Current IoReleaseRemoveLock tag | 保留 | 当前 IoReleaseRemoveLock 标签与之前的 IoAcquireRemoveLock 标签不匹配。如果调用 IoReleaseRemoveLock 的驱动程序不在检查版本中,则参数 2 是驱动程序验证程序代表驱动程序创建的影子 IO_REMOVE_LOCK 结构的地址。在这种情况下,驱动程序使用的 IO_REMOVE_LOCK 结构的地址根本没有使用,因为 Driver Verifier 正在替换所有移除锁 API 的锁地址。仅当 Driver Verifier 的 I/O Verification 选项处于活动状态时,才会使用此参数进行错误检查。 |
0xD6 | 由驱动的检查构建版本创建的 IO_REMOVE_LOCK 结构的地址 | 与先前的 IoAcquireRemoveLock 标签不匹配的标签 | 先前的 IoAcquireRemoveLock 标签 | 当前的 IoReleaseRemoveLockAndWait 标签与先前的 IoAcquireRemoveLock 标签不匹配。如果调用 IoReleaseRemoveLock 的驱动程序不是经过检查的构建,则参数 2 是 Driver Verifier 代表驱动程序创建的影子 IO_REMOVE_LOCK 结构的地址。在这种情况下,驱动程序使用的 IO_REMOVE_LOCK 结构的地址根本没有使用,因为 Driver Verifier 正在替换所有移除锁 API 的锁地址。仅当 Driver Verifier 的 I/O Verification 选项处于活动状态时,才会使用此参数进行错误检查。 |
0xD7 | Driver Verifier 内部使用的已检查构建 Remove Lock 结构的地址 | 驱动程序指定的 Remove Lock 结构的地址 | 保留 | A Remove Lock 不能重新初始化,即使在它调用 IoReleaseRemoveLockAndWait 之后,因为其他线程可能仍在使用该锁(通过调用 IoAcquireRemoveLock)。驱动程序应在其设备扩展中分配 Remove Lock,并对其进行一次初始化。锁将与设备扩展一起删除。 |
0xDA | 驱动程序 | 内部的驱动程序WMI 回调地址的起始地址 | 保留 | 尝试卸载尚未注销其 WMI 回调函数的驱动程序。保留 |
0xDB | 设备对象的地址保留 已尝试删除未从 WMI 取消注册的设备对象。 | 保留 | 保留 | 保留 |
0xDC | 将无效的 RegHandle 值指定为函数 EtwUnregister 的参数。 | 调用 EtwRegister 的 | 地址 卸载驱动的起始地址 | 对于 Windows 8 及更高版本,该参数为 ETW RegHandle 值。 |
0xDD | 试图在不调用 EtwUnregister 的情况下卸载驱动程序。 | 同步对象地址 | 0 | 0 |
0xDF | 同步对象在会话地址空间中。会话地址空间中不允许使用同步对象,因为它们可以从另一个会话或者没有会话虚拟地址空间的系统线程中进行操作。 | 用作参数的用户模式地址 | 用作参数的地址范围的大小(以字节为单位) | 保留 |
0xE0 | 对操作系统内核函数进行了调用,该函数将用户模式地址指定为参数。 | 同步对象的地址 | 保留 | 保留 |
0xE1 | 发现同步对象的地址无效或者可分页。 | IRP | 的地址 | 保留 |
0xE2 | 在 IRP 中的用户模式地址 发现 Irp->RequestorMode 设置为 KernelMode 的 IRP 将用户模式地址作为其成员之一。 | 调用 API | 的地址 用户模式地址用作 API | 保留中的参数 |
0xE3 | 驱动程序以用户模式地址作为参数调用了内核模式 ZwXxx 例程。 | 对 API 的调用 | 地址 格式错误的 UNICODE_STRING 结构的地址 | 保留 |
0xE4 | 驱动程序已调用内核模式 ZwXxx 例程,并将格式错误的 UNICODE_STRING 结构作为参数。 | 当前 IRQL | 保留 | 保留 |
0xE5 | 以不正确的 IRQL 调用内核 API。 | 使 Zw API 调用 | 当前 IRQL | 特殊内核 APC的驱动程序内部的地址。 |
0xE6 | 未在 IRQL = PASSIVE_LEVEL 调用内核 Zw API,并且启用了特殊的内核 APC。 | 当前 IRQL | 线程的 APC 禁用计数 | pushlock 的地址 |
0xEA | 驱动程序试图在启用 APC 时获取推锁。 | 当前 IRQL | 线程的 APC 禁用计数 | 推锁 |
0xEB | 的地址驱动程序试图在启用 APC 时释放推锁。 | 目标缓冲区的 | 地址 源缓冲区的地址 | 要复制的字节数 |
0xF0 | 具有重叠源缓冲区和目标缓冲区的称为 memcpy 函数的驱动程序。 | NULL 句柄的地址 | 对象类型已 | 保留 |
0xF5 | 驱动程序将 NULL 句柄传递给 ObReferenceObjectByHandle。 | 被引用的句柄值 | 当前进程的 | 地址执行不正确引用 |
0xF6 | 的驱动程序内部的地址驱动程序将用户模式句柄引用为内核模式。 | 调用者指定的句柄值 | 调用者 | 指定的对象类型 调用者指定的 AccessMode |
0xF7 | 驱动程序正在尝试对系统进程上下文中的内核句柄进行用户模式引用。 | 完成例程地址。 | 调用完成例程之前的 IRQL 值 调用完成例程之后的 | 当前 IRQL 值 |
0xFA | IRP 完成例程返回的 IRQL 与调用该例程的 IRQL 不同。 | 完成例程地址 | 当前线程的 APC 禁用计数 | 线程在调用 IRP 完成例程之前的 APC 禁用计数 |
0xFB | 驱动程序的 IRP 完成例程更改了线程的 APC 禁用计数。每次驱动程序调用 KeEnterCriticalRegion、FsRtlEnterFileSystem 或者获取互斥锁时,APC 禁用计数都会递减。每次驱动程序调用 KeLeaveCriticalRegion、KeReleaseMutex 或者 FsRtlExitFileSystem 时,APC 禁用计数都会增加。因为这些调用应该总是成对的,所以每当一个线程退出时,APC 禁用计数应该为零。负值表示驱动程序已禁用 APC 调用而未重新启用它们。正值表示反之亦然。 | 驱动程序内部进行不正确的 API 调用的地址。 | 提供了 ApcContext 值。 | 保留 |
0xFC | 使用不受支持的 ApcContext 值调用 ZwNotifyChangeKey(从内核模式)。 | 参数 2 | 参数 3 | 参数 4 |
0x105到0x140
参数 1 | 错误原因 | IRP 地址 | 0 | 0 |
---|---|---|---|---|
0x105 | 驱动程序使用 ExFreePool 而不是 IoFreeIrp 来释放 IRP。 | 0 | 0 | 0 |
0x10A | 驱动程序尝试向空闲进程收取池配额。 | 0 | 0 | 0 |
0x10B | 驱动程序尝试从 DPC 例程中收取池配额。这是不正确的,因为当前进程上下文未定义。 | 中断服务例程的 | 地址 在执行 ISR 之前保存 | 的扩展上下文的地址 在执行 ISR 之后保存了扩展上下文的地址 |
0x110 | 驱动程序的中断服务例程 (ISR) 损坏了扩展线程上下文。 | 执行 ISR | 后执行 ISR IRQL 之前的中断服务程序IRQL 的地址 | 中断服务程序返回更改的 IRQL。 |
0x111 | 负责关闭的线程的地址,可能会死锁。 | 0 | 0 | 驱动程序验证程序检测到系统用时超过 20 分钟并且关闭未完成。 |
0x115 | 当前 IRQL | 0 | 0 | 驱动程序在 IRQL > APC_LEVEL 调用 KeEnterCriticalRegion。 |
0x11A | 当前 IRQL | 0 | 0 | 驱动程序在 IRQL > APC_LEVEL 调用 KeLeaveCriticalRegion。 |
0x11B | IRQL 值的 | 地址 要等待的对象的 | 地址 超时值 | 的地址线程在 IRQL > DISPATCH_LEVEL 处等待。KeWaitForSingleObject 或者 KeWaitForMultipleObjects 的调用者必须以 IRQL <= DISPATCH_LEVEL 运行。 |
0x120 | IRQL 值的 | 地址 要等待的对象的 | 地址 超时值 | 的地址线程在 IRQL 处等待等于 DISPATCH_LEVEL,超时为 NULL。KeWaitForSingleObject 或者 KeWaitForMultipleObjects 的调用者可以以 IRQL <= DISPATCH_LEVEL 运行。如果为 Timeout 提供了 NULL 指针,则调用线程将保持等待状态,直到对象收到信号。 |
0x121 | IRQL 值的 | 地址要等待的对象的地址 | Timeout 值 | 的地址线程在 DISPATCH_LEVEL 等待并且 Timeout 值不等于零 (0)。如果 Timeout != 0,KeWaitForSingleObject 或者 KeWaitForMultipleObjects 的调用者必须以 IRQL <= APC_LEVEL 运行。 |
0x122 | 要等待的对象的地址 | 0 | 0 | KeWaitForSingleObject 或者 KeWaitForMultipleObjects 的调用者将等待指定为 UserMode,但对象在内核堆栈上。 |
0x123 | 工作项的地址 | 0 | 0 | 工作项在会话地址空间中。会话地址空间中不允许工作项,因为它们可以从另一个会话或者没有会话虚拟地址空间的系统线程中操作。 |
0x130 | 工作项地址 | 0 | 0 | 工作项在可分页内存中。工作项必须在不可分页的内存中,因为内核在 DISPATCH_LEVEL 使用它们。 |
0x131 | IRP 的地址 | IoCancelIrp 调用和此 IRP 的完成之间允许的毫秒数 | 0 | 取消的 IRP 没有在预期的时间内完成 驱动程序花费的时间比预期的长来完成取消的 IRP。 |
0x135 | 正在释放的池块的地址 不正确的值 | 不正确值的 | 地址 | 驱动程序调用了 ExFreePool 并且驱动程序验证程序检测到用于跟踪池使用情况的内部值之一中的错误。 |
0x13A | 被释放的池块的 | 地址 错误值的 | 地址 指向错误内存页的指针地址 | 驱动程序调用了 ExFreePool 并且驱动程序验证程序检测到用于跟踪池使用情况的内部值之一中的错误。 |
0x13B | 正在释放的池块的地址 不正确的值 | 不正确值的 | 地址 | 驱动程序调用了 ExFreePool 并且驱动程序验证程序检测到用于跟踪池使用情况的内部值之一中的错误。 |
0x13C | 正在释放的池块的 | 地址 错误值的地址 | 正确的预期值 | 驱动程序已调用 ExFreePool 并且驱动程序验证程序检测到用于跟踪池使用情况的内部值之一中的错误。 |
0x13D | 调用者指定的 | 池块地址 Driver Verifier 跟踪的池块地址 | 指向Driver Verifier 跟踪的池块地址的指针 | ExFreePool 的调用者指定的池块地址与Driver Verifier 跟踪的地址不同。 |
0x13E | 正在释放的池块的地址 正在释放 | 的字节数 | 指向 Driver Verifier 跟踪的字节数的指针 | 在调用 ExFreePool 时释放的内存字节数与 Driver Verifier 跟踪的字节数不同。 |
0x13F | 当前 IRQL | MDL 地址 | 与此 MDL 相关联的虚拟地址 | 非锁定 MDL 是从可分页或者可交易内存构造的。 |
0x140 | 驱动程序请求分配的最高物理地址 要分配 | 的字节数 | 0 | 驱动程序明确请求低于 4GB 的物理内存。 |
0x141 | 参数 2 | 参数 3 | 参数 4 | 错误原因保留 保留 |
为0x1000到0x100B -死锁
参数 1 | 资源地址自死锁:当前线程试图递归地独占获取一个它只拥有共享的资源。仅当驱动程序验证程序的死锁检测选项处于活动状态时,才会使用此参数进行错误检查。导致死锁的最终原因的资源地址保留 保留 Deadlock: 发现锁层次结构违规。仅当驱动程序验证程序的死锁检测选项处于活动状态时,才会使用此参数进行错误检查。(使用 !deadlock 扩展以获得更多信息。)资源的地址保留 保留 | 未初始化资源:未先初始化就已获取资源。仅当驱动程序验证程序的死锁检测选项处于活动状态时,才会使用此参数进行错误检查。 | 被释放 | 的资源地址死锁本应先释放的资源地址 |
---|---|---|---|---|
0x1000 | 保留 | Unexpected release: 资源释放顺序不正确。仅当驱动程序验证程序的死锁检测选项处于活动状态时,才会使用此参数进行错误检查。 | 资源 | 地址获取资源的线程 |
0x1001 | 地址当前线程的地址 | 意外线程:错误的线程释放了资源。仅当驱动程序验证程序的死锁检测选项处于活动状态时,才会使用此参数进行错误检查。 | 资源地址 | 保留 |
0x1002 | 保留 | 多次初始化:一个资源被初始化多次。仅当驱动程序验证程序的死锁检测选项处于活动状态时,才会使用此参数进行错误检查。 | 资源地址 | 保留 |
0x1003 | 保留 | Unacquired resource:资源在被获取之前被释放。仅当驱动程序验证程序的死锁检测选项处于活动状态时,才会使用此参数进行错误检查。 | 锁地址 | 保留 |
0x1004 | 保留 | 驱动程序试图通过使用与此锁类型不匹配的 API 来获取锁。 | 锁地址 | 保留 |
0x1005 | 保留 | 驱动程序试图通过使用与此锁类型不匹配的 API 来释放锁。 | 所有者线程地址 | 保留 |
0x1007 | 终止的线程拥有锁。 | 锁地址 | 所有者线程地址 | 保留 |
0x1008 | 删除的锁仍为线程所有。 | 向其发出写入 IRP 的设备对象。 | IRP 的地址。 | MDL 描述的缓冲区的系统空间虚拟地址。 |
0x1009 | 修改了写入 Irp 的不变 MDL 缓冲区内容。 | 向其发出写入 IRP 的设备对象。 | IRP 的地址。 | MDL 描述的缓冲区的系统空间虚拟地址。 |
0x100A | Read Irp 的不变 MDL 缓冲区内容在调度或者由虚拟页面支持的缓冲区期间被修改。 | 指向描述违规的字符串的指针。 | 此损坏中涉及的数据(如果不使用则为 0)。 | |
0x100B | 此损坏中涉及的数据(如果不使用则为 0)。 | 验证程序扩展状态存储检测到损坏。 | 指向驱动程序对象的指针。 | 指向捕获的原始 I/O 回调的指针。 |
0x1010 | 保留(未使用)。 | 验证程序在捕获的原始 I/O 回调中检测到内部损坏。 | 参数2 | 参数3 |
0x1011 | 参数4 | 错误原因 | 驱动程序代码中检测到错误的地址。 | 池类型。 |
0x1012 | 池标签(如果提供)。 | 代码完整性问题:调用者指定了一个可执行池类型。(预期:NonPagedPoolNx) | 驱动程序代码中检测到错误的地址。 | 页面保护 (WIN32_PROTECTION_MASK)。 |
0x1013 | 0 | 代码完整性问题:调用者指定了可执行页面保护。(预期:清除 PAGE_EXECUTE* 位) | 驱动程序代码中检测到错误的地址。 | 页面优先级(MM_PAGE_PRIORITY 与 MdlMapping* 逻辑或者)。 |
为0x2000到0x2005 -代码完整性问题
参数 1 | 0 | 代码完整性问题:调用者指定了一个可执行的 MDL 映射。(预期:MdlMappingNoExecute) | 图像文件名(Unicode 字符串)。 | 节头的地址。 |
---|---|---|---|---|
0x2000 | 节名称(UTF-8 编码的字符串)。 | 代码完整性问题:镜像包含可执行和可写部分。 | 图像文件名(Unicode 字符串)。 | 节头的地址。 |
0x2001 | 节名称(UTF-8 编码的字符串)。 | 代码完整性问题:图像包含未页面对齐的部分。 | 图像文件名(Unicode 字符串)。 | IAT 目录。 |
0x2002 | 节名称(UTF-8 编码的字符串)。 | 代码完整性问题:镜像包含位于可执行部分的 IAT。 | 参数 2 | 参数 3 |
0x2003 | 参数 4 | 错误原因 | 指向 NetBufferList 对象 | 的指针 指向虚拟交换机对象的指针(如果非空) |
0x2004 | 保留(未使用) | VM Switch:必须设置调用方提供的 NetBufferList 的 SourceHandle。请参阅 AllocateNetBufferListForwardingContext 例程。 | 指向 NetBufferList 对象 | 的指针 指向虚拟交换机对象的指针(如果非空)。 |
0x2005 | 保留(未使用) | VM 交换机:调用方提供的 NetBufferList 的转发详细信息不为零。请参阅 AllocateNetBufferListForwardingContext 例程。 | 指向 NetBufferList 对象 | 的指针 指向虚拟交换机对象的指针(如果非空)。 |
0xA001异向0xA00D - VM切换问题
参数 1 | 保留的(未使用的) | VM 交换机:调用者提供了一个 NetBufferList,其包头或者路由上下文为 NULL。请参阅可扩展交换机数据路径的数据包管理教程。 | 无效端口的 ID | 网卡索引 |
---|---|---|---|---|
0xA001 | 指向虚拟交换机对象的指针(如果非空)。 | VM 交换机:调用者指定了无效的端口和 NIC 索引组合。请参阅 Hyper-V 可扩展交换机端口和网络适配器状态。 | 指向 NetBufferList 对象 | 的指针 指向 Destination 列表的指针。 |
0xA002 | 指向虚拟交换机对象的指针(如果非空)。 | VM 交换机:调用方提供了无效的目标。请参阅 AddNetBufferListDestination 和 UpdateNetBufferListDestinations。 | 指向 NetBufferList 对象 | 的指针 指向虚拟交换机对象的指针(如果非空)。 |
0xA003 | 保留(未使用) | VM 交换机:调用方提供了无效的源 NIC 或者端口对象。请参阅 Hyper-V 可扩展交换机端口和网络适配器状态。 | 指向 NetBufferList 对象的指针 | 指向虚拟交换机对象的指针(如果非空)。 |
0xA004 | 保留(未使用) | VM 交换机:调用方提供了无效的目标列表。请参阅 AddNetBufferListDestination 和 UpdateNetBufferListDestinations。 | 父 NIC 对象 | NIC 索引 |
0xA005 | 指向虚拟交换机对象的指针(如果非空)。 | VM 交换机:在不允许时尝试引用 NIC。请参阅 Hyper-V 可扩展交换机端口和网络适配器状态。 | 被引用 | 的端口指向虚拟交换机对象的指针(如果非空) |
0xA006 | 保留(未使用) | VM 交换机:在不允许时尝试引用端口。请参阅 Hyper-V 可扩展交换机端口和网络适配器状态。 | 指向 NetBufferList 对象 | ContextTypeInfo 对象的指针 |
0xA007 | 保留(未使用) | VM 交换机:已设置故障上下文。请参阅 SetNetBufferListSwitchContext。 | 指向 NetBufferList 对象的指针 | NDIS_SWITCH_REPORT_FILTERED_NBL_FLAGS_* |
0xA008 | 指向虚拟交换机对象(如果非空) | VM 交换机的指针:为丢弃的 NetBufferList 提供的方向无效。请参阅 ReportFilteredNetBufferLists。 | 指向 NetBufferList 对象的指针 | 发送标志值 |
0xA009 | 指向虚拟交换机对象(如果非空)的指针 | VM 交换机:当设置 NDIS_SEND_FLAGS_SWITCH_SINGLE_SOURCE 标志时,NetBufferList 链具有多个源端口。请参阅 Hyper-V 可扩展交换机发送和接收标志。 | 指向 NetBufferList 对象 | 的指针 指向虚拟交换机上下文的指针 |
0xA00A | 指向虚拟交换机对象的指针(如果非空) | VM 交换机:当 NDIS_RECEIVE_FLAGS_SWITCH_DESTINATION_GROUP 标志被设置时,链中的一个或者多个 NetBufferLists 具有无效的目的地。请参阅 Hyper-V 可扩展交换机发送和接收标志。 | 指向 NetBufferLists 对象的指针。 | 指向虚拟交换机上下文的指针。 |
0xA00B | 指向虚拟交换机对象的指针(如果非空)。 | VM 切换:当设置了 VMS_NBL_ROUTING_CONTEXT_FLAG_NO_WNV_PROCESSING 标志时,尝试通过 WNV 完成 NetBufferList。 | 参数 2 | 参数 3 |
0xA00C | 参数 4 | 错误原因 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
0xA00D | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlApcLte。该规则指定驱动程序必须仅在 IRQL <= APC_LEVEL 时调用 ObGetObjectSecurity 和 ObReleaseObjectSecurity。 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
0xA00E | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlDispatch。IrqlDispatch 规则指定驱动程序仅在 IRQL = DISPATCH_LEVEL 时才必须调用某些例程 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
0x00020002到0x00020022 - DDI遵守规则违反
参数 1 | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlExAllocatePool。IrqlExAllocatePool 规则指定驱动程序仅在 IRQL<=DISPATCH_LEVEL 时调用 ExAllocatePoolWithTag 和 ExAllocatePoolWithTagPriority。 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
---|---|---|---|---|
0x00020002 | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlExApcLte1. IrqlExApcLte1 规则指定驱动程序仅在 IRQL <= APC_LEVEL 时调用 ExAcquireFastMutex 和 ExTryToAcquireFastMutex。 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
0x00020003 | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlExApcLte2. IrqlExApcLte2 规则指定驱动程序仅在 IRQL <= APC_LEVEL 时调用某些例程。 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
0x00020004 | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlExApcLte3. IrqlExApcLte3 规则指定驱动程序必须仅在 IRQL <= APC_LEVEL 时调用某些执行支持例程。 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
0x00020005 | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlExPassive。IrqlExPassive 规则指定驱动程序必须仅在 IRQL = PASSIVE_LEVEL 时调用某些执行支持例程。 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
0x00020006 | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlIoApcLte。IrqlIoApcLte 规则指定驱动程序必须仅在 IRQL <= APC_LEVEL 时调用某些 I/O 管理器例程。 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
0x00020007 | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlIoPassive1. IrqlIoPassive1 规则指定驱动程序必须仅在 IRQL = PASSIVE_LEVEL 时调用某些 I/O 管理器例程。 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
0x00020008 | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlIoPassive2. IrqlIoPassive2 规则指定驱动程序必须仅在 IRQL = PASSIVE_LEVEL 时调用某些 I/O 管理器例程。 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
0x00020009 | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlIoPassive3. IrqlIoPassive3 规则指定驱动程序必须仅在 IRQL = PASSIVE_LEVEL 时调用某些 I/O 管理器例程。 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
0x0002000A | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlIoPassive4. IrqlIoPassive4 规则指定驱动程序必须仅在 IRQL = PASSIVE_LEVEL 时调用某些 I/O 管理器例程。 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
0x0002000B | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlIoPassive5. IrqlIoPassive5 规则指定驱动程序必须仅在 IRQL = PASSIVE_LEVEL 时调用某些 I/O 管理器例程。 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
0x0002000C | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlKeApcLte1. IrqlKeApcLte1 规则指定驱动程序必须仅在 IRQL <= APC_LEVEL 时调用某些内核例程。 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
0x0002000D | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlKeApcLte2. IrqlKeApcLte2 规则指定驱动程序必须仅在 IRQL <= APC_LEVEL 时调用某些内核例程。 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
0x0002000E | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlKeDispatchLte。IrqlKeDispatchLte 规则指定驱动程序必须仅在 IRQL <= DISPATCH_LEVEL 时调用某些内核例程。 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
0x0002000F | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlKeReleaseSpinLock。IrqlKeReleaseSpinLock 规则指定驱动程序必须仅在 IRQL = DISPATCH_LEVEL 时调用 KeReleaseSpinLock。 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
0x00020010 | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlKeSetEvent。IrqlKeSetEvent 规则指定 KeSetEvent 例程仅在 Wait 设置为 FALSE 时在 IRQL <= DISPATCH_LEVEL 时调用,当 Wait 设置为 TRUE 时在 IRQL <= APC_LEVEL 时调用。 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
0x00020011 | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlMmApcLte。IrqlMmApcLte 规则指定驱动程序必须仅在 IRQL <= APC_LEVEL 时调用某些内存管理器例程。 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
0x00020015 | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlMmDispatch。IrqlMmDispatch 规则指定驱动程序必须仅在 IRQL = DISPATCH_LEVEL 时调用 MmFreeContiguousMemory。 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
0x00020016 | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlObPassive。IrqlObPassive 规则指定驱动程序必须仅在 IRQL = PASSIVE_LEVEL 时调用 ObReferenceObjectByHandle。 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
0x00020019 | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlPsPassive。IrqlPsPassive 规则指定驱动程序必须仅在 IRQL = PASSIVE_LEVEL 时调用某些进程和线程管理器例程。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x0002001A | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 IrqlReturn。 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
0x0002001B | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlRtlPassive。IrqlRtlPassive 规则指定驱动程序必须仅在 IRQL = PASSIVE_LEVEL 时调用 RtlDeleteRegistryValue。 | 指向描述违反规则条件的字符串的指针。 | 指向规则状态变量的可选指针。 |
0x0002001C | 保留 | 驱动程序违反了 DDI 合规性规则 IrqlZwPassive。IrqlZwPassive 规则指定驱动程序必须仅在 IRQL = PASSIVE_LEVEL 时调用 ZwClose。 | 指向描述违反规则条件的字符串的指针。 | 保留(未使用) |
0x0002001D | 保留(未使用) | 驱动程序违反了 DDI 合规性规则 IrqlIoDispatch。 | 指向描述违反规则条件的字符串的指针。 | 保留(未使用)。 |
0x0002001E | 保留(未使用)。 | 驱动程序违反了 DDI 合规性规则 IrqlIoRtlZwPassive。IrqlIoRtlZwPassive 规则指定驱动程序仅在以 IRQL = PASSIVE_LEVEL 执行时才调用规则中列出的 DDI。 | 指向描述违反规则条件的字符串的指针。 | 保留(未使用)。 |
0x0002001F | 保留(未使用)。 | 驱动程序违反了 DDI 合规性规则 IrqlNtifsApcPassive。IrqlNtifsApcPassive 规则指定驱动程序仅在 IRQL = PASSIVE_LEVEL 或者 IRQL <= APC_LEVEL 执行时才调用规则中列出的 DDI。 | 指向描述违反规则条件的字符串的指针。 | 保留(未使用)。 |
0x00020022 | 保留(未使用)。 | 该驱动程序违反了 Microsoft 内部 DDI 合规性规则 IrqlKeMore。 | 参数 2 | 参数 3 |
0x00020023 | 参数 4 | 错误原因 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00020024 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 CriticalRegions。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00020025 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 QueuedSpinLock。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00040003到0x00043006 - DDI遵守规则违反
参数 1 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 QueuedSpinLockRelease。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
---|---|---|---|---|
0x00040003 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 SpinLock。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数) |
0x00040006 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 SpinlockRelease。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00040007 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 GuardedRegions。 | 指向描述违反规则条件的字符串的指针。 | 保留(未使用) |
0x00040009 | 保留(未使用) | 驱动程序违反了 DDI 合规性规则 RequestedPowerIrp。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x0004000A | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 IoSetCompletionExCompleteIrp。 | 指向描述违反规则条件的字符串的指针。 | 保留(未使用) |
0x0004000E | 保留(未使用) | 驱动程序违反了 DDI 合规性规则 PnpRemove。 | 参数 2 | 参数 3 |
0x0004100B | 参数 4 | 错误原因 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x0004100F | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 KsDeviceMutex。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00043006 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 KsStreamPointerClone。 | 指向描述违反规则条件的字符串的指针。 | 保留(未使用) |
0x00081001到0x00082005 - AV流驱动程序合规性违规
参数 1 | 保留(未使用) | 驱动程序违反了 DDI 合规性规则 KsStreamPointerLock。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
---|---|---|---|---|
0x00081001 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 KsStreamPointerUnlock。 | 指向描述违反规则条件的字符串的指针。 | 保留(未使用) |
0x00081002 | 保留(未使用) | 驱动程序违反了 DDI 合规性规则 KsCallbackReturn。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00081003 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 KsIrqlDeviceCallbacks。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00081004 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 KsIrqlFilterCallbacks。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00081005 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 KsIrqlPinCallbacks。 | 指向描述违反规则条件的字符串的指针。 | 保留(未使用) |
0x00081006 | 保留(未使用) | 驱动程序违反了 DDI 合规性规则 KsIrqlDDIs。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00081007 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 KsFilterMutex。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00081008 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 KsProcessingMutex。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00081009 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 KsInvalidStreamPointer。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x0008100A | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 KsTimedPinSetDeviceState。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x0008100B | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 KsTimedDeviceCallbacks。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x0008100C | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 KsTimedFilterCallbacks。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00082001 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 KsTimedPinCallbacks。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00082002 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 KsTimedProcessingMutex。 | 参数2 | 参数3 |
0x00082003 | 参数4 | 错误原因 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00082004 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 NdisOidComplete。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00082005 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 NdisOidDoubleComplete。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00091001 到 0x0009400C - NDIS DDI 合规性规则违规
参数 1 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 DDI 合规性规则 NdisOidDoubleRequest。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
---|---|---|---|---|
0x00091001 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 NDIS/WIFI 验证规则 NdisTimedOidComplete。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00091002 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 NDIS/WIFI 验证规则 NdisTimedDataSend。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x0009100E | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 NDIS/WIFI 验证规则 NdisTimedDataHang。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00092003 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 NDIS/WIFI 验证规则 NdisFilterTimedPauseComplete。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x0009200D | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 NDIS/WIFI 验证规则 NdisFilterTimedDataSend。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x0009200F | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 NDIS/WIFI 验证规则 NdisFilterTimedDataReceive。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00092010 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 NDIS/WIFI 验证规则 WlanAssociation。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00092011 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 NDIS/WIFI 验证规则 WlanConnectionRoaming。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00092012 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 NDIS/WIFI 验证规则 WlanDisassociation。 | 指向描述违反规则条件的字符串的指针。 | 保留 (unused) |
0x00093004 | 保留 (unused) | 驱动违反了 NDIS/WIFI 验证规则 WlanAssert。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00093005 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 NDIS/WIFI 验证规则 WlanTimedAssociation。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00093006 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 NDIS/WIFI 验证规则 WlanTimedConnectionRoaming。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00093101 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 NDIS/WIFI 验证规则 WlanTimedConnectRequest。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00094007 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 NDIS/WIFI 验证规则 WlanTimedLinkQuality。 | 指向描述违反规则条件的字符串的指针。 | 内部规则状态的地址(!ruleinfo 的第二个参数)。 |
0x00094008 | 补充状态的地址(!ruleinfo 的第三个参数)。 | 驱动程序违反了 NDIS/WIFI 验证规则 WlanTimedScan。 | {翻译单元格} | {翻译单元格} |
0x00094009 | {翻译单元格} | {翻译单元格} | {翻译单元格} | {翻译单元格} |
0x0009400B | {翻译单元格} | {翻译单元格} | {翻译单元格} | {翻译单元格} |
0x0009400C | {翻译单元格} | {翻译单元格} | {翻译单元格} | {翻译单元格} |
日期:2020-09-17 00:16:10 来源:oir作者:oir