Bug 检查 0x7C:BUGCODE_NDIS_DRIVER

BUGCODE_NDIS_DRIVER Bug 检查的值为 0x0000007C。 此 Bug 检查表明操作系统检测到网络驱动程序中错误。

重要

这篇文章适合程序员阅读。 如果您是在使用计算机时收到蓝屏错误代码的客户,请参阅蓝屏错误疑难解答

BUGCODE_NDIS_DRIVER 参数

参数 1 表示违规类型。 其他参数的含义取决于参数 1 的值。 如果参数的值为“0”,则表示未使用此参数。

参数 1 参数 1 值和错误原因 参数 2 参数 3 参数 4

0x01

NDIS_BUGCHECK_ALLOCATE_SHARED_MEM_HIGH_IRQL

一个驱动程序在高 IRQL 下调用了 NdisMAllocateSharedMemory

特定微型端口适配器块的地址。 请使用此地址运行 !ndiskd.netadapter 获取详细信息。

请求的共享内存的长度

当前 IRQL

0x02

NDIS_BUGCHECK_SHARED_MEM_CORRUPTION

在调用 NdisMAllocateSharedMemory 时,NDIS 检测到以前分配的共享内存页已损坏。

特定微型端口适配器块的地址。 请使用此地址运行 !ndiskd.netadapter 获取详细信息。

已损坏的共享内存页

NDIS_WRAPPER_CONTEXTE 的地址,用于跟踪驱动程序分配的共享内存

0x03

NDIS_BUGCHECK_FREE_INVALID_SHARED_MEM

一个微型端口驱动程序调用了 NdisMFreeSharedMemory(Async),其共享内存地址已被释放。

特定微型端口适配器块的地址。 请使用此地址运行 !ndiskd.netadapter 获取详细信息。

从中分配此共享内存的页面

共享内存的虚拟地址

0x04

NDIS_BUGCHECK_UNLOAD_DRIVER_INVALID_PARAMETER

调用 AddDevice 时使用的驱动程序不在 NDIS 注册的驱动程序列表中。

仅在特殊检测的 NDIS 上启用。

NDIS_M_DRIVER_BLOCK 的地址

DRIVER_OBJECT 的地址

0

0x05

NDIS_BUGCHECK_RECVD_PACKET_IN_USE_BAD_STACK_LOCATION

以太网驱动程序指示它使用协议堆栈当前正在使用的数据包描述符收到了数据包。

通过检查堆栈数据包位置捕获。

特定微型端口适配器块的地址。 请使用此地址运行 !ndiskd.netadapter 获取详细信息。

驱动程序使用的数据包描述符的地址。 请使用此地址运行 !ndiskd.pkt 获取详细信息。

包含此数据包描述符的数据包数组的地址

0x06

NDIS_BUGCHECK_RECVD_PACKET_IN_USE_BAD_REF_COUNT

以太网驱动程序指示它使用协议堆栈当前正在使用的数据包描述符收到了数据包。

通过检查数据包引用计数捕获。

特定微型端口适配器块的地址。 请使用此地址运行 !ndiskd.netadapter 获取详细信息。

驱动程序使用的数据包描述符的地址。 请使用此地址运行 !ndiskd.pkt 获取详细信息。

包含此数据包描述符的数据包数组的地址

0x07

FDDI 驱动程序指示它使用协议堆栈当前正在使用的数据包描述符收到了数据包。

通过检查引用计数捕获。

特定微型端口适配器块的地址。 请使用此地址运行 !ndiskd.netadapter 获取详细信息。

驱动程序使用的数据包描述符的地址。 请使用此地址运行 !ndiskd.pkt 获取详细信息。

包含此数据包描述符的数据包数组的地址

0x08

NDIS_BUGCHECK_HALT_WITHOUT_INTERRUPT_DEREGISTER

微型端口驱动程序在停止过程中未取消注册其中断。

特定微型端口适配器块的地址。 请使用此地址运行 !ndiskd.netadapter 获取详细信息。

NDIS_MINIPORT_INTERRUPT 的地址

0

0x09

NDIS_BUGCHECK_HALT_WITHOUT_CANCEL_TIMER

微型端口驱动程序在未成功取消其所有计时器的情况下停止。

特定微型端口适配器块的地址。 请使用此地址运行 !ndiskd.netadapter 获取详细信息。

微型端口驱动程序计时器队列的地址 (NDIS_MINIPORT_TIMER)

0

0x0A

NDIS_BUGCHECK_DRIVER_UNLOAD_UNEXPECTED

微型端口驱动程序过早卸载。

NDIS_M_DRIVER_BLOCK 的地址

DRIVER_OBJECT 的地址

微型端口驱动程序的引用计数

0x0B

NDIS_BUGCHECK_INIT_FAILED_WITHOUT_INTERRUPT_DEREGISTER

微型端口驱动程序在未取消注册中断的情况下初始化失败。

特定微型端口适配器块的地址。 请使用此地址运行 !ndiskd.netadapter 获取详细信息。

NDIS_MINIPORT_INTERRUPT 的地址

0

0x0C

NDIS_BUGCHECK_INIT_FAILED_WITHOUT_CANCEL_TIMER

微型端口驱动程序在未成功取消其所有计时器的情况下初始化失败。

特定微型端口适配器块的地址。 请使用此地址运行 !ndiskd.netadapter 获取详细信息。

微型端口驱动程序计时器队列的地址 (NDIS_MINIPORT_TIMER)

0

0x0D

NDIS_BUGCHECK_HALT_INIT_WITHOUT_INTERRUPT_DEREGISTER

微型端口驱动程序在停止过程中未取消注册其中断。

在微型端口驱动程序从初始化处理程序返回成功后,从初始化例程调用了停止。

特定微型端口适配器块的地址。 请使用此地址运行 !ndiskd.netadapter 获取详细信息。

NDIS_MINIPORT_INTERRUPT 的地址

0

0x0E

NDIS_BUGCHECK_HALT_INIT_WITHOUT_CANCEL_TIMER

微型端口驱动程序在未成功取消其所有计时器的情况下停止。

在微型端口驱动程序从初始化处理程序返回成功后,从初始化例程调用了停止。

特定微型端口适配器块的地址。 请使用此地址运行 !ndiskd.netadapter 获取详细信息。

微型端口驱动程序计时器队列的地址 (NDIS_MINIPORT_TIMER)

0

0x0F

NDIS_BUGCHECK_RESET_COMPLETE_UNEXPECTED

一个微型端口驱动程序调用了 NdisMResetComplete,没有任何挂起的重置请求。

特定微型端口适配器块的地址。 请使用此地址运行 !ndiskd.netadapter 获取详细信息。

重置状态

AddressingReset (BOOLEAN)

0x10

NDIS_BUGCHECK_PM_INIT_FAILED_NO_INT_DEREGISTER

从低功率状态恢复后,微型端口驱动程序在没有取消注册其中断的情况下初始化失败。

特定微型端口适配器块的地址。 请使用此地址运行 !ndiskd.netadapter 获取详细信息。

NDIS_MINIPORT_INTERRUPT 的地址

0

0x11

NDIS_BUGCHECK_PM_INIT_FAILED_NO_CANCEL_TIMER

从低功率状态恢复后,微型端口驱动程序在未成功取消其所有计时器的情况下初始化失败。

特定微型端口适配器块的地址。 请使用此地址运行 !ndiskd.netadapter 获取详细信息。

微型端口驱动程序计时器队列的地址 (NDIS_MINIPORT_TIMER)

0

0x12

NDIS_BUGCHECK_NFILTER_RECVD_PACKET_BAD_REF_COUNT

微型端口驱动程序指示它使用协议堆栈当前正在使用的数据包描述符收到了数据包。

通过检查数据包引用计数捕获。

特定微型端口适配器块的地址。 请使用此地址运行 !ndiskd.netadapter 获取详细信息。

驱动程序使用的数据包描述符的地址。 请使用此地址运行 !ndiskd.pkt 获取详细信息。

包含此数据包描述符的数据包数组的地址

0x13

NDIS_BUGCHECK_TFILTER_RECVD_PACKET_BAD_REF_COUNT

令牌环微型端口驱动程序指示它使用协议堆栈当前正在使用的数据包描述符收到了数据包。

通过检查数据包引用计数捕获。

特定微型端口适配器块的地址。 请使用此地址运行 !ndiskd.netadapter 获取详细信息。

驱动程序使用的数据包描述符的地址。 请使用此地址运行 !ndiskd.pkt 获取详细信息。

包含此数据包描述符的数据包数组的地址

0x14

NDIS_BUGCHECK_WAIT_EVENT_HIGH_IRQL

NDIS 驱动程序在非法 IRQL 下调用了 NdisWaitEvent

实际 IRQL

0

0

0x15

NDIS_BUGCHECK_INVALID_NDIS5_CALL

微型端口驱动程序调用了为旧版驱动程序保留的 API。 驱动程序应仅调用 NDIS 6.x API。

特定微型端口适配器块的地址。 请使用此地址运行 !ndiskd.netadapter 获取详细信息。

0

0

0x16

NDIS_BUGCHECK_INVALID_OPEN_IN_BIND_CONTEXT

协议驱动程序在绑定过程中未正确打开适配器。

特定协议的地址。 请使用此地址运行 !ndiskd.protocol 获取详细信息。

协议驱动程序分配的上下文区域的地址。

强制转换到 ndis!NDIS_BIND_CONTEXT。

打开句柄的地址。 请使用此地址运行 !ndiskd.mopen 获取详细信息。

0x17

NDIS_BUGCHECK_IFPROVIDER_DEREGISTER_UNEXPECTED

接口提供程序在未先删除其所有接口的情况下调用了 NdisIfDeregisterProvider

接口提供程序句柄的地址。 请使用此地址运行 !ndiskd.ifprovider 获取详细信息。

0

0

0x1B

NDIS_BUGCHECK_IF_STACK_TABLE_LOOP

驱动程序试图将接口添加到 ifStackTable,但这样做会导致循环。 ifStackTable 不能有循环。 运行 !ndiskd.ifstacktable 查看当前表(调用 NdisIfAddIfStackEntry)。

添加到表中的 HigherLayerIfIndex

添加到表中的 LowerLayerIfIndex

0

0x1C

NDIS_BUGCHECK_MINIPORT_FAILED_OID_WHICH_MUST_SUCCEED

微型端口驱动程序未成功处理一个不得失败的 OID 请求。 这样做会泄漏内存或其他资源。

特定微型端口适配器块的地址。 请使用此地址运行 !ndiskd.netadapter 获取详细信息。

失败的 OID。 使用 !ndiskd.help 查找此 OID 的名称。

完成 OID 请求的失败状态代码 (NDIS_STATUS_XXX)

0x1D

NDIS_BUGCHECK_OID_REQUEST_INVALID_BUFFER

微型端口驱动程序或筛选器驱动程序非法完成了 OID 请求。 检查 BytesWritten 是否不大于缓冲区的整个长度。

特定微型端口适配器或筛选器模块块的地址。 请使用此地址运行 !ndiskd.netadapter !ndiskd.filter 获取详细信息。

非法完成的 NDIS_OID_REQUEST 的地址。 使用 !ndiskd.oid 检查它。

0

0x1E

NDIS_BUGCHECK_REFCOUNT_IMBALANCE

NDIS 检测到内部 refcount 中有错误。 这可能是由引用下溢(取消引用多于引用)或标记不匹配引起的。

0

内部句柄。 使用 !ndiskd.ndisref 或强制转换为 ndis!NDIS_REFCOUNT_BLOCK。

当前 reftag 值

0x1F

NDIS_BUGCHECK_ILLEGAL_MINIPORT_STATE_TRANSITION

微型端口驱动程序非法完成了状态转换。

失败的项。 可能的值:

  1. NDIS_BUGCHECK_ILLEGAL_MINIPORT_STATE_TRANSITION_PAUSE_COMPLETE

    微型端口调用了 NdisMPauseComplete,但没有挂起的暂停操作。

  2. NDIS_BUGCHECK_ILLEGAL_MINIPORT_STATE_TRANSITION_RESTART_COMPLETE

    微型端口调用了 NdisMRestartComplete,但没有挂起的重启操作。

特定微型端口适配器块的地址。 请使用此地址运行 !ndiskd.netadapter 获取详细信息。

0

0x20

NDIS_BUGCHECK_STATUS_INDICATION_INVALID_BUFFER

微型端口驱动程序或筛选器驱动程序指示非法 NDIS_STATUS_INDICATION

状态指示的类型。 请使用此代码运行 !ndiskd.help 获取详细信息。

指示此非法状态指示的驱动程序实例的句柄。 请使用此句柄运行 !ndiskd.netadapter !ndiskd.filter获取详细信息。

状态指示有效负载的地址。 其解释取决于状态指示的类型。

0x21

NDIS_BUGCHECK_INVALID_OBJECT_HEADER

驱动程序创建了无效的 NDIS_OBJECT_HEADER

指示非法状态指示的驱动程序句柄。 使用此句柄运行 !ndiskd.minidriver!ndiskd.filterdriver,了解详细信息。

包含格式错误标头的对象。 其解释取决于所调用的 API。 例如,如果驱动程序调用了 NdisAllocateCloneOidRequest,则将该对象强制转换为 ndis!NDIS_OID_REQUEST。

0

0x22

NDIS_BUGCHECK_ILLEGAL_NET_PNP_EVENT

微型端口驱动程序或筛选器驱动程序指示非法 NET_PNP_EVENT_NOTIFICATION

指示非法状态指示的驱动程序句柄。 使用此句柄运行 !ndiskd.minidriver!ndiskd.filterdriver,了解详细信息。

强制转换为 NET_PNP_EVENT_NOTIFICATION

0

0x23

NDIS_BUGCHECK_PD_ERROR

在 Packet Direct 数据路径中检测到错误。

bugcheck 的子类型。 可能的值:

  1. NDIS_BUGCHECK_PD_ERROR_EC_THREAD_MISMATCH

    调用 API 的线程有误。

  2. NDIS_BUGCHECK_PD_ERROR_ILLEGAL_ARM_BY_CLIENT

    PD 客户端试图在非法状态下武装提供程序。

  3. NDIS_BUGCHECK_PD_ERROR_ILLEGAL_ARM_NOTIFICATION

    PD 提供程序在未布防的情况下非法触发了排空通知。

  4. NDIS_BUGCHECK_PD_ERROR_ILLEGAL_ARM_NOTIFICATION_VIA_ISR

    PD 提供程序在未布防的情况下非法触发了 ISR 排空通知。

  5. NDIS_BUGCHECK_PD_ERROR_ILLEGAL_THUNK_BY_LWF

    筛选器驱动程序试图干扰 Packet Direct 数据路径。

  6. NDIS_BUGCHECK_PD_ERROR_ILLEGAL_BM_GROUP_REQUEST

    PD 提供程序非法试图将自己从缓冲区管理器组中删除。

  7. NDIS_BUGCHECK_PD_ERROR_ILLEGAL_PD_BUFFER_SETUP

    PD 缓冲区设置请求格式错误。

参数 3 的值取决于参数 2 的值。 此列表中的每个数字都与参数 2 中的相同数字相对应。

  1. 强制转换为 NDIS_PD_EC
  2. 强制转换为 NDIS_PD_QUEUE_TRACKER
  3. 强制转换为 NDIS_PD_QUEUE_TRACKER
  4. 强制转换为 NDIS_PD_QUEUE_TRACKER
  5. 特定筛选器模块的句柄。 请使用此句柄运行 !ndiskd.filter,获取详细信息。
  6. 缓冲区管理器组(如果已知)
  7. 源 PD_MEMORY_HANDLE 或 PD_BUFFER

参数 4 的值取决于参数 2 的值。 此列表中的每个数字都与参数 2 中的相同数字相对应。

  1. 预期的 ETHREAD
  2. PD 客户端的句柄
  3. PD 提供程序的句柄。 请使用此句柄运行 !ndiskd.netadapter,获取详细信息。
  4. PD 提供程序的句柄。 请使用此句柄运行 !ndiskd.netadapter,获取详细信息。
  5. PD 提供程序的句柄。 请使用此句柄运行 !ndiskd.netadapter,获取详细信息。
  6. 如果参数 3 为 0,这就是提供程序句柄。

    如果参数 3 为非零,则表明 PD 客户端尚未释放所有分配,这就是 PD 客户端句柄。

  7. 目标 PD_BUFFER

0x24

NDIS_BUGCHECK_UNEXPECTED_FAILURE

内部操作意外失败。 这可能是 NDIS.SYS 本身的 Bug。

操作失败。 可能的值:

0x01 : NDIS_BUGCHECK_UNEXPECTED_FAILURE_KEWAITFORSINGLEOBJECT

对 KeWaitForSingleObject 的调用失败。

失败状态代码

0

0x25

NDIS_BUGCHECK_WATCHDOG

管理网络堆栈的尝试耗时过长。 当 NDIS 调用其他驱动程序时,NDIS 会启动监视器计时器,以确保调用及时完成。 如果调用时间过长,NDIS 会注入 Bug 检查。

这可能是由简单的死锁造成的。 使用“!stacks 2 ndis”或类似命令查看是否有可疑线程。 请特别注意 NDIS_WATCHDOG_TRIAGE_BLOCK中的 PrimaryThread。

这可能是 NBL 丢失造成的,在这种情况下 !ndiskd.pendingnbls 可能会有所帮助。 检查使用 !ndiskd.oid 卡住的 OID。

操作耗时过长。 可能的值:

  • 0x01 : NDIS_BUGCHECK_WATCHDOG_PROTOCOL_PAUSE

    暂停协议驱动程序时出现超时。

  • 0x02 : NDIS_BUGCHECK_WATCHDOG_PROTOCOL_NETPNPEVENT

    向协议驱动程序传送 NET_PNP_EVENT_NOTIFICATION 时出现超时。

  • 0x03 : NDIS_BUGCHECK_WATCHDOG_PROTOCOL_STATUS_INDICATION

    向协议驱动程序传送状态指示时出现超时。

  • 0x04 : NDIS_BUGCHECK_WATCHDOG_PROTOCOL_UNBIND

    取消绑定协议驱动程序时出现超时。

  • 0x11 : NDIS_BUGCHECK_WATCHDOG_FILTER_PAUSE

    暂停筛选器驱动程序时出现超时。

  • 0x12 : NDIS_BUGCHECK_WATCHDOG_FILTER_NETPNPEVENT

    向筛选器驱动程序传送 NET_PNP_EVENT_NOTIFICATION 时出现超时。

  • 0x13 : NDIS_BUGCHECK_WATCHDOG_FILTER_STATUS_INDICATION

    向筛选器驱动程序传送状态指示时出现超时。

  • 0x14 : NDIS_BUGCHECK_WATCHDOG_FILTER_DETACH

    拆离筛选器驱动程序时出现超时。

  • 0x21 : NDIS_BUGCHECK_WATCHDOG_MINIPORT_PAUSE

    暂停微型端口适配器时出现超时。

  • 0x22 : NDIS_BUGCHECK_WATCHDOG_MINIPORT_HALT

    停止微型端口适配器时出现超时。

  • 0x23 : NDIS_BUGCHECK_WATCHDOG_MINIPORT_OID

    向微型端口适配器传送 OID 请求时超时。

  • 0x24 : NDIS_BUGCHECK_WATCHDOG_FILTER_OID

    向筛选器驱动程序传送 OID 请求时出现超时。

  • 0x25 : NDIS_BUGCHECK_WATCHDOG_MINIPORT_IDLE

    闲置微型端口适配器时出现超时。

  • 0x26 : NDIS_BUGCHECK_WATCHDOG_CANCEL_IDLE

    取消微型端口适配器上的空闲请求时出现超时。

强制转换为 ndis!NDIS_WATCHDOG_TRIAGE_BLOCK。 有用的字段:

  • StartTime 显示 KeQueryInterruptTime 返回的操作启动时间,以 100ns 为单位。
  • TimeoutMilliseconds 显示在触发此 bugcheck 之前,NDIS 至少等待了多长时间。
  • TargetObject 是 NDIS 正在等待的协议、筛选器模块或微型端口适配器的句柄。 请使用此句柄运行 !ndiskd.protocol!ndiskd.filter!ndiskd.netadapter,获取更多信息。
  • PrimaryThread 是 NDIS 启动操作的线程。 这通常是第一个查找位置,尽管如果操作是异步处理的,线程可能已去往其他位置。

参数 4 的值取决于参数 2 的值。 此列表中的每个数字与参数 2 中相同的十六进制值相对应。

  • 0x01 : 0
  • 0x02:卡住事件的 NET_PNP_EVENT_CODE。 有关这些代码的详细信息,请参阅 NET_PNP_EVENT
  • 0x03:卡住指示的 NDIS_STATUS 代码。 使用 !ndiskd.help 对其进行解码。
  • 0x04 : 0
  • 0x11 : 0
  • 0x12:卡住事件的 NET_PNP_EVENT_CODE。 有关可能的值,请参阅此列表中第 2 项的上一个值列表。
  • 0x13:卡住指示的 NDIS_STATUS 代码。 使用 !ndiskd.help 对其进行解码。
  • 0x14 : 0
  • 0x21 : 0
  • 0x22 : 0
  • 0x23:卡住请求的 OID 代码。 使用 !ndiskd.help 对其进行解码。
  • 0x24:卡住请求的 OID 代码。 使用 !ndiskd.help 对其进行解码。
  • 0x25 : 0
  • 0x26 : 0

0x26

NDIS_BUGCHECK_INVALID_OID_COMPLETION

微型端口驱动程序试图完成当前未在该微型端口驱动程序上挂起的 OID 请求。 这可能是由于驱动程序尝试多次完成同一请求导致的。

导致 bugcheck 的微型端口驱动程序句柄。 请使用此句柄运行 !ndiskd.minidriver,获取详细信息。

微型端口驱动程序正在尝试完成的NDIS OID 请求。 可以尝试使用此请求运行 !ndiskd.oid,但此时内存可能无效。

0

0x27

NDIS_BUGCHECK_LEAKED_NBL

驱动程序泄露了 NET_BUFFER_LIST 结构。 请通过 !ndiskd.pendingnbls 查看此驱动程序上仍在挂起的任何 NBL。

检测到泄漏的位置。 可能的值:

  • 0x01:NBL 跟踪器检测到泄漏。 当前正在取消注册或取消绑定的驱动程序是最有可能的原因。 查看 bugchecking 线程的调用堆栈。 驱动程序仍持有活动 NBL 时,不得取消绑定或取消注册。

0

0

原因

参数 1 表示 BUGCODE_NDIS_DRIVER Bug 检查的具体原因。

注解

BUGCODE_NDIS_DRIVER Bug 检查表示网络驱动程序中的问题。 此问题通常是由 NDIS 微型端口驱动程序造成的。 可以使用 !ndiskd.netadapter获取 NDIS 微型端口驱动程序的完整列表。 可以使用 !ndiskd.netreport 查看网络堆栈的全貌。

此Bug 检查代码仅出现在 Microsoft Windows Server 2003 及更高版本的 Windows 系统中。 在 Windows 2000 和 Windows XP 中,相应的代码是 Bug 检查 0xD2 (BUGCODE_ID_DRIVER)。