Bug Check 0x7C: BUGCODE_NDIS_DRIVER

The BUGCODE_NDIS_DRIVER bug check has a value of 0x0000007C. This bug check indicates that the operating system detected an error in a networking 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.

BUGCODE_NDIS_DRIVER Parameters

Parameter 1 indicates the type of violation. The meaning of the other parameters depends on the value of Parameter 1. If a Parameter's value is "0," that means it is not used.

Parameter 1 Parameter 1 Value and Cause of Error Parameter 2 Parameter 3 Parameter 4

0x01

NDIS_BUGCHECK_ALLOCATE_SHARED_MEM_HIGH_IRQL

A driver called NdisMAllocateSharedMemory at a raised IRQL.

The address of the specific miniport adapter block. Run !ndiskd.netadapter with this address for more information.

The length of the requested shared memory

The current IRQL

0x02

NDIS_BUGCHECK_SHARED_MEM_CORRUPTION

During a call to NdisMAllocateSharedMemory, NDIS detected that a previously-allocated shared memory page had been corrupted.

The address of the specific miniport adapter block. Run !ndiskd.netadapter with this address for more information.

The shared memory page that was corrupted

The address of a NDIS_WRAPPER_CONTEXTE that keeps track of shared memory allocations by the driver

0x03

NDIS_BUGCHECK_FREE_INVALID_SHARED_MEM

A miniport driver called NdisMFreeSharedMemory (Async) with a shared memory address that had already been freed.

The address of the specific miniport adapter block. Run !ndiskd.netadapter with this address for more information.

The page from which this shared memory was allocated

The virtual address of the shared memory

0x04

NDIS_BUGCHECK_UNLOAD_DRIVER_INVALID_PARAMETER

AddDevice was called with a driver that is not on the list of drivers that are registered with NDIS.

Enabled only on special instrumented NDIS.

The address of the NDIS_M_DRIVER_BLOCK

The address of the DRIVER_OBJECT

0

0x05

NDIS_BUGCHECK_RECVD_PACKET_IN_USE_BAD_STACK_LOCATION

An Ethernet driver indicated that it received a packet using a packet descriptor that was currently in use by the protocol stack.

Caught by checking stack packet location.

The address of the specific miniport adapter block. Run !ndiskd.netadapter with this address for more information.

The address of the packet descriptor used by the driver. Run !ndiskd.pkt with this address for more information.

The address of the packet array that contained this packet descriptor

0x06

NDIS_BUGCHECK_RECVD_PACKET_IN_USE_BAD_REF_COUNT

An Ethernet driver indicated that it received a packet using a packet descriptor that was currently in use by the protocol stack.

Caught by checking packet reference count.

The address of the specific miniport adapter block. Run !ndiskd.netadapter with this address for more information.

The address of the packet descriptor used by the driver. Run !ndiskd.pkt with this address for more information.

The address of the packet array that contained this packet descriptor

0x07

An FDDI driver indicated that it received a packet by using a packet descriptor that was currently in use by the protocol stack.

Caught by checking reference count.

The address of the specific miniport adapter block. Run !ndiskd.netadapter with this address for more information.

The address of the packet descriptor used by the driver. Run !ndiskd.pkt with this address for more information.

The address of the packet array that contained this packet descriptor

0x08

NDIS_BUGCHECK_HALT_WITHOUT_INTERRUPT_DEREGISTER

A miniport driver did not deregister its interrupt during the halt process.

The address of the specific miniport adapter block. Run !ndiskd.netadapter with this address for more information.

The address of the NDIS_MINIPORT_INTERRUPT

0

0x09

NDIS_BUGCHECK_HALT_WITHOUT_CANCEL_TIMER

A miniport driver stopped without successfully canceling all its timers.

The address of the specific miniport adapter block. Run !ndiskd.netadapter with this address for more information.

The address of the miniport driver's timer queue (NDIS_MINIPORT_TIMER)

0

0x0A

NDIS_BUGCHECK_DRIVER_UNLOAD_UNEXPECTED

A miniport driver is getting unloaded prematurely.

The address of the NDIS_M_DRIVER_BLOCK

The address of the DRIVER_OBJECT

The reference count for the miniport driver

0x0B

NDIS_BUGCHECK_INIT_FAILED_WITHOUT_INTERRUPT_DEREGISTER

A miniport driver failed its initialization without deregistering its interrupt.

The address of the specific miniport adapter block. Run !ndiskd.netadapter with this address for more information.

The address of the NDIS_MINIPORT_INTERRUPT

0

0x0C

NDIS_BUGCHECK_INIT_FAILED_WITHOUT_CANCEL_TIMER

A miniport driver failed its initialization without successfully canceling all its timers.

The address of the specific miniport adapter block. Run !ndiskd.netadapter with this address for more information.

The address of the miniport driver's timer queue (NDIS_MINIPORT_TIMER)

0

0x0D

NDIS_BUGCHECK_HALT_INIT_WITHOUT_INTERRUPT_DEREGISTER

A miniport driver did not deregister its interrupt during the halt process.

The halt was called from the initialize routine after the miniport driver returned success from its initialize handler.

The address of the specific miniport adapter block. Run !ndiskd.netadapter with this address for more information.

The address of the NDIS_MINIPORT_INTERRUPT

0

0x0E

NDIS_BUGCHECK_HALT_INIT_WITHOUT_CANCEL_TIMER

A miniport driver stopped without successfully canceling all its timers.

The halt was called from the initialize routine after the miniport driver returned success from its initialize handler.

The address of the specific miniport adapter block. Run !ndiskd.netadapter with this address for more information.

The address of the miniport driver's timer queue (NDIS_MINIPORT_TIMER)

0

0x0F

NDIS_BUGCHECK_RESET_COMPLETE_UNEXPECTED

A miniport driver called NdisMResetComplete without any pending reset request.

The address of the specific miniport adapter block. Run !ndiskd.netadapter with this address for more information.

The reset status

AddressingReset (BOOLEAN)

0x10

NDIS_BUGCHECK_PM_INIT_FAILED_NO_INT_DEREGISTER

After resuming from a low-power state, a miniport driver failed its initialization without deregistering its interrupt.

The address of the specific miniport adapter block. Run !ndiskd.netadapter with this address for more information.

The address of the NDIS_MINIPORT_INTERRUPT

0

0x11

NDIS_BUGCHECK_PM_INIT_FAILED_NO_CANCEL_TIMER

After resuming from a low-power state, a miniport driver failed its initialization without successfully canceling all its timers.

The address of the specific miniport adapter block. Run !ndiskd.netadapter with this address for more information.

The address of the miniport driver's timer queue (NDIS_MINIPORT_TIMER)

0

0x12

NDIS_BUGCHECK_NFILTER_RECVD_PACKET_BAD_REF_COUNT

A miniport driver indicated that it received a packet using a packet descriptor that was currently in use by the protocol stack.

Caught by checking packet reference count.

The address of the specific miniport adapter block. Run !ndiskd.netadapter with this address for more information.

The address of the packet descriptor used by the driver. Run !ndiskd.pkt with this address for more information.

The address of the packet array that contained this packet descriptor

0x13

NDIS_BUGCHECK_TFILTER_RECVD_PACKET_BAD_REF_COUNT

A Token-Ring miniport driver indicated that it received a packet using a packet descriptor that was currently in use by the protocol stack.

Caught by checking packet reference count.

The address of the specific miniport adapter block. Run !ndiskd.netadapter with this address for more information.

The address of the packet descriptor used by the driver. Run !ndiskd.pkt with this address for more information.

The address of the packet array that contained this packet descriptor

0x14

NDIS_BUGCHECK_WAIT_EVENT_HIGH_IRQL

An NDIS driver called NdisWaitEvent at an illegal IRQL

The actual IRQL

0

0

0x15

NDIS_BUGCHECK_INVALID_NDIS5_CALL

A miniport driver called an API that is reserved for older drivers. The driver should only call NDIS 6.x APIs.

The address of the specific miniport adapter block. Run !ndiskd.netadapter with this address for more information.

0

0

0x16

NDIS_BUGCHECK_INVALID_OPEN_IN_BIND_CONTEXT

A protocol driver improperly opened an adapter during binding.

The address of the specific protocol. Run !ndiskd.protocol with this address for more information.

The address of the context area that is allocated by the protocol driver.

Cast to ndis!NDIS_BIND_CONTEXT.

The address of the open handle. Run !ndiskd.mopen with this address for more information.

0x17

NDIS_BUGCHECK_IFPROVIDER_DEREGISTER_UNEXPECTED

An Interface Provider called NdisIfDeregisterProvider without first removing all its Interfaces.

The address of the interface provider handle. Run !ndiskd.ifprovider with this address for more information.

0

0

0x1B

NDIS_BUGCHECK_IF_STACK_TABLE_LOOP

A driver attempted to add an Interface to the ifStackTable, but doing so would cause a cycle. The ifStackTable must not have cycles. Run !ndiskd.ifstacktable to see the current table (prior to this call to NdisIfAddIfStackEntry).

The HigherLayerIfIndex being added to the table

The LowerLayerIfIndex being added to the table

0

0x1C

NDIS_BUGCHECK_MINIPORT_FAILED_OID_WHICH_MUST_SUCCEED

A miniport driver failed an OID request that must not fail. Doing so would leak memory or other resources.

The address of the specific miniport adapter block. Run !ndiskd.netadapter with this address for more information.

The OID that was failed. Use !ndiskd.help to find the name of this OID.

The failure status code (NDIS_STATUS_XXX) with which the OID request was completed

0x1D

NDIS_BUGCHECK_OID_REQUEST_INVALID_BUFFER

A miniport driver or filter driver has completed an OID request illegally. Check that BytesWritten is not greater than the entire length of the buffer.

The address of the specific miniport adapter or filter module block. Run !ndiskd.netadapter or !ndiskd.filter with this address for more information.

The address to the NDIS_OID_REQUEST that was completed illegally. Inspect it with !ndiskd.oid.

0

0x1E

NDIS_BUGCHECK_REFCOUNT_IMBALANCE

NDIS has detected an error in an internal refcount. This can be caused by a refcount underflow (more dereferences than references), or by a tag mismatch.

0

Internal handle. Use !ndiskd.ndisref or cast to ndis!NDIS_REFCOUNT_BLOCK.

The current reftag value

0x1F

NDIS_BUGCHECK_ILLEGAL_MINIPORT_STATE_TRANSITION

A miniport driver completed a state transition illegally.

What failed. Possible values:

  1. NDIS_BUGCHECK_ILLEGAL_MINIPORT_STATE_TRANSITION_PAUSE_COMPLETE

    The miniport called NdisMPauseComplete but there was no pending Pause operation.

  2. NDIS_BUGCHECK_ILLEGAL_MINIPORT_STATE_TRANSITION_RESTART_COMPLETE

    The miniport called NdisMRestartComplete but there was no pending Restart operation.

The address of the specific miniport adapter block. Run !ndiskd.netadapter with this address for more information.

0

0x20

NDIS_BUGCHECK_STATUS_INDICATION_INVALID_BUFFER

A miniport driver or filter driver indicated an illegal NDIS_STATUS_INDICATION.

The type of the status indication. Run !ndiskd.help with this code for more information.

The handle of the driver instance that indicated this illegal status indication. Run !ndiskd.netadapter or !ndiskd.filter with this handle for more information.

The address of the status indication payload. Its interpretation depends on the type of status indication.

0x21

NDIS_BUGCHECK_INVALID_OBJECT_HEADER

A driver created an invalid NDIS_OBJECT_HEADER.

The handle of the driver that indicated the illegal status indication. Run !ndiskd.minidriver or !ndiskd.filterdriver with this handle for more information.

The object with the malformed header. Its interpretation depends on the API being called. For example, if the driver called NdisAllocateCloneOidRequest, then cast the object to ndis!NDIS_OID_REQUEST.

0

0x22

NDIS_BUGCHECK_ILLEGAL_NET_PNP_EVENT

A miniport driver or filter driver indicated an illegal NET_PNP_EVENT_NOTIFICATION.

The handle of the driver that indicated the illegal status indication. Run !ndiskd.minidriver or !ndiskd.filterdriver with this handle for more information.

Cast to NET_PNP_EVENT_NOTIFICATION

0

0x23

NDIS_BUGCHECK_PD_ERROR

An error was detected in the Packet Direct datapath.

The subtype of the bugcheck. Possible values:

  1. NDIS_BUGCHECK_PD_ERROR_EC_THREAD_MISMATCH

    An API was called on the wrong thread.

  2. NDIS_BUGCHECK_PD_ERROR_ILLEGAL_ARM_BY_CLIENT

    A PD client attempted to arm the provider while in an illegal state.

  3. NDIS_BUGCHECK_PD_ERROR_ILLEGAL_ARM_NOTIFICATION

    A PD provider illegally triggered a drain notification while it was not armed.

  4. NDIS_BUGCHECK_PD_ERROR_ILLEGAL_ARM_NOTIFICATION_VIA_ISR

    A PD provider illegally triggered an ISR drain notification while it was not armed.

  5. NDIS_BUGCHECK_PD_ERROR_ILLEGAL_THUNK_BY_LWF

    A filter driver attempted to interfere with the Packet Direct datapath.

  6. NDIS_BUGCHECK_PD_ERROR_ILLEGAL_BM_GROUP_REQUEST

    A PD provider illegally attempted to remove itself from a buffer manager group.

  7. NDIS_BUGCHECK_PD_ERROR_ILLEGAL_PD_BUFFER_SETUP

    A PD buffer setup request was malformed.

The value of Parameter 3 depends on the value of Parameter 2. Each number in this list corresponds to the same number in Parameter 2.

  1. Cast to NDIS_PD_EC
  2. Cast to NDIS_PD_QUEUE_TRACKER
  3. Cast to NDIS_PD_QUEUE_TRACKER
  4. Cast to NDIS_PD_QUEUE_TRACKER
  5. The handle of the specific filter module. Run !ndiskd.filter with this handle for more information.
  6. The buffer manager group, if known
  7. The source PD_MEMORY_HANDLE or PD_BUFFER

The value of Parameter 4 depends on the value of Parameter 2. Each number in this list corresponds to the same number in Parameter 2.

  1. The ETHREAD that was expected
  2. The handle to the PD client
  3. The handle to the PD provider. Run !ndiskd.netadapter with this handle for more information.
  4. The handle to the PD provider. Run !ndiskd.netadapter with this handle for more information.
  5. The handle to the PD provider. Run !ndiskd.netadapter with this handle for more information.
  6. If Parameter 3 is 0, this is the provider handle.

    If Parameter 3 is non-zero, the PD client has not freed all allocations yet, and this is the PD client handle.

  7. The target PD_BUFFER

0x24

NDIS_BUGCHECK_UNEXPECTED_FAILURE

An internal operation failed unexpectedly. This is likely to be a bug in NDIS.SYS itself.

The operation that failed. Possible values:

0x01 : NDIS_BUGCHECK_UNEXPECTED_FAILURE_KEWAITFORSINGLEOBJECT

A call to KeWaitForSingleObject failed.

The failure status code

0

0x25

NDIS_BUGCHECK_WATCHDOG

An attempt to manage the network stack has taken too long. When NDIS calls out into other drivers, NDIS starts a watchdog timer to ensure the call completes promptly. If the call takes too long, NDIS injects a bugcheck.

This can be caused by a simple deadlock. Look with "!stacks 2 ndis" or similar to see if any threads look suspicious. Pay special attention to the PrimaryThread from the NDIS_WATCHDOG_TRIAGE_BLOCK.

This can be caused by lost NBLs, in which case !ndiskd.pendingnbls may help. Check for OIDs that are stuck using !ndiskd.oid.

The operation that took too long. Possible values:

  • 0x01 : NDIS_BUGCHECK_WATCHDOG_PROTOCOL_PAUSE

    There was a timeout while pausing a protocol driver.

  • 0x02 : NDIS_BUGCHECK_WATCHDOG_PROTOCOL_NETPNPEVENT

    There was a timeout while delivering a NET_PNP_EVENT_NOTIFICATION to a protocol driver.

  • 0x03 : NDIS_BUGCHECK_WATCHDOG_PROTOCOL_STATUS_INDICATION

    There was a timeout while delivering a status indication to a protocol driver.

  • 0x04 : NDIS_BUGCHECK_WATCHDOG_PROTOCOL_UNBIND

    There was a timeout while unbinding a protocol driver.

  • 0x11 : NDIS_BUGCHECK_WATCHDOG_FILTER_PAUSE

    There was a timeout while pausing a filter driver.

  • 0x12 : NDIS_BUGCHECK_WATCHDOG_FILTER_NETPNPEVENT

    There was a timeout while delivering a NET_PNP_EVENT_NOTIFICATION to a filter driver.

  • 0x13 : NDIS_BUGCHECK_WATCHDOG_FILTER_STATUS_INDICATION

    There was a timeout while delivering a status indication to a filter driver.

  • 0x14 : NDIS_BUGCHECK_WATCHDOG_FILTER_DETACH

    There was a timeout while detaching a filter driver.

  • 0x21 : NDIS_BUGCHECK_WATCHDOG_MINIPORT_PAUSE

    There was a timeout while pausing a miniport adapter.

  • 0x22 : NDIS_BUGCHECK_WATCHDOG_MINIPORT_HALT

    There was a timeout while halting a miniport adapter.

  • 0x23 : NDIS_BUGCHECK_WATCHDOG_MINIPORT_OID

    There was a timeout while delivering an OID request to a miniport adapter.

  • 0x24 : NDIS_BUGCHECK_WATCHDOG_FILTER_OID

    There was a timeout while delivering an OID request to a filter driver.

  • 0x25 : NDIS_BUGCHECK_WATCHDOG_MINIPORT_IDLE

    There was a timeout while idling a miniport adapter.

  • 0x26 : NDIS_BUGCHECK_WATCHDOG_CANCEL_IDLE

    There was a timeout while canceling an idle request on a miniport adapter.

Cast to ndis!NDIS_WATCHDOG_TRIAGE_BLOCK. Useful fields:

  • StartTime shows what time the operation started, in 100ns units, as returned by KeQueryInterruptTime.
  • TimeoutMilliseconds shows how long NDIS waited, at a minimum, before triggering this bugcheck.
  • TargetObject is a handle to the protocol, filter module, or miniport adapter that NDIS is waiting on. Run !ndiskd.protocol, !ndiskd.filter, or !ndiskd.netadapter with this handle for more information.
  • PrimaryThread is the thread on which NDIS initiated the operation. Usually, this is the first place to look, although the thread may have gone elsewhere if the operation is being handled asynchronously.

The value of Parameter 4 depends on the value of Parameter 2. Each number in this list corresponds to the same hexadecimal value in Parameter 2.

  • 0x01 : 0
  • 0x02 : The NET_PNP_EVENT_CODE of the stuck event. For more information about these codes, see NET_PNP_EVENT..
  • 0x03 : The NDIS_STATUS code of the stuck indication. Use !ndiskd.help to decode it.
  • 0x04 : 0
  • 0x11 : 0
  • 0x12 : The NET_PNP_EVENT_CODE of the stuck event. For possible values, see the previous list of values for item 2 in this list.
  • 0x13 : The NDIS_STATUS code of the stuck indication. Use !ndiskd.help to decode it.
  • 0x14 : 0
  • 0x21 : 0
  • 0x22 : 0
  • 0x23 : The OID code of the stuck request. Use !ndiskd.help to decode it.
  • 0x24 : The OID code of the stuck request. Use !ndiskd.help to decode it.
  • 0x25 : 0
  • 0x26 : 0

0x26

NDIS_BUGCHECK_INVALID_OID_COMPLETION

A miniport driver attempted to complete an OID request that is not currently pending on that miniport driver. This can be caused by the driver trying to complete the same request more than one time.

The miniport driver handle that caused the bugcheck. Run !ndiskd.minidriver with this handle for more information.

The NDIS OID request the miniport driver was trying to complete. You can try to run !ndiskd.oid with this request but the memory might not be valid at this point.

0

0x27

NDIS_BUGCHECK_LEAKED_NBL

A driver has leaked a NET_BUFFER_LIST structure. Check with !ndiskd.pendingnbls to see any NBLs that are still pending on this driver.

Where the leak was detected. Possible values:

  • 0x01 : The leak was detected by the NBL tracker. The driver that is currently deregistering or unbinding is the most likely cause. Look at the callstack of the bugchecking thread. Drivers must not unbind or deregister while they still hold active NBLs.

0

0

Cause

Parameter 1 indicates the specific cause of the BUGCODE_NDIS_DRIVER bug check.

Remarks

The BUGCODE_NDIS_DRIVER bugcheck indendifies problems in network drivers. Often, the problem is caused by a NDIS miniport driver. You can get a complete list of NDIS miniport drivers by using !ndiskd.netadapter. You can get a bigger picture overview of the network stack with !ndiskd.netreport.

This bug check code occurs only on Microsoft Windows Server 2003 and later versions of Windows. In Windows 2000 and Windows XP, the corresponding code is bug check 0xD2 (BUGCODE_ID_DRIVER).