This Microsoft´s article contains a list of bug codes, listed in order of bug code number. Some codes include parameter definitions and explanations.
Bug codes with no descriptions are usually from checked builds of Windows
NT. If you receive one of these codes, run the kernel debugger, and type
the following commands:
kb
!process 0 7
!vm
!errlog
NOTE: BUGCODES.H and EXLEVELS.H are both in the Windows NT DDK.
Code Name | Value | Description |
APC_INDEX_MISMATCH | (0x1) | This is a kernel internal error. This error could be caused by a mismatch between EnterCricticalRegion and KeLeaveCriticalRegion in a file system. |
DEVICE_QUEUE_NOT_BUSY | (0x2) | |
INVALID_AFFINITY_SET | (0x3) | |
INVALID_DATA_ACCESS_TRAP | (0x4) | |
INVALID_PROCESS_ATTACH_ATTEMPT | (0x5) | |
INVALID_PROCESS_DETACH_ATTEMPT | (0X6) | |
INVALID_SOFTWARE_INTERRUPT | (0x7) | |
IRQL_NOT_DISPATCH_LEVEL | (0x8) | |
IRQL_NOT_GREATER_OR_EQUAL | (0x9) | |
IRQL_NOT_LESS_OR_EQUAL | (0xA) | An attempt was made to touch pageable memory at a process internal
request level (IRQL) that is too high. This error is usually caused by
drivers using improper addresses. If the kernel debugger is available,
get a stack back trace.
Parameters:
|
NO_EXCEPTION_HANDLING_SUPPORT | (0xB) | |
MAXIMUM_WAIT_OBJECTS_EXCEEDED | (0xC) | |
MUTEX_LEVEL_NUMBER_VIOLATION | (0xD) | Try to identify the mutexes using the NTOS\EX\EXLEVELS.H header file.
You should be able to pinpoint the mutexes that are getting acquired
in an incorrect sequence.
Parameters:
|
NO_USER_MODE_CONTEXT | (0xE) | |
SPIN_LOCK_ALREADY_OWNED | (0xF) | |
SPIN_LOCK_NOT_OWNED | (0x10) | |
THREAD_NOT_MUTEX_OWNER | (0x11) | |
TRAP_CAUSE_UNKNOWN | (0x12) | |
EMPTY_THREAD_REAPER_LIST | (0x13) | |
CREATE_DELETE_LOCK_NOT_LOCKED | (0x14) | |
LAST_CHANCE_CALLED
_FROM_KMODE |
(0x15) | |
CID_HANDLE_CREATION | (0x16) | |
CID_HANDLE_DELETION | (0x17) | |
REFERENCE_BY_POINTER | (0x18) | |
BAD_POOL_HEADER | (0x19) | |
MEMORY_MANAGEMENT | (0x1A) | |
PFN_SHARE_COUNT | (0x1B) | |
PFN_REFERENCE_COUNT | (0x1C) | |
NO_SPIN_LOCK_AVAILABLE | (0x1D) | |
KMODE_EXCEPTION_NOT_HANDLED | (0x1E) | This is a very common bug code. Usually the exception address
pinpoints the driver or function that caused the problem. Always note
this address as well as the link date of the driver or image that
contains this address. A common error is exception code 0x80000003.
This error means a hard-coded breakpoint or assertion was hit, but the
system was booted with the /NODEBUG switch. This problem should not
occur very often. If it occurs repeatedly, make sure a debugger is
connected and the system is booted with the /DEBUG switch. On non-Intel
systems, if the address of the exception is 0XBFC0304, the bug code
is the result of a cache-parity error on the CPU. If the problem
reoccurs frequently, contact the hardware manufacturer.
Parameters:
|
SHARED_RESOURCE_CONV_ERROR | (0x1F) | |
KERNEL_APC_PENDING_DURING_EXIT | (0x20) | The key data item is the thread's APC disable count. If the count is
nonzero, it is the source of the problem. A negative value indicates
that a file system has called FsRtlEnterFileSystem more times than
FsRtlExitFileSystem. A positive value indicates that the reverse is
true. If you see this situation, check all file systems installed on
the machine. Third-party redirectors are especially suspect since they
do not receive the heavy-duty testing that NTFS, FAT, HPFS, and RDR
receive. The current IRQL should also be 0. If it is not, a driver's
cancellation routine can cause this bug code by returning at an elevated
IRQL. Always try to note what you were doing or closing and note
all the installed drivers at the time of the bug code. This symptom
is usually caused by a severe bug in a third-party driver.
Parameters:
|
IRQL QUOTA_UNDERFLOW | (0x21) | |
FILE_SYSTEM | (0x22) | |
FAT_FILE_SYSTEM | (0x23) | |
NTFS_FILE_SYSTEM | (0x24) | |
NPFS_FILE_SYSTEM | (0x25) | |
CDFS_FILE_SYSTEM | (0x26) | |
RDR_FILE_SYSTEM | (0x27) | |
CORRUPT_ACCESS_TOKEN | (0x28) | |
SECURITY_SYSTEM | (0x29) | |
INCONSISTENT_IRP | (0x2A) | An IRP was encountered that was in an inconsistent state; that is,
some field or fields of the IRP were inconsistent with the remaining
state of the IRP--for example, an IRP that was being completed, but
was still marked as being queued for a driver's device queue. This bug
code is not currently being used in the system, but exists for debugging
purposes.
Parameter:
|
PANIC_STACK_SWITCH | (0x2B) | This error indicates that the kernel mode stack was overrun. This error normally occurs when a kernel mode driver uses too much stack space. It can also occur when serious data corruption occurs in the kernel. |
PORT_DRIVER_INTERNAL | (0x2C) | |
SCSI_DISK_DRIVER_INTERNAL | (0x2D) | |
DATA_BUS_ERROR | (0x2E) | This bug code is normally caused by a parity error in the system
memory. This error can also be caused by a driver accessing a 0x8XXXXXXX
address that does not exist.
Parameters:
|
INSTRUCTION_BUS_ERROR | (0x2F) | |
SET_OF_INVALID_CONTEXT | (0x30) | |
PHASE0_INITIALIZATION_FAILED | (0x31) | System initialization failed early on. The kernel debugger is required to make sense of this error, since this code tells you almost nothing. |
PHASE1_INITIALIZATION_FAILED | (0x32) | Parameters:
|
UNEXPECTED_INITIALIZATION_CALL | (0x33) | |
CACHE_MANAGER | (0x34) | |
NO_MORE_IRP_STACK_LOCATIONS | (0x35) | A higher level driver has attempted to call a lower level driver
through the IoCallDriver()interface, but there are no more stack
locations in the packet, so the lower level driver would not be able
to access its parameters, as there are no parameters for it. This is a
disastrous situation, since the higher level driver thinks it has
filled in the parameters for the lower level driver (something it MUST
do before calling the lower level driver); however, since there is no
stack location for the latter driver, the former has written off of the
end of the packet. This means that some other memory has probably been
corrupted.
Parameter:
|
IRP DEVICE_REFERENCE_
COUNT_NOT_ZERO |
(0x36) | A device driver has attempted to delete one of its device objects from
the system but the reference count for that object was nonzero,
meaning there were still outstanding references to the device. (The
reference count indicates the number of reasons why this device object
cannot be deleted.) This is a bug in the calling device driver.
Parameter:
|
FLOPPY_INTERNAL_ERROR | (0x37) | |
SERIAL_DRIVER_INTERNAL | (0x38) | |
SYSTEM_EXIT_OWNED_MUTEX | (0x39) | |
SYSTEM_UNWIND_PREVIOUS_USER | (0x3A) | |
SYSTEM_SERVICE_EXCEPTION | (0x3B) | |
INTERRUPT_UNWIND_ATTEMPTED | (0x3C) | |
INTERRUPT_EXCEPTION_NOT_HANDLED | (0x3D) | |
MULTIPROCESSOR_CONFIGURATION
_NOT_SUPPORTED |
(0x3E) | The system has multiple processors, but they are asymmetric in relation to one another. To be symmetric, all processors must be of the same type and level. For example, trying to mix a Pentium-level processor with an 80486 would cause this error. Additionally, on x86 systems, floating-point capabilities must be present on all or no processors. |
NO_MORE_SYSTEM_PTES | (0x3F) | No System PTEs left. Usually caused by a driver not cleaning up properly. If kernel debugger is available, get a stack trace and enter the following command: !sysptes 3 |
TARGET_MDL_TOO_SMALL | (0x40) | A driver has called the IoBuildPartialMdl()function and passed it an MDL to map part of a source MDL, but the target MDL is not large enough to map the entire range of addresses requested. This is a driver bug. The source and target MDLs, as well as the address range length to be mapped, are the arguments to the IoBuildPartialMdl() function: IoBuildPartialMdl( IN PMDL SourceMdl, IN OUT PMDL TargetMdl, IN PVOID VirtualAddress, IN ULONG Length ) |
MUST_SUCCEED_POOL_EMPTY | (0x41) | If kernel debugger is available, the VM command lists various sizes.
Parameters:
|
ATDISK_DRIVER_INTERNAL | (0x42) | |
NO_SUCH_PARTITION | (0x43) | |
MULTIPLE_IRP_COMPLETE_REQUESTS | (0x44) | A driver has requested that an IRP be completed [IoCompleteRequest()],
but the packet has already been completed. This is a difficult bug to find
because the easiest case, a driver actually attempted to complete its own
packet twice, is generally not what happened. Rather, two separate
drivers each tries to own the packet, and each attempts to
complete it. The first actually works, and the second fails. Tracking down
which drivers in the system actually did this is difficult, because the
tracks of the first driver have been covered by the second. However, the
driver stack for the current request can be found by examining the DeviceObject
fields in each of the stack locations.
Parameter:
|
INSUFFICIENT_SYSTEM_MAP_REGS | (0x45) | |
DEREF_UNKNOWN_LOGON_SESSION | (0x46) | |
REF_UNKNOWN_LOGON_SESSION | (0x47) | |
CANCEL_STATE_IN_COMPLETED_IRP | (0x48) | This error indicates that an I/O Request Packet (IRP)that is to be
canceled has a cancel routine specified in it, meaning the packet is
in a state in which the packet can be canceled. However, the packet no
longer belongs to a driver, as it has entered I/O completion. This is
either a driver bug, or more than one driver is accessing the same
packet, which is not likely and much more difficult to debug.
Parameter:
|
PAGE_FAULT_WITH_INTERRUPTS_OFF | (0x49) | This means exactly what it says. Treat it as a case of 0x0A above. |
IRQL_GT_ZERO_AT_SYSTEM_SERVICE | (0x4A) | |
STREAMS_INTERNAL_ERROR | (0x4B) | |
FATAL_UNHANDLED_HARD_ERROR | (0x4C) | If a hard error occurs during system boot before Windows NT is up,
and it is a real error, the system will halt with a blue screen.
The following are some common cases:
|
NO_PAGES_AVAILABLE | (0x4D) | No free pages available to continue operations. If the kernel debugger
is available, type the following commands:
!process 0 7 !vm dd mmpagingfiles dd @$p Parameters: 1 - Number of dirty pages 2 - Number of physical pages in machine 3 - Extended commit value in pages 4 - Total commit value in pages |
PFN_LIST_CORRUPT | (0x4E) | Caused by corrupting I/O driver structures. If the kernel debugger
is available, get a stack trace.
Parameters:
|
NDIS_INTERNAL_ERROR | (0x4F) | |
PAGE_FAULT_IN_NONPAGED_AREA | (0x50) | |
REGISTRY_ERROR | (0x51) | Something has gone wrong with the registry. If a kernel debugger is
available, get a stack trace. If the stack trace indicates you are in
a system worker thread (CmpWorker will be on the call list), enter the
following kernel debugger commands:
dd CmpRegistryMutex+18 L1 !thread <whatever value the above command printed out> This will give you the thread and stack trace that made the registry call. This error can also indicate that the registry received an I/O error while trying to read one of its files, so the error can be caused by hardware problems or file system corruption. It can also occur because of a failure in a refresh operation that is used only by the security system, and then only when resource limits are encountered. When you see this bug code, note whether the machine is a PDC or BDC, and how many accounts are in its security account manager (SAM) database, whether it might be a replication target, and whether the volume where the hive files reside is nearly full. Parameters:
|
MAILSLOT_FILE_SYSTEM | (0x52) | |
NO_BOOT_DEVICE | (0x53) | |
LM_SERVER_INTERNAL_ERROR | (0x54) | |
DATA_COHERENCY_EXCEPTION | (0x55) | |
INSTRUCTION_COHERENCY
_EXCEPTION |
(0x56) | |
XNS_INTERNAL_ERROR | (0x57) | |
FTDISK_INTERNAL_ERROR | (0x58) | The system was booted from a revived primary partition, so the hives say the mirror is all right, when in fact it is not. The real images of the hives are on the shadow. You must boot from the shadow. |
PINBALL_FILE_SYSTEM | (0x59) | |
CRITICAL_SERVICE_FAILED | (0x5A) | |
SET_ENV_VAR_FAILED | (0x5B) | |
HAL_INITIALIZATION_FAILED | (0x5C) | |
HEAP_INITIALIZATION_FAILED | (0x5D) | |
OBJECT_INITIALIZATION_FAILED | (0x5E) | |
SECURITY_INITIALIZATION_FAILED | (0x5F) | |
PROCESS_INITIALIZATION_FAILED | (0x60) | |
HAL1_INITIALIZATION_FAILED | (0x61) | |
OBJECT1_INITIALIZATION_FAILED | (0x62) | |
SECURITY1_INITIALIZATION_FAILED | (0x63) | |
SYMBOLIC_INITIALIZATION_FAILED | (0x64) | |
MEMORY1_INITIALIZATION_FAILED | (0x65) | |
CACHE_INITIALIZATION_FAILED | (0x66) | |
CONFIG_INITIALIZATION_FAILED | (0x67) | This means the registry could not allocate the pool needed to contain
the registry files. This error should never occur, since it is early
enough in system initialization that there is always plenty of the
paged pool available.
Parameters:
|
FILE_INITIALIZATION_FAILED | (0x68) | |
IO1_INITIALIZATION_FAILED | (0x69) | Initialization of the I/O system failed for some reason. There is practically no other information available. In general, this error occurs because Setup made some incorrect decisions about the installation of the system, or the user has reconfigured the system. |
LPC_INITIALIZATION_FAILED | (0x6A) | |
PROCESS1_INITIALIZATION_FAILED | (0x6B) | Parameters:
|
REFMON_INITIALIZATION_FAILED | (0x6C) | |
SESSION1_INITIALIZATION_FAILED | (0x6D) | |
SESSION2_INITIALIZATION_FAILED | (0x6E) | |
SESSION3_INITIALIZATION_FAILED | (0x6F) | |
SESSION4_INITIALIZATION_FAILED | (0x70) | |
SESSION5_INITIALIZATION_FAILED | (0x71) | These bug code codes (SESSION1 - SESSION5) indicate the location in
NTOS\INIT\INIT.C where the failure was detected.
Parameter:
|
ASSIGN_DRIVE_LETTERS_FAILED | (0x72) | |
CONFIG_LIST_FAILED | (0x73) | Indicates that one of the core system hives is corrupted or unreadable.
This hive can be either SOFTWARE, SECURITY, or SAM.
Parameters:
|
BAD_SYSTEM_CONFIG_INFO | (0x74) | This error may indicate that the SYSTEM hive loaded by the OSLOADER/NTLDR was corrupted. However, this is unlikely, since OSLOADER checks a hive to make sure it is not corrupted after loading it. This error may also indicate that some critical registry keys and values are not present. Booting from LastKnownGood may correct the problem, but you may need to reinstall or use the Emergency Repair Disk. |
CANNOT_WRITE_CONFIGURATION | (0x75) | This error will occur if the SYSTEM hive files (SYSTEM and SYSTEM.ALT) cannot be grown to accommodate additional data written into the hive between registry initialization and phase one initialization (when the file systems are available). This error usually means there are 0 bytes of free space available on the drive, although it could be caused by trying to store the registry on a read-only device. |
PROCESS_HAS_LOCKED_PAGES | (0x76) | This error is caused by a driver not cleaning up completely after an
I/O operation.
Parameters:
|
KERNEL_STACK_INPAGE_ERROR | (0x77) | The requested page of kernel data could not be read in. This error
is caused by a bad block in a paging file or a disk controller
error (in extremely rare cases, it is caused by running out
of resources, specifically, the nonpaged pool with a status
of c0000009a [STATUS INSUFFICIENT RESOURCES]).
If the first and second arguments are 0, the stack signature in the
kernel stack was not found. This error is caused by bad hardware.
An I/O status of c000009c (STATUS_DEVICE DATA_ERROR) or C000016AL
(STATUS_DISK OPERATION_FAILED) normally indicates the data could not
be read from the disk due to a bad block. Upon reboot, Autocheck will
run and attempt to map out the bad sector. If the status is C0000185
(STATUS_IO DEVICE_ERROR) and the paging file is on a SCSI disk device,
the cabling and termination should be checked.
Parameters:
|
PHASE0_EXCEPTION | (0x78) | |
MISMATCHED_HAL | (0x79) | The HAL revision level and HAL configuration type do not match that
of the kernel or the machine type. This error is probably occurring
because the user has manually updated either NTOSKRNL.EXE or HAL.DLL.
Or, the machine has a multiprocessor (MP) HAL and a uniprocessor (UP)
kernel, or the reverse.
Parameters:
|
KERNEL_DATA_INPAGE_ERROR | (0x7A) | The requested page of kernel data could not be read in. This error
is caused by a bad block in the paging file or a disk controller
error. See also KERNEL_STACK_INPAGE_ERROR.
Parameters:
|
INACCESSIBLE_BOOT_DEVICE | (0x7B) | During the initialization of the I/O system, the driver for the boot
device may have failed to initialize the device that the system is
attempting to boot from, or the file system that is supposed to read
that device may have either failed its initialization or simply not
recognized the data on the boot device as a file system structure. In
the former case, the first argument is the address of a Unicode string
data structure that is the ARC name of the device from which the boot
was being attempted. In the latter case, the first argument is the
address of the device object that could not be mounted. If
this is the initial setup of the system, this error may have occurred
because the system was installed on an unsupported disk or
SCSI controller. Note that some controllers are supported only by
drivers that are in the Windows Driver Library (WDL), which requires
the user to do a custom installation.
This error can also be caused by the installation of a new SCSI adapter or disk controller or by repartitioning the disk with the system partition. If this is the case, on x86 systems, the BOOT.INI file must be edited; on ARC systems, Setup must be run. For information on changing BOOT.INI, see the Windows NT Advanced Server "Administrator's Guide." If the argument is a pointer to an ARC name string, the format of the first two (and in this case only) long words will be: USHORT Length; USHORT MaximumLength; PVOID Buffer; That is, the first long word will contain something like 00800020, where 20 is the actual length of the Unicode string, and the next long word will contain the address of buffer. This address will be in system space, so the high-order bit will be set. If the argument is a pointer to a device object, the format of the first word will be: USHORT Type; That is, the first word will contain a 0003, where the Type code will always be 0003. Note that this makes it immediately obvious whether the argument is a pointer to an ARC name string or a device object, since a Unicode string can never have an odd number of bytes, and a device object will always have a Type code of 3. Parameter:
|
BUGCODE_PSS_MESSAGE | (0x7C) | |
INSTALL_MORE_MEMORY | (0x7D) | Not enough memory to boot Windows NT (needs 5 MB).
Parameters:
|
WINDOWS_NT_BANNER | (0x4000007E) | |
UNEXPECTED_KERNEL_MODE_TRAP | (0x7F) | This error means a trap occurred in kernel mode, either a kind of trap that the kernel is not allowed to have or catch (a bound trap), or a kind of trap that is always instant death (double fault). The first number in the bug code parentheses is the number of the trap (8 = double fault). To learn more about what these traps are, consult an Intel x86 family manual. From kernel debugger, a KB and !TRAP on the appropriate frame (which will be the EBP that goes with a procedure named KiTrap--at least on x86 machines) will show where the trap was taken. |
NMI_HARDWARE_FAILURE | (0x80) | The HAL is supposed to report whatever specific data it has and to tell the user to call his or her hardware vendor for support. |
SPIN_LOCK_INIT_FAILURE | (0x81) | |
SETUP_FAILURE | (0x85) | (NOTE: Textmode setup no longer uses bugchecks to bail out of serious
error conditions. Therefore, you will never encounter a bugcheck 0x85.
All bugchecks have been replaced with friendlier and (where possible)
more descriptive error messages. Some of the former bugchecks, however,
have simply been replaced by our own bugcheck screen, and the codes for
these error conditions are the same as before. These are documented
below.)
The first extended bugcheck field is a code indicating what the problem is, and the other fields are used differently depending on that value.
|
MBR_CHECKSUM_MISMATCH | (0x8B) | This message occurs during the boot process when the MBR checksum the
system calculates does not match the checksum passed in by the loader.
This is usually an indication of a virus. There are many forms of
viruses and not all can be detected. The newer ones usually can only be
detected by a virus scanner that has recently been upgraded. Boot a
write-protected disk containing a virus scanner and attempt to clean out
the infection.
KerBugCheckEx parameters:
|
Code Name | Value | Description |
PP0_INITIALIZATION_FAILED | (0x8F) | This message occurs if phase 0 initialization of the kernel-mode Plug and Play Manager failed. There's really nothing going on here that could cause a failure. |
PP1_INITIALIZATION_FAILED | (0x90) | This message occurs if phase 1 initialization of the kernel-mode Plug and Play Manager failed. This is where we do most of our initialization, including setting up the environment (registry, etc.) for drivers to subsequently call during I/O init. The following bugcodes are added in Windows NT version 4.x: |
UP_DRIVER_ON_MP_SYSTEM | (0x92) | This message occurs if a UNIPROCESSOR only driver is loaded on a MultiProcessor system with more than one active processor. KeBugCheckEx parameters: 1 - The Base address of the driver. |
INVALID_KERNEL_HANDLE | (0x93) | This message occurs if kernel code (server, redirector, other driver,
and so forth) attempts to close a handle that is not a valid handle.
|
KERNEL_STACK_LOCKED_AT_EXIT | (0x94) | This message occurs when a thread exits while its kernel stack is marked as not swapable |
INVALID_WORK_QUEUE_ITEM | (0x96) | This message occurs when KeRemoveQueue removes a queue entry whose flink or blink field is null. This is almost always called by code misusing worker thread work items, but any queue misuse can cause this. The rule is that an entry on a queue may only be inserted on the list once. When an item is removed from a queue, its flink field is set to NULL. This bugcheck occurs when remove queue attempts to remove an entry, but the flink or blink field is NULL. In order to debug this problem, you need to know the queue being referenced. If the queue is one of the EX worker queues (ExWorkerQueue), then the item being removed is a WORK_QUEUE_ITEM (see ex.h). This bug heck assumes that this is the case. The bugcheck ex parameters are designed to help identify the driver misusing the queue item. |
BOUND_IMAGE_UNSUPPORTED | (0x97) | MmLoadSystemImage was called to load a bound image. This is not
supported in the kernel. Make sure bind.exe was not run on the
image.
KeBugCheckEx parameters:
|
END_OF_NT_EVALUATION_PERIOD | (0x98) | Your NT System is an evaluation unit with an expiration date. The trial
period is over.
KeBugCheckEx parameters:
|
INVALID_REGION_OR_SEGMENT | (0x99) | ExInitializeRegion or ExInterlockedExtendRegion was called with an invalid set of parameters. |
SYSTEM_LICENSE_VIOLATION | (0x9A) | A violation of the software license agreement has occurred.
This can be due to either attempting to change the product type of an offline system, or an attempt to change the trial period of an evaluation unit of NT.
|
UDFS_FILE_SYSTEM | (0x9B) | See the comment for FAT_FILE_SYSTEM |
MACHINE_CHECK_EXCEPTION | (0x9C) | A fatal Machine Check Exception has occurred.
KeBugCheckEx parameters: If the processor has ONLY MCE feature available (For example Intel Pentium), the parameters are:
|