
Windows Error Codes and Messages
Article Overview and Navigation
- I. Windows Error Generation Architecture, Interpretation, and External Influences: Explores the core Windows components involved in error generation, their roles, the primary error code systems (like NTSTATUS, Win32, HRESULT), and the complexities surrounding error message interpretation.
-
II. The Catalog of Public Windows Error Codes and Messages:
Details the scope and organization of the public error code catalog, the format for error details, and provides specific examples categorized by originating subsystems like the Kernel, Win32 APIs, and COM/RPC.
- A. Scope of Catalog
- B. Organization by Originating Module/Subsystem
- C. Error Code Details
- III. Error Code Summary Table: Provides a consolidated table summarizing key error codes across different systems for quick reference.
- IV. Works Cited: Lists the external sources and documentation referenced throughout this document.
I. Windows Error Generation Architecture, Interpretation, and External Influences
A. Core Windows Architectural Components, Modules, and Inter-Process/Inter-Component Communication Mechanisms Pertinent to Error Origination and Propagation
The Windows operating system employs a layered architecture where errors can originate at various levels, from hardware interactions to user-mode application logic. Understanding the propagation of these errors through different components is crucial for accurate diagnosis.
Core Architectural Layers and Error Flow:
Errors can initiate at the hardware level, detected by the CPU, chipsets, or peripheral devices. These are initially processed by Low-Level Hardware Error Handlers (LLHEHs), which can be interrupt handlers, exception handlers, or firmware callbacks. LLHEHs capture error information into a hardware error packet and report it to the Windows kernel.1 The Windows Hardware Error Architecture (WHEA) standardizes this process, involving the Platform-Specific Hardware Error Driver (PSHED) to abstract platform-specific error handling mechanisms and provide a consistent interface to the OS.1 The kernel then creates a standardized error record, logs it to the system event log, and raises an Event Tracing for Windows (ETW) event. In cases requiring a system restart, the error record is saved to nonvolatile storage via PSHED and processed after reboot.1
Kernel-mode errors originate within the NT Executive subsystems (NTOSKRNL.EXE
), device drivers (e.g., file system, network, graphics, storage), or the Hardware Abstraction Layer (HAL.DLL
). These typically manifest as NTSTATUS codes. User-mode errors arise in applications or system libraries (e.g., NTDLL.DLL
, KERNEL32.DLL
). These can result from application logic flaws, failed API calls that translate kernel errors, or issues within the libraries themselves.
Inter-process and inter-component communication (IPC/ICC) mechanisms such as Local Procedure Call (LPC), Remote Procedure Call (RPC), and the Component Object Model (COM) are vital pathways for operations and, consequently, for error propagation. A failure in a server component, like the RPC Subsystem (RPCSS), can manifest as an error in a client process. The concept of activity propagation, as seen in frameworks like WCF, allows for correlation of error traces across different endpoints for a single unit of processing, aiding in diagnosing distributed failures.2
Error Propagation and Translation:
Errors often surface in components distant from their origin. A low-level I/O error, such as STATUS_IO_DEVICE_ERROR
from a disk driver, might propagate through the I/O Manager to a file system driver (e.g., NTFS.SYS
), then be translated by KERNEL32.DLL
into a Win32 error code (e.g., ERROR_IO_DEVICE
), and finally be reported to an application. The application might further wrap this into a custom exception or an HRESULT. A primary mechanism for this translation is the RtlNtStatusToDosError
function in NTDLL.DLL
, which converts NTSTATUS codes to their equivalent Win32 system error codes.3 This function is heavily utilized by KERNEL32.DLL
and KERNELBASE.DLL
.
The layered nature of the system means that a failure in a foundational component can cause higher-level components to fail with errors that may seem unrelated if the root cause is not traced back. For example, if the Memory Manager (MM) in NTOSKRNL.EXE
fails an allocation request with STATUS_NO_MEMORY
, a user-mode application requesting memory via HeapAlloc
(which calls VirtualAlloc
in KERNEL32.DLL
, which in turn calls NtAllocateVirtualMemory
in NTDLL.DLL
that transitions to kernel mode) might see HeapAlloc
return NULL
with GetLastError()
returning ERROR_NOT_ENOUGH_MEMORY
, or a subsequent HRESULT like E_OUTOFMEMORY
.
Exception Handling Mechanisms:
Windows utilizes several mechanisms for handling software and hardware exceptions:
- Structured Exception Handling (SEH): The native mechanism for handling exceptions in both kernel and user mode. It uses
__try
,__except
, and__finally
constructs (in C/C++) to define protected code blocks and exception/termination handlers.4 On IA-32, SEH involves a per-thread list of_EXCEPTION_REGISTRATION_RECORD
structures. On x86-64, it uses stack unwinding tables (UNWIND_INFO
).4 - Vectored Exception Handling (VEH): Introduced in Windows XP, VEH allows registration of global exception handlers that are called before SEH handlers, providing an earlier opportunity to inspect or handle an exception.4,5
Many Windows operations, particularly I/O, are asynchronous. An I/O Request Packet (IRP) might be initiated, and the function returns STATUS_PENDING
. The actual operation is performed by a device driver, and any error might occur later in a driver's worker thread or a Deferred Procedure Call (DPC). The error is then reported via a completion mechanism (e.g., event, I/O completion port, callback routine).6,7 This asynchronous nature can make it challenging to correlate the reported error with the original initiating operation without robust tracing.
Furthermore, diverse errors across different subsystems can often stem from a common root cause: the exhaustion of critical system resources. Depletion of non-paged pool, paged pool, system Page Table Entries (PTEs), handles, or GDI objects can lead to a cascade of failures. For instance, non-paged pool exhaustion can cause any subsequent kernel-mode component attempting allocation to fail, often with STATUS_INSUFFICIENT_RESOURCES
, manifesting in varied ways depending on the component and operation that failed.8,9 Similarly, Winsock errors like WSAENOBUFS
often indicate ephemeral port exhaustion, a specific type of resource scarcity.10,11
B. Roles of Specific Components in Error Generation
1. Kernel-mode Core Components:
- a. NTOSKRNL.EXE (Executive subsystems): This is the core of the Windows kernel and executive.
- Object Manager (Ob): Manages kernel objects (files, devices, events, semaphores, sections, processes, threads, symbolic links, etc.). Errors originating here include
STATUS_OBJECT_NAME_NOT_FOUND
(object does not exist),STATUS_OBJECT_PATH_NOT_FOUND
(a component in the path to an object does not exist),STATUS_INVALID_HANDLE
(handle is not valid or does not grant required access),STATUS_ACCESS_DENIED
(access check failed, often in conjunction with SRM),STATUS_OBJECT_NAME_COLLISION
(attempt to create an object with a name that already exists), andSTATUS_REPARSE
(symbolic link encountered, requiring re-evaluation of the path).12,13 - Process Manager (Ps): Manages processes and threads. Errors include
STATUS_PROCESS_IS_TERMINATING
orSTATUS_THREAD_IS_TERMINATING
(operation attempted on a terminating entity),STATUS_INVALID_CID
(invalid client ID for process/thread),STATUS_NO_MEMORY
orSTATUS_INSUFFICIENT_RESOURCES
during process/thread creation if resources are exhausted.12 - Memory Manager (MM): Manages physical and virtual memory, including paging and the system cache. A primary source of critical errors such as
STATUS_ACCESS_VIOLATION
(invalid memory access),STATUS_IN_PAGE_ERROR
(I/O error during paging),STATUS_NO_MEMORY
(virtual memory or quota exhaustion),STATUS_COMMITMENT_LIMIT
(system commit charge limit reached), andSTATUS_INSUFFICIENT_RESOURCES
(often related to pool depletion).12 - I/O Manager (Io): Manages I/O requests to device drivers via IRPs. It is a conduit for errors from underlying device drivers and can also generate its own errors. Common errors include
STATUS_NO_SUCH_FILE
,STATUS_DEVICE_DOES_NOT_EXIST
,STATUS_IO_DEVICE_ERROR
(generic hardware error from device),STATUS_SHARING_VIOLATION
,STATUS_INVALID_DEVICE_REQUEST
(operation not valid for device type),STATUS_BUFFER_TOO_SMALL
,STATUS_BUFFER_OVERFLOW
, andSTATUS_PENDING
(operation initiated asynchronously).6,12 - Security Reference Monitor (SRM): Enforces security policies and performs access checks. Generates errors like
STATUS_ACCESS_DENIED
when an access check fails based on an object's security descriptor and the caller's access token, andSTATUS_PRIVILEGE_NOT_HELD
if a required privilege is not enabled in the caller's token.12 - Configuration Manager (Cm): Manages the system registry. Errors include
STATUS_REGISTRY_CORRUPT
(hive file corruption),STATUS_ACCESS_DENIED
(insufficient permissions for registry key access),STATUS_OBJECT_NAME_NOT_FOUND
(key or value not found), andSTATUS_INSUFFICIENT_RESOURCES
if pool is exhausted during registry operations.12
Driver signature enforcement by the PnP Manager or OS loader is another source of errors. Unsigned, improperly signed, or tampered drivers may fail to load, resulting in codes like
STATUS_IMAGE_CHECKSUM_MISMATCH
orSTATUS_INVALID_IMAGE_FORMAT
. This is a security measure but can present as an operational error if legitimate drivers are misconfigured in a secure environment. - Object Manager (Ob): Manages kernel objects (files, devices, events, semaphores, sections, processes, threads, symbolic links, etc.). Errors originating here include
- b. Hardware Abstraction Layer (HAL.DLL): Interfaces
NTOSKRNL.EXE
with platform-specific hardware details (interrupts, timers, DMA controllers, buses). While it may not frequently originate high-level named NTSTATUS codes returned to applications, HAL malfunctions or incompatibilities are a critical source of system instability, often leading to bug checks (Blue Screen of Death - BSODs).1,14,15 Errors likeHAL_INITIALIZATION_FAILED
(a bug check code, not a typical API return NTSTATUS) can occur during boot. A faulty HAL can cause incorrect hardware programming or misinterpretation of hardware signals, leading to diverse and severe errors like unexpected interrupts, memory corruption, or system deadlocks. - c. Native File System Drivers (e.g., NTFS.SYS, FASTFAT.SYS, Refs.sys): Implement file system logic, managing on-disk structures, metadata, and enforcing file sharing rules. They are a source of NTSTATUS codes such as
STATUS_DISK_CORRUPT_ERROR
,STATUS_FILE_CORRUPT_ERROR
,STATUS_SHARING_VIOLATION
(e.g., due to incompatible share flags or specific issues like NTFS attribute list handling for highly fragmented files20),STATUS_DISK_FULL
,STATUS_LOG_FILE_FULL
(for transactional file systems), andSTATUS_ACCESS_DENIED
.16,17 - d. Other native device drivers (Network, Graphics, Storage, etc.): These drivers directly control hardware peripherals. Bugs within these drivers, hardware malfunctions, or improper interaction with the hardware can cause them to return a wide range of NTSTATUS errors to the I/O Manager (e.g.,
STATUS_DEVICE_POWER_FAILURE
,STATUS_DEVICE_NOT_READY
,STATUS_IO_TIMEOUT
,STATUS_NDIS_ADAPTER_NOT_FOUND
for network drivers). Severe driver errors often lead to system crashes.14,18,19,21
2. User-mode System Libraries:
- a. NTDLL.DLL: The lowest-level user-mode library, acting as the primary interface between user-mode applications and the kernel. It exposes the Native API (functions typically prefixed with
Nt
orZw
) and contains the system service dispatcher that transitions calls into kernel mode (syscalls). Many NTSTATUS codes returned by kernel services pass directly throughNTDLL.DLL
to the calling Win32 subsystem library or application.NTDLL.DLL
also contains crucial helper routines, includingRtlNtStatusToDosError
for translating NTSTATUS codes to Win32 error codes.3 - b. KERNEL32.DLL, KERNELBASE.DLL: These libraries implement the core Win32 API functions for fundamental operations like file I/O (
CreateFile
,ReadFile
), memory management (VirtualAlloc
,HeapAlloc
), and process/thread management (CreateProcess
,CreateThread
). They typically call underlying Native API functions inNTDLL.DLL
and are responsible for translating the returned NTSTATUS codes into Win32 error codes, which are then retrievable viaGetLastError()
.22,23,24KERNELBASE.DLL
was introduced in Windows 7 as a refactoring ofKERNEL32.DLL
to hold base functionality, part of the MinWin effort. The evolution of these libraries and the introduction of API sets can sometimes lead to "DLL Hell" type issues if applications have incorrect dependencies or manifests, potentially resulting inERROR_MOD_NOT_FOUND
orERROR_PROC_NOT_FOUND
. - c. USER32.DLL: Manages user interface elements such as windows, messages, menus, dialog boxes, and user input (keyboard, mouse). Errors generated by or propagated through
USER32.DLL
often relate to invalid window handles, resource limitations (e.g., exhaustion of desktop heap or user object GDI handles), or issues with message queues.22,25,26 - d. GDI32.DLL: The Graphics Device Interface library, responsible for 2D graphics rendering, drawing operations, font management, and printer interactions. Errors can arise from invalid GDI object handles (pens, brushes, bitmaps, device contexts), exhaustion of GDI object limits, or issues with display or printer drivers.22,27,28 Both
USER32
andGDI32
manage finite resources. Applications leaking these resources (e.g., not destroying windows or GDI objects) can exhaust per-process or system-wide limits, leading to failures in creating new UI elements. This can manifest as a genericERROR_NOT_ENOUGH_MEMORY
(Win32 error 8) even if system RAM is plentiful, because specific heaps like the desktop heap (for user objects) or GDI handle tables are depleted. - e. ADVAPI32.DLL: Provides access to advanced Windows services, including security APIs (e.g.,
LogonUser
,GetTokenInformation
,AccessCheck
), registry manipulation APIs (often layered over NTDLL's native registry functions), and Service Control Manager (SCM) functions (OpenSCManager
,CreateService
,StartService
). Errors commonly include access denied conditions, invalid credentials, privilege not held, registry access failures, or service control failures.22,29,30 - f. SHELL32.DLL: Implements shell APIs, providing functionality related to the Windows shell (desktop, taskbar, file explorer), file operations (copy, move, delete, often wrapping KERNEL32 calls), namespace navigation, and common dialogs. Errors can relate to file system operations, issues with shell extensions, or problems accessing shell namespace objects.22,31,32
3. Component Object Model (COM):
- a. OLE32.DLL, COMBASE.DLL: These DLLs provide the fundamental COM infrastructure, including services for object activation (
CoCreateInstance
,CoGetClassObject
), interface querying (QueryInterface
), reference counting (AddRef
,Release
), and marshalling of interface pointers across apartments, processes, or machines. They are the primary source of HRESULT values in COM.33,34,35COMBASE.DLL
is a more recent library that incorporates core COM functionality, reflecting API set refactoring. Common HRESULTs includeE_NOINTERFACE
,E_POINTER
,E_OUTOFMEMORY
,CO_E_NOTINITIALIZED
,REGDB_E_CLASSNOTREG
(class not registered), andCO_E_INIT_TLS
.22,38,39 Failures in marshalling parameters or return values, especially for cross-boundary calls, can result in generic HRESULTs likeE_FAIL
or RPC-related errors, obscuring the marshalling problem itself. This can be due to buggy proxy/stub implementations, unregistered interfaces for marshalling, or network issues in DCOM. - b. RPCSS (RPC Subsystem): The RPCSS service is essential for COM's inter-process and remote communication capabilities (DCOM). Failures within the RPCSS service itself, or network problems impacting RPC communication, can lead to HRESULTs such as
RPC_E_SERVER_UNAVAILABLE
(server process not running or unreachable),RPC_E_CALL_FAILED
(generic communication failure), orE_ACCESSDENIED
(if security contexts mismatch or authentication fails during the RPC call).36,37 Errors likeCO_E_INIT_RPC_CHANNEL
indicate issues initializing RPC services for COM.38 - c. COM Servers/Objects: Individual COM components (in-process servers like DLLs, or out-of-process servers like EXEs) return HRESULTs from their implemented interface methods. These can be standard HRESULTs defined in
winerror.h
or custom, application-specific HRESULTs (where the Customer bit is set). The meaning of custom HRESULTs is defined by the component vendor. Incorrect management of COM apartment threading models (Single-Threaded Apartment - STA, Multi-Threaded Apartment - MTA) can lead to unexpected behavior and errors. For instance, directly accessing an STA object from a thread other than its creator without proper marshalling can result inRPC_E_WRONG_THREAD
or unpredictable crashes.
4. .NET Framework / .NET Core:
- a. Common Language Runtime (CLR) (e.g., mscorwks.dll, coreclr.dll): The CLR manages the execution of .NET applications. It has its own exception handling system. When .NET code interoperates with native COM components or Win32 APIs (via P/Invoke), the CLR is responsible for marshalling data and translating error codes. HRESULTs from COM calls or Win32 errors from P/Invoke calls are typically converted into .NET exceptions.40 The original HRESULT is often stored in the
Exception.HResult
property. The CLR's marshalling and error translation can sometimes lose context, especially with custom error codes or ifIErrorInfo
is not properly provided by a COM component.41 - b. Base Class Library (BCL): The BCL provides fundamental .NET classes and functionalities. Methods within the BCL that call underlying OS services will catch errors from those services (HRESULTs, Win32 errors) and wrap them in more specific .NET exception types, such as
System.IO.IOException
,System.UnauthorizedAccessException
, orSystem.OutOfMemoryException
. The original error information may be available via theHResult
property or as anInnerException
. Issues with garbage collection and finalization, particularly concerning the release of unmanaged resources (handles, native memory) wrapped by .NET objects, can lead to delayed errors. If an object'sDispose
method is not called and its finalizer attempts to release an already invalid handle or perform an illegal operation, an exception (often anSEHException
or a critical failure) can occur on the finalizer thread, making it difficult to attribute to the code that originally misused the resource.
5. Networking Stack:
- a. WinSock (WS2_32.DLL): The Windows Sockets API provides the interface for network programming. It is the source of WSA error codes, which are retrieved using
WSAGetLastError()
. Examples includeWSAECONNREFUSED
(connection actively refused),WSAETIMEDOUT
(connection attempt timed out),WSAHOST_NOT_FOUND
(host name resolution failed),WSAENETDOWN
(network subsystem failed), andWSAENOBUFS
(insufficient buffer space, often ephemeral port exhaustion).42,43,44,45 - b. Windows Filtering Platform (WFP) / Transport Driver Interface (TDI - legacy):
- WFP: The modern framework for network packet filtering and modification in Windows. WFP callout drivers, registered by applications like firewalls or security software, can inspect, modify, or drop network traffic at various layers of the network stack.46,47 Actions taken by WFP callouts can directly lead to connection failures or modifications that result in Winsock errors being reported to applications.48,49
- TDI (Legacy): An older interface used by network protocol drivers and filter drivers. TDI filters could also intercept and modify network traffic, potentially causing errors.
- c. Network Driver Interface Specification (NDIS) drivers: These include drivers for physical Network Interface Cards (NICs) and NDIS intermediate or filter drivers that can be layered within the NDIS stack.50,51 Problems at this level, such as NIC hardware failures, bugs in NIC drivers, or interference from NDIS filter drivers (e.g., third-party firewalls, VPN clients, network monitoring tools), can lead to a range of network connectivity issues, manifesting as higher-level Winsock errors or complete loss of network access.49
The layered nature of network filtering (NDIS filters, WFP callouts, legacy LSPs/WSPs, application-level firewalls) means a Winsock error like WSAECONNREFUSED
or WSAETIMEDOUT
could be due to a block or modification at any of these layers. Pinpointing the responsible layer often requires specialized diagnostic tools. Furthermore, DNS resolution failures (leading to WSAHOST_NOT_FOUND
) are a common source of network errors.52,53 However, intermittent DNS issues or misconfigurations might cause subsequent connection attempts to fail with timeouts or unreachability errors if an application caches a stale IP or if the DNS resolution itself times out, thereby masking the DNS root cause.
6. Third-Party Filter Drivers (Critical External Influence):
Third-party filter drivers are kernel-mode components that intercept and potentially modify system operations. They are commonly used by security software (Antivirus, EDR, DLP), encryption tools, backup agents, and virtualization software.
- a. Role and Mechanism:
- File System Minifilters: These drivers attach to the file system stack using the Filter Manager (
FltMgr.sys
) and can intercept IRPs for file operations (create, read, write, close, query/set information, etc.).54 Examples include antivirus scanners inspecting files on open, EDR solutions monitoring file access patterns, DLP tools preventing unauthorized data movement, and on-access encryption drivers. - NDIS Filter Drivers: These insert into the NDIS network stack to monitor or modify network packets exchanged between protocol drivers (like TCP/IP) and miniport drivers (NIC drivers).51 They are used by personal firewalls, VPN client software, network traffic shapers, and monitoring tools.
- WFP Callout Drivers: These integrate with the Windows Filtering Platform at various network layers to inspect, modify, or block network data flows.46 Modern firewalls, intrusion detection/prevention systems (IDS/IPS), and some types of content filtering software utilize WFP callouts.
- Registry Filter Drivers: These drivers register callback routines with the Configuration Manager (using
CmRegisterCallbackEx
) to intercept operations on registry keys and values (e.g., create key, open key, set value, delete key).55,56,57,58,59 Security hardening tools, application virtualization, and some EDR solutions may use registry filters.
- File System Minifilters: These drivers attach to the file system stack using the Filter Manager (
- b. Error Generation Impact:
Filter drivers can be a direct or indirect source of errors.
- Direct Error Generation: A filter driver can complete an intercepted operation (e.g., an IRP for a file system filter, a network packet for an NDIS/WFP filter, or a registry callback) with an error status if its internal logic or policy dictates that the operation should be blocked. For example:
- A DLP file system minifilter might return
STATUS_ACCESS_DENIED
for an unauthorized attempt to copy a sensitive file.60 - An antivirus minifilter might return
STATUS_ACCESS_DENIED
or a custom status if a file is infected and access is blocked. - A WFP firewall callout might cause network connections to be dropped, leading to Winsock errors like
WSAECONNREFUSED
orWSAETIMEDOUT
at the application layer.61,62,63,64 - A registry filter might return
STATUS_ACCESS_DENIED
if an application attempts to modify a protected registry key.
- A DLP file system minifilter might return
- Indirect Error Generation:
- Bugs in Filter Drivers: Software defects within the filter driver itself (e.g., memory corruption, incorrect handling of IRPs or network data structures, use-after-free errors, pool exhaustion due to leaks) can lead to system instability, BSODs (e.g.,
DRIVER_IRQL_NOT_LESS_OR_EQUAL
,PAGE_FAULT_IN_NONPAGED_AREA
), deadlocks, resource leaks (STATUS_INSUFFICIENT_RESOURCES
), or performance degradation severe enough to cause timeouts in applications or other system components.65,66 - Performance Degradation: A filter driver performing excessive processing for each intercepted operation can introduce significant latency. This can cause applications to time out or the system to become unresponsive. For example, a slow network filter could contribute to
WSAETIMEDOUT
errors. - Resource Leaks: Filter drivers that leak kernel resources (e.g., non-paged pool, handles, IRPs) can gradually degrade system performance and stability, eventually leading to resource exhaustion errors like
STATUS_INSUFFICIENT_RESOURCES
or system crashes. - Conflicts Between Multiple Filters: When multiple filter drivers are attached to the same device stack (e.g., multiple file system minifilters on a volume, or multiple NDIS filters on a network adapter), their interactions can be complex. The load order (altitude for minifilters) is critical.54 Conflicts can arise if filters make incompatible assumptions about the state of an operation or data, if one filter undoes the work of another, or if they contend for resources, potentially leading to deadlocks, incorrect behavior, or explicit errors.
- Bugs in Filter Drivers: Software defects within the filter driver itself (e.g., memory corruption, incorrect handling of IRPs or network data structures, use-after-free errors, pool exhaustion due to leaks) can lead to system instability, BSODs (e.g.,
- Direct Error Generation: A filter driver can complete an intercepted operation (e.g., an IRP for a file system filter, a network packet for an NDIS/WFP filter, or a registry callback) with an error status if its internal logic or policy dictates that the operation should be blocked. For example:
- c. Diagnostic Challenge:
Errors originating from or induced by filter drivers are often reported by the core Windows component whose operation was intercepted, rather than by the filter driver itself. This makes attribution difficult. For instance, if a file system minifilter returns
STATUS_ACCESS_DENIED
for anIRP_MJ_CREATE
request, the application callingCreateFile
will receiveERROR_ACCESS_DENIED
. The application and its logs will point toCreateFile
or the file system as the source of the error, unaware of the intercepting filter.Diagnosing such issues typically requires specialized tools and techniques:
fltmc.exe
: This command-line utility is used to manage file system minifilter drivers.fltmc instances
can list attached minifilters and their altitudes for a given volume, helping identify which filters are active.- Event Tracing for Windows (ETW): Many system components, including Filter Manager (FltMgr), WFP, NDIS, and individual drivers, provide ETW providers. Analyzing ETW traces can reveal the flow of operations through filter drivers and pinpoint where an error was generated or an operation was blocked.67
- Kernel Debugging (WinDbg): Allows direct inspection of kernel memory, IRPs, filter driver data structures, and stepping through filter driver code. This is often essential for complex issues.
- Process Monitor (ProcMon): While a user-mode tool, ProcMon can show the results of file system and registry operations. Failures like "ACCESS DENIED" or "SHARING VIOLATION" might be correlated with the presence of certain filter drivers, especially if disabling a filter changes the outcome. ProcMon can also display filter driver altitudes for file system operations.67
- Vendor-Specific Logging/Tools: Security software vendors often provide their own logging mechanisms or diagnostic tools that can offer insight into why their filters are taking certain actions.
Filter drivers can interfere with IRP processing in subtle ways, such as modifying IRP parameters incorrectly, holding IRPs for excessive durations (causing perceived hangs or timeouts), or mishandling IRP completion, leading to a wide spectrum of I/O errors or even data corruption.68,69 The altitude and load order of filter drivers are critical; incorrectly ordered filters or filters that make unsafe assumptions about other filters in the stack can lead to instability, conflicts, and errors.
It is also important to recognize that not all filter driver interventions result in explicit error codes. Some filters might silently modify data streams (e.g., content filtering by a web proxy filter) or redirect operations. While the API call might return success, the application receives altered data or an altered outcome, which can be perceived as a malfunction and is often very difficult to diagnose because no error is flagged.
C. Primary Error Code Systems, Propagation Paths, and Translation
Windows utilizes several distinct error code systems, each typically associated with a specific layer or subsystem. Understanding their propagation and translation is key to tracing an error to its true origin.
- NTSTATUS (ntstatus.h):
- Origin: Primarily kernel mode, returned by NT Executive subsystems, the HAL, and device drivers (including file system, network, and third-party drivers).12,13,70
- Structure: 32-bit values. The top two bits (bits 31-30) define the severity:
- 00 (Severity Success) - e.g.,
STATUS_SUCCESS
(0x00000000) - 01 (Severity Informational) - e.g.,
STATUS_PENDING
(0x00000103) - 10 (Severity Warning) - e.g.,
STATUS_BUFFER_OVERFLOW
(0x80000005) - 11 (Severity Error) - e.g.,
STATUS_ACCESS_DENIED
(0xC0000022)
- 00 (Severity Success) - e.g.,
- Propagation: Returned by kernel-mode functions. When a user-mode application calls a Win32 API that transitions to kernel mode (via
NTDLL.DLL
), the kernel service returns an NTSTATUS code. This code is passed back toNTDLL.DLL
. - Translation:
NTDLL.DLL
'sRtlNtStatusToDosError
function is commonly used to translate NTSTATUS codes into Win32 error codes.3 Not all NTSTATUS codes have a direct Win32 equivalent; in such cases,RtlNtStatusToDosError
may returnERROR_MR_MID_NOT_FOUND
.KERNEL32.DLL
andKERNELBASE.DLL
use this translation to set the thread's last error value for Win32 applications. - Filter Influence: Kernel-mode filter drivers (file system, registry, NDIS, WFP callouts) primarily operate at the NTSTATUS level. They can intercept operations (like IRPs) and complete them with an NTSTATUS code (e.g.,
STATUS_ACCESS_DENIED
,STATUS_SHARING_VIOLATION
,STATUS_INSUFFICIENT_RESOURCES
).20 This NTSTATUS code then propagates upwards. - Relevant Snippets: 3, 12, 13, 20, 70
- Win32 Error Codes (winerror.h):
- Origin: User mode, primarily set by Win32 API functions implemented in libraries like
KERNEL32.DLL
,KERNELBASE.DLL
,USER32.DLL
,ADVAPI32.DLL
, etc.71,72 - Structure: Typically 32-bit unsigned integers (DWORDs).
- Retrieval: Accessed via the
GetLastError()
function, which retrieves the calling thread's last-error code value. - Propagation: The last-error code is maintained on a per-thread basis. It is set by Win32 functions when they fail; successful functions may or may not clear it (often they set it to
ERROR_SUCCESS
or leave it). - Translation: Many Win32 error codes are direct translations of NTSTATUS codes. Win32 errors can also be converted to HRESULTs using the
HRESULT_FROM_WIN32
macro, which embeds the Win32 error code into the HRESULT structure withFACILITY_WIN32
(7).33 - Filter Influence: Indirect. If a kernel-mode filter driver causes an operation to fail with an NTSTATUS code, and that NTSTATUS code is translated into a Win32 error code by
KERNEL32
/KERNELBASE
, then the application will see the Win32 error. - Relevant Snippets: 3, 33, 71, 72
- Origin: User mode, primarily set by Win32 API functions implemented in libraries like
- HRESULT (winerror.h, olectl.h, comdef.h, etc.):
- Origin: Primarily Component Object Model (COM) and OLE. Also used by .NET interoperation and some newer WinRT/Win32 APIs.33,34
- Structure: 32-bit values.73,74,75
- Bit 31 (S bit - Severity): 0 for success, 1 for failure.
- Bit 29 (C bit - Customer): 1 for customer-defined, 0 for Microsoft-defined.
- Bit 28 (N bit): If set, indicates the HRESULT wraps an NTSTATUS value.
- Bit 27 (X bit): Reserved.
- Bits 16-26 (Facility): Identifies the originating API or subsystem (e.g.,
FACILITY_NULL
,FACILITY_RPC
,FACILITY_DISPATCH
,FACILITY_STORAGE
,FACILITY_ITF
(interface-specific),FACILITY_WIN32
,FACILITY_WINDOWS
,FACILITY_CONTROL
,FACILITY_URT
(.NET Runtime)).33 - Bits 0-15 (Code): The specific error code within the facility.
- Propagation: Returned directly by COM interface methods and some API functions. Macros like
SUCCEEDED(hr)
andFAILED(hr)
are used to check the severity bit.34 - Translation: HRESULTs can encapsulate Win32 error codes (when Facility is
FACILITY_WIN32
, the code part is the Win32 error code). NTSTATUS values can also be directly mapped to HRESULTs (N bit set). The .NET CLR translates between .NET exceptions and HRESULTs during COM interop or P/Invoke calls.40,41 - Filter Influence: Indirect. If a filter driver causes an underlying OS operation to fail, and a COM component relies on that operation, the COM component might translate that failure into an HRESULT. For example, if a file system filter denies access to a file needed by a COM object, the object might return
E_ACCESSDENIED
. - Relevant Snippets: 33, 34, 40, 41, 73, 74, 75
- WSA (Winsock API) Error Codes (winsock2.h):
- Origin: Windows Sockets API, implemented in
WS2_32.DLL
.42,45 - Structure: Integer values, distinct from Win32 error codes.
- Retrieval: Accessed via the
WSAGetLastError()
function, specific to Winsock calls for the calling thread.42,76 - Propagation: Set by Winsock API functions upon failure.
- Translation: Generally specific to network operations and not typically translated to or from NTSTATUS or general Win32 errors, although underlying network driver failures (which are NTSTATUS-based) can cause Winsock errors.
- Filter Influence: NDIS and WFP filter drivers operate directly on network traffic. Their actions (blocking packets, resetting connections, modifying data) are a common cause of WSA errors reported by Winsock. For example, a WFP firewall dropping packets can lead to
WSAETIMEDOUT
, or actively resetting a connection can lead toWSAECONNRESET
orWSAECONNREFUSED
.48,61,62,63,64 - Relevant Snippets: 42, 45, 48, 61, 62, 63, 64, 76
- Origin: Windows Sockets API, implemented in
The translation between these error code systems can sometimes lead to a loss of specificity. NTSTATUS provides a rich set of error codes; when RtlNtStatusToDosError
maps these to the smaller set of Win32 error codes, multiple distinct NTSTATUS conditions might map to a single, more generic Win32 error.3 For example, various underlying file access issues might all translate to ERROR_ACCESS_DENIED
. This can make diagnosing the precise root cause more challenging if only the translated code is observed.
A common pitfall in user-mode Win32 programming is the handling of GetLastError()
. This function retrieves the last error code for the calling thread. If an application calls an API that fails and sets an error code, then calls another API that succeeds (which might reset the error code to ERROR_SUCCESS
or 0) before calling GetLastError()
, the retrieved error will not correspond to the actual failing call. Diligent error checking immediately after each potentially failing API call is essential.
When a filter driver directly completes an IRP or intercepts an operation and returns an NTSTATUS error code (e.g., STATUS_ACCESS_DENIED
), this error propagates up the call stack. If a user-mode application initiated the operation, this NTSTATUS will typically be translated by NTDLL
/KERNEL32
into a Win32 error. However, if a filter driver bug causes a system crash (BSOD), the error information is captured through the bug check mechanism (e.g., a bug check code like DRIVER_IRQL_NOT_LESS_OR_EQUAL
and associated parameters). This is a distinct error reporting path from API-level error code propagation and translation.
D. Error Message Interpretation Complexity
Interpreting Windows error messages accurately can be challenging due to the operating system's complex, layered architecture, intricate interactions between its numerous components, and, critically, the pervasive influence of third-party filter drivers. Error messages reported at the application or end-user level may appear misleading or overly generic, often obscuring the true root cause.
The layered abstraction inherent in Windows means that an error originating in a low-level component (e.g., a disk driver) is often processed and translated by several intermediate layers (I/O Manager, file system driver, KERNEL32.DLL
) before being presented to an application. Each layer might handle or interpret the error differently, potentially losing some of the original context. For example, an ERROR_ACCESS_DENIED
(Win32) seen by an application attempting to open a file could originate from:
- Standard file system permissions (ACLs) enforced by NTFS.
- A sharing violation if the file is already open incompatibly.
- A file system minifilter driver (e.g., antivirus, DLP, encryption software) explicitly blocking the access attempt by returning
STATUS_ACCESS_DENIED
.60,77,78 - A registry filter driver denying access to a configuration key that the file operation indirectly depends upon.
- A network filter blocking access to a remote resource if the file operation is on a network share.
The error is reported by the API the application called (e.g., CreateFile
), not necessarily by the component that made the ultimate decision to deny access.
As discussed, error code translation (e.g., NTSTATUS to Win32, Win32 to HRESULT) can reduce specificity. A rich NTSTATUS code like STATUS_INSUFFICIENT_RESOURCES
might be translated to a more generic ERROR_NOT_ENOUGH_MEMORY
or E_OUTOFMEMORY
, masking whether the issue was non-paged pool, paged pool, commit charge, or another specific resource.3
The most significant complicating factor is the interception of system operations by third-party filter drivers.54,79 These drivers can:
- Return their own error codes: A filter might complete an I/O Request Packet (IRP) or other operation with a standard error like
STATUS_ACCESS_DENIED
orSTATUS_SHARING_VIOLATION
based on its policy.20 - Modify request parameters: A filter could alter parameters of an operation before passing it to lower-level drivers. If these modifications are incorrect, the underlying system component might fail legitimately, but the reason for the failure is obscured by the filter's action.
- Introduce bugs: Flaws in filter drivers (memory corruption, deadlocks, resource leaks) can cause failures in unrelated system components or lead to system crashes (BSODs).65,66 The error reported in such cases might point to the victim component, not the faulty filter.
Consequently, while truly incorrect error reporting by core Windows components is rare, the apparent ambiguity or misleading nature of an error message usually stems from one or more of these factors: error code translation losing detail, a failure in a lower-level dependency that is masked by higher layers, or an explicit block, modification, or bug introduced by a third-party filter driver.
Accurately diagnosing the root cause often requires understanding the specific module that originated the error or, crucially, the module that intercepted and altered the operation (like a filter driver), along with the sequence of calls leading to the failure. The organization of error codes by originating module in Section II of this document is intended to assist in this diagnostic process. Tools like kernel debuggers (WinDbg), ETW tracing, fltmc.exe
for file system filters, and Process Monitor are invaluable for peeling back the layers and identifying the true source of an error.67
The act of enabling detailed diagnostics or attaching a debugger can sometimes alter system timing or behavior, potentially causing intermittent errors (especially those related to race conditions in filter drivers) to disappear or change, a phenomenon that complicates troubleshooting. Furthermore, some security filter drivers may be overly aggressive in their blocking heuristics, leading to false positives where legitimate operations are denied, making the resulting error messages seem incorrect to the user or developer, even though the filter is operating as designed (albeit too broadly).77 Understanding the potential origins of errors, as detailed in the subsequent sections, and particularly the pervasive role of filter drivers, is paramount for correct interpretation and effective resolution.
II. The Catalog of Public Windows Error Codes and Messages
A. Scope of Catalog
This catalog aims to provide a comprehensive reference for publicly documented error codes found within standard Microsoft development resources, primarily the Windows SDK (Software Development Kit) and Windows Driver Kit (WDK) headers (e.g., ntstatus.h
, winerror.h
, winsock2.h
) and associated documentation. The codes included are relevant to developers and system administrators across the architectural layers discussed in Section I.
B. Organization by Originating Module/Subsystem
Errors are organized by the primary originating module or subsystem to aid in understanding their provenance and context.
C. Error Code Details
For each error code, the following details are provided:
- Error Code Value: Canonical form (Hexadecimal preferred; Decimal for common Win32 codes; Facility/Code for HRESULTs).
- Symbolic Name: Official name from SDK/WDK headers.
- Originating Module/Component: The primary Windows component or subsystem from which this error typically originates or is reported by.
- Associated Error Message Text(s): Standard textual representation(s) (e.g., via
FormatMessage
or common exception messages). - Detailed Causation ("Why"): Specific technical reasons for the error, linked to the originating component's function and potential interception by third-party drivers.
- Triggering Conditions ("When"): Common operations, API calls, system states, or driver interactions during which the error typically manifests.
1. Kernel Executive Subsystems (NTOSKRNL.EXE) & HAL (HAL.DLL) - NTSTATUS Codes
These errors typically originate from the core Windows kernel, its executive subsystems, or the Hardware Abstraction Layer. They are fundamental to system operation.
a. Memory Manager (MM)
-
Error Code Value: 0xC0000005
Symbolic Name:
STATUS_ACCESS_VIOLATION
Originating Module/Component: Kernel Executive Subsystems (Memory Manager)
Associated Error Message Text(s): "The instruction at 0x\%08lx referenced memory at 0x\%08lx. The memory could not be %s." (Variables: instruction pointer, faulting address, "read" or "written" or "executed").
Detailed Causation ("Why"):
- Invalid Parameters: Attempting to access memory using a
NULL
pointer, an uninitialized pointer, or a pointer to an invalid address space (e.g., user-mode code trying to access kernel-space addresses directly). - Access Control/Permissions: Writing to a read-only memory region, attempting to execute code from a non-executable memory region (Data Execution Prevention - DEP), or accessing a guard page.
- Buffer Issues: Buffer overflows or underflows corrupting adjacent memory, including pointers or critical data structures, leading to subsequent attempts to access memory using these corrupted values.
- Hardware/Device Issues: Faulty RAM modules can cause sporadic and unpredictable access violations.80, 81
- Concurrency/Synchronization: Race conditions in multithreaded applications or kernel-mode drivers leading to corrupted shared memory, dangling pointers, or inconsistent data structures that are then accessed.
- Software Bugs: Dereferencing a stale pointer (a pointer to memory that has been freed), incorrect pointer arithmetic, use-after-free vulnerabilities. Bugs in kernel-mode drivers, such as attempting to access paged-out kernel memory at an elevated IRQL (>=
DISPATCH_LEVEL
) or accessing user-mode buffers without proper validation, probing (ProbeForRead
/ProbeForWrite
), and exception handling (__try
/__except
). - Third-Party Filter Driver Impact: A bug within a third-party filter driver (e.g., file system minifilter, network filter) that involves incorrect buffer handling, accessing user-mode buffers without proper mechanisms, or dereferencing invalid pointers can directly cause a
STATUS_ACCESS_VIOLATION
in kernel mode, typically resulting in a system crash (BSOD).
Triggering Conditions ("When"):
- Dereferencing
NULL
, uninitialized, or corrupted pointers during any memory operation (read, write, execute). - Passing invalid buffer pointers or handles that map to invalid memory to API calls.
- During process or thread startup or shutdown if critical memory structures are corrupted.
- When a kernel-mode driver attempts to access paged memory at or above
DISPATCH_LEVEL
. - When Data Execution Prevention (DEP) is triggered by an attempt to execute code from a memory region marked as non-executable.
- Occurs frequently when applications or drivers have memory corruption bugs or interact with faulty hardware.12, 80, 81
- Invalid Parameters: Attempting to access memory using a
-
Error Code Value: 0xC0000006
Symbolic Name:
STATUS_IN_PAGE_ERROR
Originating Module/Component: Kernel Executive Subsystems (Memory Manager, with I/O Manager involvement)
Associated Error Message Text(s): "The instruction at 0x\%08lx referenced memory at 0x\%08lx. The required data was not placed into memory because of an I/O error status of 0x\%08lx." (Variables: instruction pointer, faulting address, underlying I/O NTSTATUS error code).
Detailed Causation ("Why"):
- Hardware/Device Issues: Failing hard disk drive, presence of bad sectors on the disk where the page file or a memory-mapped file resides, faulty disk controller, loose storage cables, or failing RAM modules that corrupt data being transferred to/from disk.
- Dependency Failures: The underlying I/O subsystem (I/O Manager, disk drivers, file system drivers) returned an error when the Memory Manager attempted to read a required page from disk into memory (a page fault). The embedded I/O error status (e.g.,
STATUS_DEVICE_DATA_ERROR
,STATUS_CRC_ERROR
,STATUS_DEVICE_NOT_READY
) provides more specific information about the I/O failure. - Data Integrity/Corruption: Corruption of the page file (
pagefile.sys
), or corruption of an executable file (EXE, DLL) or data file that is memory-mapped. - Software Bugs: Bugs in disk drivers, storage stack filter drivers, or file system drivers that cause I/O operations to fail during paging.
- Resource Scarcity: In rare cases, extreme resource exhaustion (e.g., non-paged pool) in underlying storage drivers might prevent them from completing paging I/O.
- Third-Party Filter Driver Impact: A file system filter driver (e.g., antivirus, encryption) or a storage filter driver that intercepts paging I/O operations could:
- Incorrectly modify the I/O request, leading to failure.
- Block access to the page file or the file being paged in.
- Contain a bug that directly causes the I/O to fail or corrupts the data.
- An aggressive antivirus filter might erroneously block access to a system file being paged in if it's falsely flagged.82
Triggering Conditions ("When"):
- When the system attempts to load a required page of data or code from a memory-mapped file (e.g., an executable, DLL, or data file) or from the system page file into physical RAM, and the underlying disk I/O operation fails.
- Frequently observed when launching applications, loading DLLs, or accessing data from files if the backing storage is faulty, the page file is corrupt, or a problematic driver is in the storage or file system stack.82, 83
- Can occur when running an executable from a network volume if there are significant network issues or interference from network filter drivers, causing the remote file data to be inaccessible during paging.12, 82
-
Error Code Value: 0xC0000017
Symbolic Name:
STATUS_NO_MEMORY
Originating Module/Component: Kernel Executive Subsystems (Memory Manager)
Associated Error Message Text(s): "{Not Enough Quota} Not enough virtual memory or paging file quota is available to complete the specified operation."
Detailed Causation ("Why"):
- Resource Scarcity (System Commit Limit): Exhaustion of the system commit limit, which is the sum of physical RAM and the current sizes of all page files. This occurs when the total committed virtual memory by all processes exceeds available resources.
- Resource Scarcity (Page File): The page file(s) cannot grow large enough (due to disk space limitations or configured size limits) to satisfy memory demands.
- Resource Scarcity (Kernel Pools): Depletion of kernel-mode memory pools, specifically non-paged pool or paged pool. This is often due to memory leaks in kernel-mode drivers or excessive allocations by kernel components.
- Quota Limits: A process attempting to allocate memory may exceed its assigned job object quota or other system-imposed quota limits.
- Memory Fragmentation: Severe virtual address space fragmentation within a process can prevent large contiguous allocations, even if total free virtual address space appears sufficient. In kernel mode, pool fragmentation can have similar effects.
- Software Bugs: Memory leaks in user-mode applications or kernel-mode drivers that continuously consume memory without releasing it, eventually exhausting available resources.
- Configuration Errors: During Windows Update or setup, if the Boot Configuration Data (BCD) incorrectly marks valid memory regions as "badmemory," it can lead to insufficient usable RAM for operations like creating a ramdisk, triggering this error.84, 85
- Third-Party Filter Driver Impact: A filter driver leaking paged or non-paged pool is a significant potential cause of kernel memory exhaustion, leading to
STATUS_NO_MEMORY
conditions, system-wide instability, or BSODs.65, 66
Triggering Conditions ("When"):
- During memory allocation requests by applications or system components (e.g., user-mode
VirtualAlloc
,HeapAlloc
; kernel-modeNtAllocateVirtualMemory
,ExAllocatePoolWithTag
). - During process or thread creation if system resources are critically low.
- When loading large executable files, DLLs, or data files into memory.
- During system operations like Windows Update, especially if BCD contains incorrect "badmemory" entries preventing the use of available RAM.12, 84, 85
b. I/O Manager (Io)
-
Error Code Value: 0xC000000E
Symbolic Name:
STATUS_NO_SUCH_DEVICE
(Note: MS-ERREF lists this asSTATUS_NO_SUCH_DEVICE
, while some contexts might useSTATUS_DEVICE_DOES_NOT_EXIST
with the same value. The message text aligns with "device does not exist".)Originating Module/Component: Kernel Executive Subsystems (I/O Manager, PnP Manager)
Associated Error Message Text(s): "{No Such Device} The specified device does not exist."
Detailed Causation ("Why"):
- Object/Entity Non-existence: An attempt was made to access a device object that does not exist or is not currently available in the system. The device may have been removed, disabled, or never properly installed/initialized.
- Hardware/Device Issues: Physical disconnection of the device, hardware malfunction, or device failure.
- Driver Issues: The driver for the device failed to load, crashed, or was uninstalled. The PnP Manager could not find or start a suitable driver.
- Configuration Errors: Incorrect system configuration, such as corrupted Boot Configuration Data (BCD) pointing to a non-existent boot device, leading to boot failures with this error or similar ones like 0xc000000f.86, 87 Incorrect BIOS/UEFI boot order trying to boot from a non-bootable or unavailable device.
- Resource Conflicts: Though less common for this specific error, severe resource conflicts could prevent a device from being recognized or started.
- Third-Party Filter Driver Impact: A bus filter driver or a lower filter driver in the device stack for the target device could prevent the device from being enumerated or started correctly. A bug in such a filter might make the device appear non-existent to higher levels.
Triggering Conditions ("When"):
- During system boot if the boot device specified in the BCD is not found or its driver fails to load.86, 87
- When an application or driver attempts to open a handle to a device object (e.g., via
NtCreateFile
with a device path like\Device\DeviceName
) that is not registered with the I/O Manager. - During Plug and Play device enumeration if a device is physically present but cannot be initialized due to hardware or driver problems.
- Accessing a removable media device that has been ejected.
- Snippet Integration: 12, 86, 87
-
Error Code Value: 0xC000000F
Symbolic Name:
STATUS_NO_SUCH_FILE
Originating Module/Component: Kernel Executive Subsystems (I/O Manager) / File System Drivers
Associated Error Message Text(s): "{File Not Found} The file %hs does not exist."
Detailed Causation ("Why"):
- Object/Entity Non-existence: The primary cause: the specified file or directory genuinely does not exist at the provided path.
- Invalid Parameters: An incorrect file path string was provided (e.g., syntax errors, invalid characters, excessively long path for some contexts).
- Path Component Missing: One of the directory components in the specified path does not exist.
- Configuration Errors: During system startup, if critical boot files referenced in the Boot Configuration Data (BCD) are missing or the BCD itself is corrupted, this error can occur, preventing the system from booting.88, 89
- Dependency Failures: When loading a module (e.g., an EXE or DLL), if a statically linked dependent DLL cannot be found.
- Third-Party Filter Driver Impact:
- A file system minifilter could, in theory, hide a file or modify a path lookup in such a way that a file appears not to exist, though this is less common than explicit blocking with
STATUS_ACCESS_DENIED
. - A bug in a filter driver could corrupt directory metadata on disk, leading to files becoming "lost" or inaccessible.
- A file system minifilter could, in theory, hide a file or modify a path lookup in such a way that a file appears not to exist, though this is less common than explicit blocking with
Triggering Conditions ("When"):
- During file system operations such as opening (
NtCreateFile
,NtOpenFile
), querying attributes, renaming, or deleting a file when the target file or a directory in its path does not exist. - During system boot if essential system files (e.g., kernel, HAL, boot drivers, BCD store) are missing or cannot be located.88, 89
- When an application attempts to load a DLL that is not present in the standard search paths or the application's directory.
- When
CreateProcess
is called for an executable file that cannot be found. - Snippet Integration: 12, 88, 89
-
Error Code Value: 0xC0000010
Symbolic Name:
STATUS_INVALID_DEVICE_REQUEST
Originating Module/Component: Kernel Executive Subsystems (I/O Manager) / Device Drivers
Associated Error Message Text(s): "{Invalid Device Request} The specified command or parameters are not valid for the device." (Message text may vary slightly or be generic like "The parameter is incorrect.")
Detailed Causation ("Why"):
- Invalid Parameters: An I/O control code (IOCTL) sent to a device driver is not recognized or supported by that driver. The parameters associated with the IOCTL (input/output buffer sizes, method codes) are incorrect or inconsistent with what the driver expects for that IOCTL.
- Unsupported Operation: The requested operation (e.g., a specific FSCTL for a file system, or a specific IOCTL for a device) is not implemented or is not valid for the target file object or device state.
- Driver State: The device driver is not in a state to process the request (e.g., device not started, being removed, or in a fault state).
- File System Incompatibility: Attempting a file system control (FSCTL) operation on a file object that resides on a file system that does not support that specific FSCTL.
- WDF Framework Handling: The Windows Driver Framework (WDF) might complete an IRP with this status if it receives an IRP with a major function code that it does not support by default and the driver has not registered a preprocessor callback for it.68
- Third-Party Filter Driver Impact:
- A filter driver might incorrectly modify an IRP (e.g., changing the IOCTL code or parameters) before passing it to a lower driver, causing the lower driver to reject it with
STATUS_INVALID_DEVICE_REQUEST
. - A filter driver might itself handle certain IOCTLs and return this status if the incoming request is malformed from its perspective or if it decides to block it for policy reasons (though
STATUS_ACCESS_DENIED
might be more appropriate for policy blocks). - DFS referrals using IOCTLs can fail with this if there's an issue in the DFS process or with the target file system.90
- A filter driver might incorrectly modify an IRP (e.g., changing the IOCTL code or parameters) before passing it to a lower driver, causing the lower driver to reject it with
Triggering Conditions ("When"):
- When a user-mode application calls
DeviceIoControl
with an invalid IOCTL code or incorrect buffer parameters for the target device driver. - When a kernel-mode driver sends an IRP with an unsupported major function code or IOCTL/FSCTL to another driver.
- If a KMDF driver receives an IRP for an operation like
IRP_MJ_CREATE_NAMED_PIPE
orIRP_MJ_FILE_SYSTEM_CONTROL
and is not a filter driver and has no preprocessor callback registered; the framework completes it with this status.68 - During interactions with Distributed File System (DFS) if an IOCTL related to a DFS referral fails on the target server.90
- Disabling and re-enabling display adapters, then attempting to update drivers, can sometimes trigger this if the device state is inconsistent.91
- Snippet Integration: 12, 68, 90, 91
-
Error Code Value: 0xC0000022
Symbolic Name:
STATUS_ACCESS_DENIED
Originating Module/Component: Kernel Executive Subsystems (I/O Manager, Security Reference Monitor, Object Manager) / File System Drivers / Registry Filters / Network Filters
Associated Error Message Text(s): "{Access Denied} A process has requested access to an object but has not been granted those access rights."
Detailed Causation ("Why"):
- Access Control/Permissions: The primary cause. The caller's security token (representing the user and their groups) lacks the necessary access rights as defined in the Discretionary Access Control List (DACL) of the target object (file, directory, registry key, device, named pipe, etc.) for the type of access being requested (e.g., read, write, delete, execute, synchronize).
- Privileges: A required privilege (e.g.,
SeBackupPrivilege
for certain backup operations,SeSecurityPrivilege
for SACL access) is not present or not enabled in the caller's token. - Mandatory Integrity Control (MIC): A process running at a lower integrity level attempting to write to or modify an object labeled with a higher integrity level (e.g., a Low integrity process trying to write to a Medium integrity file).
- Sharing Modes (Less Common): While
STATUS_SHARING_VIOLATION
is specific to file sharing conflicts, sometimes overly restrictive opens by one party can lead to subsequent access attempts failing withSTATUS_ACCESS_DENIED
if the desired access bits cannot be granted due to the existing open. - Object Type Specific Restrictions: Certain objects may have inherent restrictions (e.g., trying to open a process object for
PROCESS_TERMINATE
on a protected system process). - Third-Party Filter Driver Impact (CRITICAL):
- Explicit Blocking by Security Software: File system minifilters (antivirus, EDR, DLP), registry filter drivers, and network filter drivers (WFP/NDIS, e.g., firewalls) are frequent sources of this error. They intercept operations and can complete them with
STATUS_ACCESS_DENIED
if the operation violates a defined security policy (e.g., an AV quarantining a file, a DLP tool preventing writing to a USB drive, an EDR blocking a suspicious process modification, a firewall blocking a network connection attempt that translates to this at a higher layer).60, 77, 78, 92, 93 - Filter Bugs or Conflicts: A bug in a filter driver might erroneously deny access, or conflicts between multiple layered filters could lead to an incorrect denial.
- Explicit Blocking by Security Software: File system minifilters (antivirus, EDR, DLP), registry filter drivers, and network filter drivers (WFP/NDIS, e.g., firewalls) are frequent sources of this error. They intercept operations and can complete them with
Triggering Conditions ("When"):
- Attempting to open, read, write, delete, execute, or query/set security on any securable kernel object without sufficient permissions.
- During
NtCreateFile
for file/directory access,NtOpenKey
/NtCreateKey
for registry access,NtOpenProcess
/NtOpenThread
for process/thread access. - When a service attempts to start but its service account lacks permissions to its executable file, dependencies, or required resources.93
- When Kernel-EventTracing fails to start a logger session due to permission issues on log files or ETW provider registration.92
- A minifilter driver explicitly returning
STATUS_ACCESS_DENIED
in its pre-operation callback for an IRP.60 - Snippet Integration: 12, 60, 77, 78, 92, 93
-
Error Code Value: 0xC0000034
Symbolic Name:
STATUS_OBJECT_NAME_NOT_FOUND
Originating Module/Component: Kernel Executive Subsystems (Object Manager)
Associated Error Message Text(s): "The object name is not found."
Detailed Causation ("Why"):
- Object/Entity Non-existence: The specified named kernel object (e.g., device, symbolic link, event, mutex, semaphore, section, job, file, directory, registry key) does not exist in the Object Manager namespace or the relevant object directory (e.g.,
\Device
,\KernelObjects
,\??
). - Invalid Parameters: The path or name provided for the object is syntactically incorrect, contains invalid characters, or is
NULL
. - Path Component Missing: For hierarchical object names (like file paths or registry paths), an intermediate component of the path does not exist.
- Timing Issues: An attempt to open an object that has just been deleted by another thread/process or has not yet been created.
- Configuration Errors (Boot): During system startup, if the Boot Configuration Data (BCD) is corrupted or refers to missing boot devices or files, the Object Manager may fail to find critical named objects required for the boot process, leading to this error or related errors like
STATUS_NO_SUCH_DEVICE
orSTATUS_NO_SUCH_FILE
.94, 95 - Networked File Systems (SMB Cache): When accessing files on a remote SMB share, the client-side SMB redirector (e.g.,
Mrxsmb20.sys
) maintains a directory cache. If this cache is not updated correctly after a file is created on the server, a subsequent attempt to open that newly created file from the client might fail withSTATUS_OBJECT_NAME_NOT_FOUND
due to the stale cache entry.96 - Third-Party Filter Driver Impact:
- File system or registry filter drivers could theoretically interfere with name lookup operations, for example, by modifying the name string being looked up or by incorrectly failing a name query.
- More commonly, a filter might cause the object to be deleted or renamed unexpectedly, leading to subsequent "not found" errors.
Triggering Conditions ("When"):
- During calls to open or query kernel objects by name (e.g.,
NtOpenFile
,NtOpenKey
,NtOpenSymbolicLinkObject
,NtOpenEvent
) when the name is incorrect, the object does not exist, or an intermediate path component is missing. - When a driver attempts to open a device object by name (
IoGetDeviceObjectPointer
) and the name is misspelled or the device is not registered. - During system startup if critical named objects required for booting are missing or their paths are invalid in the BCD.94, 95
- When accessing files on an SMB share under specific caching race conditions, particularly after remote file creation.96
- Snippet Integration: 12, 94, 95, 96
- Object/Entity Non-existence: The specified named kernel object (e.g., device, symbolic link, event, mutex, semaphore, section, job, file, directory, registry key) does not exist in the Object Manager namespace or the relevant object directory (e.g.,
-
Error Code Value: 0xC0000035
Symbolic Name:
STATUS_OBJECT_NAME_COLLISION
Originating Module/Component: Kernel Executive Subsystems (Object Manager) / File System Drivers / Registry
Associated Error Message Text(s): "{Object Exists} An attempt was made to create an object and the object name already exists."12
Detailed Causation ("Why"):
- Object/Entity Existence: An attempt was made to create a named kernel object (e.g., file, directory, registry key, symbolic link, event, mutex, semaphore, device) with a specific name, but an object with that same name already exists in the target directory or namespace.
- Concurrency/Synchronization: A race condition where multiple threads or processes attempt to create an object with the same name simultaneously, and one succeeds while others get this error.
- Software Bugs: An application or driver does not correctly check for the existence of an object before attempting to create it, or fails to clean up (delete) a named object from a previous instance or run.
- File System Operations: When creating a file or directory using
NtCreateFile
with aCreateDisposition
ofFILE_CREATE
(create if not exists, fail if exists), this status is returned if the file/directory already exists. This is then typically translated toERROR_ALREADY_EXISTS
in user mode. - Registry Operations: Similar to file systems, attempting to create a registry key with
NtCreateKey
when the key already exists and no "open if exists" disposition is specified.
Triggering Conditions ("When"):
- Calling object creation functions like
NtCreateFile
,NtCreateKey
,IoCreateDevice
,IoCreateSymbolicLink
,NtCreateEvent
with parameters that specify "create only" semantics, when an object of the same name already exists at the target location. - Commonly encountered by applications that use named mutexes or events for singleton behavior (ensuring only one instance runs) if a previous instance did not shut down cleanly and release the named object.
- When an ETW (Event Tracing for Windows) logger (e.g., PerfDiag Logger) attempts to start a session with a name that is already in use by another active logger session.97
- In file system operations, attempting to create a directory (
mkdir
) that already exists can result in this error, especially in networked file system protocols like SMB if not handled by checking existence first.98,99 - Snippet Integration: 12, 97, 98, 99
-
Error Code Value: 0xC0000043
Symbolic Name:
STATUS_SHARING_VIOLATION
Originating Module/Component: Kernel Executive Subsystems (I/O Manager) / File System Drivers
Associated Error Message Text(s): "A file cannot be opened because the share access flags are incompatible."
Detailed Causation ("Why"):
- Access Control/Permissions (Sharing Modes): The primary cause. An attempt was made to open a file using
NtCreateFile
withDesiredAccess
(e.g.,GENERIC_READ
,GENERIC_WRITE
,DELETE
) and/orShareAccess
(e.g.,FILE_SHARE_READ
,FILE_SHARE_WRITE
,FILE_SHARE_DELETE
) flags that conflict with how the file is already opened by another handle (which could be in the same process or a different process). For example, Process A opensfile.txt
withDesiredAccess = GENERIC_READ
andShareAccess = FILE_SHARE_READ
. If Process B then attempts to openfile.txt
withDesiredAccess = GENERIC_WRITE
, it will fail withSTATUS_SHARING_VIOLATION
because Process A did not specifyFILE_SHARE_WRITE
. - Handles Not Closed: A previous operation (or another currently running process/thread) opened the file but did not properly close its handle, leaving the file locked according to the share mode of that existing open. This includes handles to memory sections (
NtCreateSection
) that are backed by the file, as these also maintain a reference and enforce sharing.100 - File System Specifics: Certain file system behaviors can lead to this. For NTFS on older Windows versions (Windows 7/Server 2008 R2), opening a highly fragmented file with the
IO_OPEN_PAGING_FILE
flag, closing it, and then attempting to reopen it without this flag (or vice-versa) could result inSTATUS_SHARING_VIOLATION
due to issues with how the attribute list of the File Control Block (FCB) was handled.20 - Third-Party Filter Driver Impact:
- File system filter drivers (e.g., antivirus scanners, backup agents, on-access encryption tools, EDR agents) often need to open files to perform their tasks. If such a filter opens a file with restrictive sharing flags (e.g., no sharing allowed while it scans) or holds the file handle for an extended period, it can cause subsequent open attempts by other applications or system components to fail with
STATUS_SHARING_VIOLATION
. - A filter driver might also incorrectly modify the sharing flags in an
IRP_MJ_CREATE
request or might itself attempt to open a file (e.g., in a post-cleanup callback to delete it) and encounter a sharing violation due to locks held by other components like the network redirector.60 - Security software can explicitly return this status to block an operation based on policy, though
STATUS_ACCESS_DENIED
is often more semantically correct for policy-based blocks.
- File system filter drivers (e.g., antivirus scanners, backup agents, on-access encryption tools, EDR agents) often need to open files to perform their tasks. If such a filter opens a file with restrictive sharing flags (e.g., no sharing allowed while it scans) or holds the file handle for an extended period, it can cause subsequent open attempts by other applications or system components to fail with
Triggering Conditions ("When"):
- Calling
NtCreateFile
(or Win32CreateFile
) to open a file when another handle to the same file already exists with incompatible sharing modes specified in theShareAccess
parameter of the existing open(s) and theDesiredAccess
andShareAccess
of the current request. - Common in scenarios with concurrent access to the same file by multiple applications, services, or even different threads within the same application if they open separate handles with conflicting sharing.
- When a kernel driver attempts to open a file (e.g.,
ntdll.dll
ornotepad.exe
as in 100) for mapping, and a previous instance of the driver or another component still holds a conflicting handle or mapping. - A minifilter attempting to delete a file on a network share in a post-cleanup callback might encounter this if the file is still locked by the client-side redirector or the server, even if
IO_IGNORE_SHARE_ACCESS_CHECK
is used (as this flag may not be effective for network shares).60 - Snippet Integration: 12, 20, 60, 100
- Access Control/Permissions (Sharing Modes): The primary cause. An attempt was made to open a file using
-
Error Code Value: 0xC000009A
Symbolic Name:
STATUS_INSUFFICIENT_RESOURCES
Originating Module/Component: Kernel Executive Subsystems (Various: Memory Manager, I/O Manager, Object Manager, etc.) / Device Drivers
Associated Error Message Text(s): "{Insufficient System Resources} Insufficient system resources exist to complete the API."
Detailed Causation ("Why"):
- Resource Scarcity (Kernel Memory Pools): This is a very common cause. Exhaustion of kernel-mode memory pools, particularly non-paged pool, but also paged pool or system Page Table Entries (PTEs). Drivers or system components may fail to allocate necessary memory for their operations.
- Resource Scarcity (Other System Resources): Depletion of other critical system resources like system worker threads, IRPs, MDLs, lookaside list entries, or other internal data structures managed by kernel components.
- Quota Limits: Exceeding system-wide or per-process/job quotas for certain resources (though
STATUS_NO_MEMORY
orSTATUS_QUOTA_EXCEEDED
might be more specific for memory quotas). - Driver Issues: Memory leaks in kernel-mode drivers are a primary culprit for pool exhaustion. Drivers making excessive or inefficient resource allocations can also lead to this.
- Hardware Limitations: Insufficient physical RAM can exacerbate pool pressure, but this error usually points to exhaustion of specific kernel-managed resources rather than just general RAM shortage.
- Configuration Issues: Misconfiguration of system parameters related to resource limits (rarely user-adjustable for these specific resources).
- Third-Party Filter Driver Impact:
- Filter drivers are a significant source if they leak kernel pool memory (non-paged or paged), IRPs, or other kernel resources.
- Bugs in filter drivers causing excessive resource consumption (e.g., allocating large buffers per I/O without proper limits) can also trigger this.
- Conflicts between filter drivers could lead to resource contention or leaks.
- A filter driver might fail an operation by returning this status if it cannot allocate its own necessary internal resources to process an intercepted request.
Triggering Conditions ("When"):
- During any kernel-mode operation that requires allocation of finite system resources, such as memory from kernel pools (
ExAllocatePoolWithTag
), IRPs (IoAllocateIrp
), MDLs (IoAllocateMdl
), or other internal structures. - When loading or initializing drivers if they attempt to allocate significant resources and the system is already constrained (e.g.,
WdfDriverCreate
failing if its small internal allocation fails or a subsequent call it makes fails due to resource issues9). - During high system load or after prolonged uptime if memory leaks in drivers have accumulated.
- When the SMB server component encounters resource issues, it might return this status to SMB clients attempting file access.8
- Can manifest as BSODs if critical kernel operations fail due to resource unavailability (e.g.,
KERNEL_MODE_HEAP_CORRUPTION
orDRIVER_IRQL_NOT_LESS_OR_EQUAL
if resource exhaustion leads to data corruption or invalid operations). - Snippet Integration: 8, 9, 12, 65
-
Error Code Value: 0xC0000185
Symbolic Name:
STATUS_IO_DEVICE_ERROR
Originating Module/Component: Kernel Executive Subsystems (I/O Manager) / Device Drivers (especially disk/storage drivers)
Associated Error Message Text(s): "{Device I/O Error} The I/O device reported an I/O error." (Message can be generic).
Detailed Causation ("Why"):
- Hardware/Device Issues: This is a primary cause. Malfunctioning hardware, such as a failing hard disk drive (HDD) or solid-state drive (SSD), bad sectors on the disk, faulty disk controller, loose or damaged data cables (SATA, NVMe), or problems with the storage device's firmware.
- Driver Issues: Bugs in the storage device driver (e.g., Storport miniport, class driver) or lower-level bus drivers (e.g., SATA AHCI controller driver). The driver might be unable to communicate correctly with the hardware or might misinterpret hardware status.
- Data Integrity/Corruption: Corruption of file system metadata or data on the storage device, making it unreadable or causing the device to report errors.
- Power Issues: Insufficient or unstable power supply to the storage device.
- Overheating: Storage device overheating, leading to erratic behavior or failure.
- Configuration Errors: Incorrect BIOS/UEFI settings related to storage controllers (e.g., AHCI/RAID mode). Corrupted Boot Configuration Data (BCD) can lead to boot failures where the system attempts to read from a device that then reports an I/O error.101, 102
- Third-Party Filter Driver Impact:
- Storage filter drivers (e.g., disk encryption software, some types of backup software that interact at a low level, or third-party storage utilities) could interfere with I/O operations.
- A bug in a storage filter driver might corrupt I/O requests or misinterpret responses from the hardware/lower drivers, leading to this error being propagated upwards.
- Filters might also cause excessive load or incompatible commands to be sent to the device.
Triggering Conditions ("When"):
- During any read or write operation to a storage device (HDD, SSD, USB drive, etc.) if the device itself or its controller reports an unrecoverable error.
- When the system attempts to page data to/from the page file located on a faulty disk.
- During system boot if critical boot files or the BCD cannot be read due to underlying device errors, often resulting in a BSOD or boot failure screen with error 0xc0000185.101, 102
- When formatting a disk or performing disk diagnostics if the hardware is failing.
- Accessing files or launching applications whose data resides on a problematic storage device.
- Snippet Integration: 12, 101, 102
c. Object Manager (Ob)
- (Covered
STATUS_OBJECT_NAME_NOT_FOUND
andSTATUS_OBJECT_NAME_COLLISION
under I/O Manager as they often manifest in file/device contexts, but Ob is the ultimate source for named object management.) -
Error Code Value: 0xC000003A
Symbolic Name:
STATUS_OBJECT_PATH_NOT_FOUND
Originating Module/Component: Kernel Executive Subsystems (Object Manager)
Associated Error Message Text(s): "{Path Not Found} The path %hs does not exist."
Detailed Causation ("Why"):
- Object/Entity Non-existence: Similar to
STATUS_OBJECT_NAME_NOT_FOUND
, but specifically indicates that one of the intermediate directory components in a hierarchical object path does not exist. For example, in\DirectoryA\DirectoryB\ObjectName
, ifDirectoryA
exists butDirectoryB
does not, this error would be returned when trying to accessObjectName
. - Invalid Parameters: The path string is malformed, or contains invalid characters specifically within a path component.
- File System Context: For file system paths, this means a directory in the path leading to the target file or directory does not exist.
- Registry Context: For registry paths, an intermediate key in the path to the target key or value does not exist.
- Third-Party Filter Driver Impact:
- A file system or registry filter driver could potentially hide an intermediate directory/key or modify a path lookup, causing a legitimate path to appear non-existent.
- Bugs in filters could corrupt directory/key structures, leading to path components becoming inaccessible.
Triggering Conditions ("When"):
- During calls to open or create kernel objects using a full path when an intermediate component of that path is missing (e.g.,
NtCreateFile
,NtOpenKey
). - When an application attempts to access a file or registry key using a path where one of the parent directories/keys does not exist.
- Can be returned by SMB server if a path component is not found during a remote file access operation.99
- Snippet Integration: [96 (related context), 12, 99]
- Object/Entity Non-existence: Similar to
d. Process and Thread Manager (Ps)
-
Error Code Value: 0xC000000B
Symbolic Name:
STATUS_INVALID_CID
Originating Module/Component: Kernel Executive Subsystems (Process Manager)
Associated Error Message Text(s): "{Invalid Client ID} An invalid Client ID was specified."
Detailed Causation ("Why"):
- Invalid Parameters: An invalid or non-existent Process ID (PID) or Thread ID (TID) was supplied to a system service that operates on processes or threads (e.g.,
NtOpenProcess
,NtOpenThread
). - Object/Entity Non-existence: The process or thread identified by the supplied PID/TID no longer exists (e.g., it has terminated).
- Timing Issues: A race condition where a PID/TID was valid when obtained, but the corresponding process/thread terminated before the API call using that ID was made.
- Incorrect ID Type: Supplying a Thread ID where a Process ID was expected, or vice-versa, if the API is specific.
Triggering Conditions ("When"):
- Calling functions like
PsLookupProcessByProcessId
orPsLookupThreadByThreadId
(kernel mode) or their user-mode equivalents (OpenProcess
,OpenThread
) with a PID/TID that is not currently active or is invalid. - When a driver's thread notification callback (
PsSetCreateThreadNotifyRoutine
) receives a TID for a thread that has already terminated, and then attempts to usePsLookupThreadByThreadId
with that TID.103,129 - Snippet Integration: [103, 129, 12]
- Invalid Parameters: An invalid or non-existent Process ID (PID) or Thread ID (TID) was supplied to a system service that operates on processes or threads (e.g.,
-
Error Code Value: 0xC000004B
Symbolic Name:
STATUS_THREAD_IS_TERMINATING
Originating Module/Component: Kernel Executive Subsystems (Process Manager)
Associated Error Message Text(s): "{Thread Exiting} An attempt was made to operate on a thread that is exiting."
Detailed Causation ("Why"):
- Invalid State/Sequencing: An operation was attempted on a thread object (e.g., suspend, set context, query information) when that thread is already in the process of terminating.
- Concurrency/Synchronization: Race condition where one thread initiates an operation on another thread just as the target thread begins its termination sequence.
- Software Bugs: Attempting to manipulate a thread handle after the thread has exited but before the handle is closed, or attempting to revive/reuse a terminating thread.
Triggering Conditions ("When"):
- Calling functions like
NtSuspendThread
(PsSuspendThread
in kernel) orNtSetContextThread
on a thread that has already started its termination process (e.g., afterPsTerminateSystemThread
or after the thread function returns/callsExitThread
).104 - When a driver or application tries to interact with a thread that is being torn down as part of process termination.
- Snippet Integration: [130 (general context of thread issues), 12, 104]
-
Error Code Value: 0xC000010A
Symbolic Name:
STATUS_PROCESS_IS_TERMINATING
Originating Module/Component: Kernel Executive Subsystems (Process Manager)
Associated Error Message Text(s): "{Process Exiting} An attempt was made to operate on a process that is exiting."
Detailed Causation ("Why"):
- Invalid State/Sequencing: An operation was attempted on a process object (e.g., create thread in process, query process information, write process memory) when that process is already in its termination phase.
- Concurrency/Synchronization: Race condition where one component attempts an operation on a process just as that process begins to terminate (e.g., due to
ExitProcess
,TerminateProcess
, or all its threads exiting). - Software Bugs: Holding onto a process handle and attempting to use it after the process has started exiting.
Triggering Conditions ("When"):
- Calling functions like
NtCreateThreadEx
to create a thread in a process that is already terminating. - Attempting to open a handle to a process (
NtOpenProcess
) or perform operations likeNtReadVirtualMemory
orNtWriteVirtualMemory
when the target process is shutting down. - When a debugger tries to attach to or inspect a process that is in the middle of exiting.
- Snippet Integration: [12, 12]
e. Configuration Manager (CM - Registry)
-
Error Code Value: 0xC000014C
Symbolic Name:
STATUS_REGISTRY_CORRUPT
Originating Module/Component: Kernel Executive Subsystems (Configuration Manager)
Associated Error Message Text(s): "{Registry Corrupt} The structure of one of the files that contains Registry data is corrupt, or the image of the file in memory is corrupt, or the file could not be recovered because the alternate copy or log was absent or corrupt."
Detailed Causation ("Why"):
- Data Integrity/Corruption: Physical corruption of one or more registry hive files (e.g., SYSTEM, SOFTWARE, SAM, SECURITY, DEFAULT located in
\System32\config
) on disk. This can be caused by disk write errors during hive flushing, sudden power loss, or failing disk hardware. - Hardware/Device Issues: Failing hard drive, faulty disk controller, or unstable RAM that corrupts the in-memory image of a registry hive before it's written to disk.
- Software Bugs: Extremely rare bugs in the Configuration Manager itself. More plausibly, poorly written software that interacts with the registry at a very low level (e.g., some disk utilities, or malware) could cause corruption.
- Improper Shutdown: If the system is not shut down cleanly (e.g., hard reset), registry changes might not be fully committed to disk from transaction logs, or hives might be left in an inconsistent state.
- BCD Corruption: While BCD issues often lead to boot file errors, severe BCD corruption affecting hive load parameters could contribute or be co-occurrent.105, 106
- Third-Party Filter Driver Impact: A registry filter driver that incorrectly modifies registry data structures in memory or interferes with the hive loading/flushing mechanisms could theoretically contribute to corruption, though this is less common than filters simply blocking access.
Triggering Conditions ("When"):
- Most commonly during system boot when the Configuration Manager attempts to load the core registry hives into memory. If critical hives like SYSTEM or SOFTWARE are corrupt, this often results in a BSOD or inability to boot.105, 106
- During runtime if an application or service attempts to access a specific part of a registry hive that is corrupted but was not detected or critical at boot time.
- When attempting to load or unload a registry hive manually using functions like
RegLoadKey
orRegUnLoadKey
. - After an unexpected system shutdown or power failure.106
- Snippet Integration: 12, 105, 106
- Data Integrity/Corruption: Physical corruption of one or more registry hive files (e.g., SYSTEM, SOFTWARE, SAM, SECURITY, DEFAULT located in
2. Win32 API Sets (KERNEL32.DLL / KERNELBASE.DLL, USER32.DLL, GDI32.DLL, ADVAPI32.DLL, SHELL32.DLL) - Win32 Error Codes
These errors are typically set by user-mode Win32 API functions and retrieved via GetLastError()
.
a. KERNEL32.DLL / KERNELBASE.DLL (Core File, Memory, Process/Thread APIs)
-
Error Code Value: 0 (Decimal), 0x00000000 (Hex)
Symbolic Name:
ERROR_SUCCESS
Originating Module/Component: Win32 API Sets (Various)
Associated Error Message Text(s): "The operation completed successfully."
Detailed Causation ("Why"):
- Successful Operation: The API call completed without any errors.
Triggering Conditions ("When"):
- Returned by
GetLastError()
after a successful API call that is documented to set the last error toERROR_SUCCESS
on success, or if no error has occurred on the current thread since the last error-setting API call. - Many APIs do not explicitly set
ERROR_SUCCESS
; they only set an error code on failure. Thus,GetLastError()
returning 0 might also mean the last API call succeeded but didn't clear a previous error, or no errorful API has been called. Always check an API's return value (e.g., non-NULL
handle, non-zero success indicator) to determine success before callingGetLastError()
. - Snippet Integration: 71
-
Error Code Value: 1 (Decimal), 0x00000001 (Hex)
Symbolic Name:
ERROR_INVALID_FUNCTION
Originating Module/Component: Win32 API Sets (KERNEL32/KERNELBASE)
Associated Error Message Text(s): "Incorrect function."
Detailed Causation ("Why"):
- Unsupported Operation: The operating system or the specific device/object does not support the requested function or operation. This is a very generic error.
- Driver Rejection: A device driver may reject an I/O request with an underlying NTSTATUS code that maps to this Win32 error if the request is not valid for the device.
- Obsolete API: Calling an API function that is obsolete or not implemented on the current version of Windows.
Triggering Conditions ("When"):
- Attempting an operation that is fundamentally not supported by the target object or the OS version. For example, trying to call a DOS-era function that has no NT equivalent.
- Sometimes occurs with
DeviceIoControl
if the IOCTL is completely unrecognized at a low level, or if a file system control (FSCTL) is sent to a device that is not a file system volume. - Snippet Integration: 71
-
Error Code Value: 2 (Decimal), 0x00000002 (Hex)
Symbolic Name:
ERROR_FILE_NOT_FOUND
Originating Module/Component: Win32 API Sets (KERNEL32/KERNELBASE)
Associated Error Message Text(s): "The system cannot find the file specified."
Detailed Causation ("Why"):
- Object/Entity Non-existence: The primary cause; the file or directory path specified in an API call (e.g.,
CreateFile
,OpenFile
,DeleteFile
,GetFileAttributes
,LoadLibrary
) does not exist. This is the Win32 translation of NTSTATUS codes likeSTATUS_NO_SUCH_FILE
orSTATUS_OBJECT_NAME_NOT_FOUND
. - Invalid Parameters: An incorrect or malformed path string, a misspelled file or directory name.
- Working Directory Issues: If a relative path is used, it's resolved against the current working directory of the process, which might not be what the caller expects.
- Dependency Failures: For
LoadLibrary
, if the specified DLL itself is found but one of its statically linked dependent DLLs is missing, this error (orERROR_MOD_NOT_FOUND
- 126) can occur. - Search Path Issues: For
LoadLibrary
orCreateProcess
, if the executable/DLL is not in the application's directory, the current directory, system directories, or directories specified in the PATH environment variable. - Third-Party Filter Driver Impact: Indirectly. If a file system minifilter causes the underlying
NtCreateFile
(called by Win32CreateFile
) to fail withSTATUS_NO_SUCH_FILE
orSTATUS_OBJECT_NAME_NOT_FOUND
(e.g., by hiding a file or due to a bug corrupting path parsing), this will translate toERROR_FILE_NOT_FOUND
.
Triggering Conditions ("When"):
- Calling file I/O functions (
CreateFile
,GetFileAttributes
,CopyFile
,DeleteFile
, etc.) with a path to a non-existent file or directory. - Attempting to load a DLL (
LoadLibrary
,LoadLibraryEx
) that cannot be located. - Attempting to start a process (
CreateProcess
) where the specified executable file is not found. - Snippet Integration: 12, 71, 107
- Object/Entity Non-existence: The primary cause; the file or directory path specified in an API call (e.g.,
-
Error Code Value: 3 (Decimal), 0x00000003 (Hex)
Symbolic Name:
ERROR_PATH_NOT_FOUND
Originating Module/Component: Win32 API Sets (KERNEL32/KERNELBASE)
Associated Error Message Text(s): "The system cannot find the path specified."
Detailed Causation ("Why"):
- Object/Entity Non-existence (Path Component): One or more directory components in the specified path do not exist. For example, in
C:\Dir1\Dir2\file.txt
, ifC:\Dir1
exists butDir2
does not, attempting to accessfile.txt
will result in this error. This is the Win32 translation ofSTATUS_OBJECT_PATH_NOT_FOUND
. - Invalid Drive: The drive letter specified in the path does not exist or is not currently accessible (e.g., a disconnected network drive or an unmounted removable drive).
- Invalid Parameters: Malformed path string.
- Network Path Issues: For UNC paths (
\\Server\Share\Path
), the server or share may be unavailable, or an intermediate directory in the remote path does not exist. - Third-Party Filter Driver Impact: Similar to
ERROR_FILE_NOT_FOUND
, a file system filter could theoretically hide an intermediate directory or interfere with path parsing, leading to this error.
Triggering Conditions ("When"):
- Object/Entity Non-existence (Path Component): One or more directory components in the specified path do not exist. For example, in
-
Error Code Value: 5 (Decimal), 0x00000005 (Hex)
Symbolic Name:
ERROR_ACCESS_DENIED
Originating Module/Component: Win32 API Sets (KERNEL32/KERNELBASE, ADVAPI32, etc.)
Associated Error Message Text(s): "Access is denied."
Detailed Causation ("Why"):
- Access Control/Permissions: The most common cause. The caller (process/thread security context) lacks the necessary permissions defined by the ACLs on the target object (file, directory, registry key, named pipe, process, service, etc.) for the requested type of access (e.g., read, write, delete, execute, list contents). This is the Win32 translation of
STATUS_ACCESS_DENIED
. - File Attributes: Attempting to write to a file that has the read-only attribute set. Attempting to delete a directory that is not empty (though
ERROR_DIR_NOT_EMPTY
is more specific). - Integrity Levels (MIC): A process running at a lower integrity level attempting to modify an object labeled with a higher integrity level.
- Privileges: A required privilege for the operation is not held or not enabled in the caller's token (e.g., trying to open certain system processes without debug privileges, or SCM operations without administrator rights).
- Sharing Conflicts (Less Common): While
ERROR_SHARING_VIOLATION
is specific, sometimes an attempt to open a file with conflicting access flags when it's already open can result inERROR_ACCESS_DENIED
if the sharing mode doesn't allow even querying attributes. - Service Permissions: Attempting to start, stop, or configure a Windows service without sufficient privileges (often requires Administrator rights).109
- Third-Party Filter Driver Impact (CRITICAL):
- Explicit Blocking by Security Software: File system minifilters (antivirus, EDR, DLP), registry filter drivers, or network filters (firewalls) are a very frequent source. These filters intercept the underlying kernel operation (e.g.,
NtCreateFile
,NtOpenKey
) and cause it to fail withSTATUS_ACCESS_DENIED
, which then translates toERROR_ACCESS_DENIED
in user mode. This happens if the operation violates a security policy (e.g., AV blocking an infected file, DLP preventing a write to a USB drive, EDR blocking a suspicious registry modification).60, 77, 78, 109, 110, 111, 112 - Filter Bugs or Conflicts: A bug in a filter might incorrectly deny access, or conflicts between multiple layered security filters could lead to an unintended denial.
- Explicit Blocking by Security Software: File system minifilters (antivirus, EDR, DLP), registry filter drivers, or network filters (firewalls) are a very frequent source. These filters intercept the underlying kernel operation (e.g.,
Triggering Conditions ("When"):
- Attempting any operation on a securable object (file, directory, registry key, service, process, etc.) for which the caller's effective permissions are insufficient (e.g.,
CreateFile
requesting write access to a file where the user only has read permission;OpenProcess
withPROCESS_ALL_ACCESS
on a protected system process;OpenService
orStartService
on a service requiring administrative rights when run as a standard user). - When a third-party filter driver (AV, EDR, DLP, firewall) intercepts and explicitly blocks the underlying kernel operation based on its security rules.
- Trying to write to a read-only file or into a read-only directory.
- Snippet Integration: 60, 71, 77, 78, 109, 110, 111, 112
- Access Control/Permissions: The most common cause. The caller (process/thread security context) lacks the necessary permissions defined by the ACLs on the target object (file, directory, registry key, named pipe, process, service, etc.) for the requested type of access (e.g., read, write, delete, execute, list contents). This is the Win32 translation of
-
Error Code Value: 6 (Decimal), 0x00000006 (Hex)
Symbolic Name:
ERROR_INVALID_HANDLE
Originating Module/Component: Win32 API Sets (KERNEL32/KERNELBASE, etc.)
Associated Error Message Text(s): "The handle is invalid."
Detailed Causation ("Why"):
- Object/Entity Non-existence (Handle Context): The handle value supplied to an API function does not refer to a valid, open kernel object of the expected type. The object may have been closed, the handle value may have been corrupted, or it might never have been a valid handle. This is often the Win32 translation of
STATUS_INVALID_HANDLE
orSTATUS_OBJECT_TYPE_MISMATCH
. - Use After Close: Attempting to use a handle after it has been closed by
CloseHandle
(or a type-specific close function likeRegCloseKey
,FindClose
). - Uninitialized Handle: Using a handle variable that was never initialized by a successful object creation or opening API call.
- Handle Corruption: Memory corruption overwriting a valid handle variable with an invalid value.
- Incorrect Handle Type: Passing a handle of one object type (e.g., a file handle) to an API expecting a handle of a different type (e.g., a process handle).
- Cross-Process Handle Issues: Attempting to use a handle from one process in another process without proper duplication (
DuplicateHandle
). Handles are process-specific unless explicitly duplicated. - Driver Project Settings: In driver development, incorrect KMDF version settings in the project could lead to
StartService
failing with this error beforeDriverEntry
is even reached, implying an issue with service/driver object creation or registration.113 - Smart Card CSP Issues: In multithreaded applications using Microsoft Base Smart Card CSP, if calls releasing context precede other CryptoAPI calls using the transaction manager, this error can occur due to synchronization problems in BaseCSP under high load.114
Triggering Conditions ("When"):
- Calling any Win32 API function that takes a handle as a parameter (e.g.,
ReadFile
,WriteFile
,GetFileSize
,SetEvent
,WaitForSingleObject
,RegQueryValueEx
,GetProcessTimes
) with a handle value that is not currently valid in the calling process's handle table or is not of the expected object type. - After closing a handle and then inadvertently trying to use it again.
- In multithreaded scenarios, if one thread closes a handle while another thread is about to use it (a race condition).
- When starting a service if the service control manager receives an invalid handle related to the service object, potentially due to driver misconfiguration.113
- Snippet Integration: 71, 113, 114
- Object/Entity Non-existence (Handle Context): The handle value supplied to an API function does not refer to a valid, open kernel object of the expected type. The object may have been closed, the handle value may have been corrupted, or it might never have been a valid handle. This is often the Win32 translation of
-
Error Code Value: 8 (Decimal), 0x00000008 (Hex)
Symbolic Name:
ERROR_NOT_ENOUGH_MEMORY
Originating Module/Component: Win32 API Sets (KERNEL32/KERNELBASE, USER32, GDI32)
Associated Error Message Text(s): "Not enough memory resources are available to process this command."71 or "Not enough storage is available to complete this operation."116
Detailed Causation ("Why"):
- Resource Scarcity (Virtual Memory): The process has exhausted its available virtual address space, or the system cannot satisfy a memory allocation request due to low system commit charge (RAM + page file). This is often the Win32 translation of
STATUS_NO_MEMORY
orSTATUS_COMMITMENT_LIMIT
. - Resource Scarcity (Heap): A specific heap (e.g., the process default heap, or a private heap created with
HeapCreate
) is fragmented or has insufficient free space for the requested allocation (HeapAlloc
). - Resource Scarcity (User/GDI Objects): For UI-related operations, this error can occur if the per-process or system-wide limits for USER objects (windows, menus, cursors) or GDI objects (pens, brushes, DCs, bitmaps) are exhausted. This is often due to resource leaks in applications that create many UI elements without destroying them. The desktop heap for non-interactive window stations (services) is smaller by default and can be depleted, causing services that create UI elements (even hidden ones) to fail.115
- Resource Scarcity (Kernel Pools - Indirectly): If kernel pool exhaustion (
STATUS_INSUFFICIENT_RESOURCES
) prevents the kernel from completing an operation required by a user-mode memory allocation (e.g., allocating page table entries), this can manifest asERROR_NOT_ENOUGH_MEMORY
in user mode. - Software Bugs: Memory leaks in the application itself, consuming virtual address space or heap space over time.
- Atom Table Full:
RegisterClass
can fail with this error if the global atom table (used for class names, window messages) is full, though this is rare.116 - Third-Party Filter Driver Impact: Indirectly. A filter driver leaking kernel pool can lead to overall system memory pressure, making user-mode allocations more likely to fail.
Triggering Conditions ("When"):
- During memory allocation calls like
GlobalAlloc
,LocalAlloc
,HeapAlloc
,VirtualAlloc
,new
in C++. - When creating USER or GDI objects (
CreateWindowEx
,CreatePen
,CreateFont
, etc.) if their respective resource limits are hit. - When
RegisterClass
orRegisterWindowMessage
is called and system resources like the atom table are exhausted.116 - When a Windows service running in a non-interactive session attempts to create UI objects and depletes its smaller desktop heap.115
- During Windows Update or Backup if system resources are constrained, sometimes due to too many language packs installed or interference from security software.117
- Snippet Integration: 71, 115, 116, 117
- Resource Scarcity (Virtual Memory): The process has exhausted its available virtual address space, or the system cannot satisfy a memory allocation request due to low system commit charge (RAM + page file). This is often the Win32 translation of
-
Error Code Value: 15 (Decimal), 0x0000000F (Hex)
Symbolic Name:
ERROR_INVALID_DRIVE
Originating Module/Component: Win32 API Sets (KERNEL32/KERNELBASE)
Associated Error Message Text(s): "The system cannot find the drive specified."
Detailed Causation ("Why"):
- Object/Entity Non-existence: The drive letter specified in a path (e.g., "X:\path\file.txt") does not correspond to any currently valid local or mapped network drive.
- Removable Media: The drive is a removable media drive (floppy, CD/DVD, USB) and no media is inserted, or the media is not formatted or recognized.
- Network Drive Disconnected: The path refers to a mapped network drive that has been disconnected or the remote share is no longer available.
- Hardware Issues: The physical drive itself has failed or is not properly connected/powered.
Triggering Conditions ("When"):
- Attempting to access a file or directory using a path that specifies a non-existent or unavailable drive letter (e.g., in
CreateFile
,SetCurrentDirectory
,GetDiskFreeSpace
). - When an application tries to enumerate drives or query information about a drive that is not valid.
- Snippet Integration: 71
-
Error Code Value: 19 (Decimal), 0x00000013 (Hex)
Symbolic Name:
ERROR_WRITE_PROTECT
Originating Module/Component: Win32 API Sets (KERNEL32/KERNELBASE)
Associated Error Message Text(s): "The media is write protected."
Detailed Causation ("Why"):
- Hardware/Device Issues: An attempt was made to write to a storage medium that is physically write-protected (e.g., a floppy disk with the write-protect tab set, an SD card with the lock switch engaged, some USB drives with a write-protect switch).
- Media Properties: The media itself is inherently read-only (e.g., a CD-ROM, DVD-ROM).
- Driver/Controller Issues: In some cases, a disk driver or controller might erroneously report a write-protect status due to a bug or hardware problem.
Triggering Conditions ("When"):
- Calling file I/O functions that attempt to modify data (
WriteFile
,CreateFile
with write access,DeleteFile
,CreateDirectory
) on a volume or file residing on write-protected media. - Attempting to format media that is write-protected.
- Snippet Integration: 71
-
Error Code Value: 32 (Decimal), 0x00000020 (Hex)
Symbolic Name:
ERROR_SHARING_VIOLATION
Originating Module/Component: Win32 API Sets (KERNEL32/KERNELBASE)
Associated Error Message Text(s): "The process cannot access the file because it is being used by another process."
Detailed Causation ("Why"):
- Access Control/Permissions (Sharing Modes): The primary cause. An attempt was made to open a file with a
dwDesiredAccess
and/ordwShareMode
inCreateFile
that conflicts with how the file is already opened by another handle (in the same or a different process). For example, Process A opens a file for exclusive read (e.g.,dwShareMode = 0
ordwShareMode = FILE_SHARE_READ
but notFILE_SHARE_WRITE
), and Process B then attempts to open it for write access. This is the Win32 translation ofSTATUS_SHARING_VIOLATION
. - File Locked by System/Application: The operating system or another application has the file open in a way that prevents the requested type of access. Common examples include trying to delete an executable file while it is running, or trying to modify a document that is open in an application that locks it.
- Third-Party Filter Driver Impact:
- File system filter drivers (e.g., antivirus scanners inspecting a file, backup software reading it, EDR agents monitoring access, on-access encryption tools) often need to open files. If they open files with restrictive sharing modes (e.g., no sharing allowed during a scan) or hold file handles for extended periods, they can cause
ERROR_SHARING_VIOLATION
for other applications attempting to access the same file. - A filter driver might also incorrectly manage or modify sharing flags in an
IRP_MJ_CREATE
request, leading to unexpected sharing violations. - Security software might effectively cause a sharing violation by holding a file open while it decides whether to block access, sometimes leading to this error if another access attempt occurs concurrently.
- File system filter drivers (e.g., antivirus scanners inspecting a file, backup software reading it, EDR agents monitoring access, on-access encryption tools) often need to open files. If they open files with restrictive sharing modes (e.g., no sharing allowed during a scan) or hold file handles for extended periods, they can cause
Triggering Conditions ("When"):
- Calling
CreateFile
(or other file access APIs likeOpenFile
,DeleteFile
,MoveFile
) when the requested access and sharing disposition for the file conflicts with an existing open handle to that file. - Frequently occurs when one application attempts to write to or delete a file that is currently open (and locked against such operations) by another application (e.g., trying to delete an EXE while it's running, or a document open in Microsoft Word).
- During software updates or installations if files to be replaced are in use by running processes.
- When a file system filter driver has the file open with a conflicting share mode.
- Snippet Integration: 20, 60, 71, 118, 119
- Access Control/Permissions (Sharing Modes): The primary cause. An attempt was made to open a file with a
-
Error Code Value: 33 (Decimal), 0x00000021 (Hex)
Symbolic Name:
ERROR_LOCK_VIOLATION
Originating Module/Component: Win32 API Sets (KERNEL32/KERNELBASE)
Associated Error Message Text(s): "The process cannot access the file because another process has locked a portion of the file."
Detailed Causation ("Why"):
- Concurrency/Synchronization (File Locking): An attempt was made to access (read or write) a region of a file that has been locked by another process (or another handle within the same process) using
LockFile
orLockFileEx
. File locking is a cooperative mechanism to prevent simultaneous modification of shared file regions. - Conflicting Lock Request: The current process tried to lock a region that overlaps with an existing lock held by another process, and the lock types are incompatible (e.g., both trying for an exclusive lock, or one holding an exclusive lock and another trying for a shared or exclusive lock).
- Accessing a Locked Region: Attempting to read from or write to a byte range within a file that falls within a region currently locked by another handle with a conflicting lock mode.
- Third-Party Filter Driver Impact: While less common for direct causation, a file system filter driver that itself uses file locking mechanisms (
FSCTL_LOCK_VOLUME
,FSCTL_UNLOCK_VOLUME
, or byte-range locks via IRPs) could potentially create or exacerbate lock violation scenarios if its locking logic is flawed or interacts poorly with application-level locks. More likely, a filter might hold a file open in a way that prevents another process from acquiring a necessary lock.
Triggering Conditions ("When"):
- Calling
ReadFile
orWriteFile
(or their Ex variants) on a file handle to access a region of the file that is currently locked by another process's handle. - Calling
LockFile
orLockFileEx
to acquire a lock on a file region that is already locked incompatibly by another handle. - Common in database applications or other multi-user applications that use byte-range file locking to manage concurrent access to shared data files.
- Snippet Integration: [131, 132 (general patch context, not specific error), 71]
- Concurrency/Synchronization (File Locking): An attempt was made to access (read or write) a region of a file that has been locked by another process (or another handle within the same process) using
-
Error Code Value: 87 (Decimal), 0x00000057 (Hex)
Symbolic Name:
ERROR_INVALID_PARAMETER
Originating Module/Component: Win32 API Sets (Various: KERNEL32/KERNELBASE, ADVAPI32, USER32, etc.)
Associated Error Message Text(s): "The parameter is incorrect."
Detailed Causation ("Why"):
- Invalid Parameters: One or more arguments passed to a Win32 API function are invalid for that function. This could mean a value is out of the allowed range, a required pointer is
NULL
, a combination of flags is illegal, an enumeration value is undefined, or a string parameter is malformed. This is a very generic error indicating a programmatic mistake by the caller. - Object State: Attempting an operation on an object (e.g., file handle, process handle, window handle) that is not in a valid state for that operation, or the handle itself is valid but the operation is not appropriate for the object type or current state.
- Pointer Issues: Passing a
NULL
pointer for a buffer that is required to be non-NULL
, or a pointer to an invalid memory address. - Enumeration/Flag Values: Using undefined, obsolete, or mutually exclusive flag values in API calls that accept bitmask flags or enumerated types.
- String Formatting: Incorrectly formatted strings, such as paths with invalid characters or incorrect termination.
- Third-Party Filter Driver Impact: Unlikely to be directly *returned* by a Win32 API due to a filter. However, a filter driver could modify system state or data in such a way that an application subsequently makes an API call with parameters that *become* invalid due to the filter's actions. For example, if a filter renames a file unexpectedly, a subsequent attempt to open it with the old name (now an invalid parameter in that context) might fail differently than
ERROR_FILE_NOT_FOUND
.
Triggering Conditions ("When"):
- Calling almost any Win32 API function with arguments that do not meet the documented requirements for that function (e.g., invalid flags to
CreateFile
, aNULL
pointer for a required output buffer inReadFile
, an invalid process ID toOpenProcess
120, an invalid service name toOpenService
). - Occurs if Dr. Watson (error reporting) attempts to attach to a process that has already terminated, as the process ID parameter becomes invalid.121
- When
OpenProcess
is called with a PID that is invalid (e.g., 0 for System Process, or a TID mistaken for a PID), or for a process owned by a different user/desktop/session under certain conditions where access denied isn't the primary failure mode.120 - Snippet Integration: 71, 120, 121
- Invalid Parameters: One or more arguments passed to a Win32 API function are invalid for that function. This could mean a value is out of the allowed range, a required pointer is
-
Error Code Value: 122 (Decimal), 0x0000007A (Hex)
Symbolic Name:
ERROR_INSUFFICIENT_BUFFER
Originating Module/Component: Win32 API Sets (Various: KERNEL32/KERNELBASE, ADVAPI32, IPHLPAPI, etc.)
Associated Error Message Text(s): "The data area passed to a system call is too small."
Detailed Causation ("Why"):
- Buffer Issues: An API function that writes data to a caller-provided buffer was given a buffer that is too small to hold the entire result. The API typically requires the caller to also pass the size of this buffer.
- Variable-Length Data: Common with APIs that return variable-length information, such as lists of items (e.g.,
GetAdaptersAddresses
,RegEnumKeyEx
,NetShareEnum
), strings, or complex structures whose size is not known in advance. - Incorrect Size Calculation: The caller underestimated the required buffer size.
Triggering Conditions ("When"):
- Calling a Win32 API function that is designed to return data in a caller-supplied buffer, where the provided buffer's size (passed as a parameter) is less than the size of the data the function needs to write.
- Many APIs that can return this error also provide a mechanism to determine the required buffer size. Typically, the call will fail with
ERROR_INSUFFICIENT_BUFFER
, and an output parameter (often the same one used to pass the initial buffer size) will be updated with the size needed. The caller should then reallocate a buffer of at least this required size and call the API again. - Example APIs:
GetUserName
,GetComputerNameEx
,GetTokenInformation
,RegQueryValueEx
,GetAdaptersAddresses
122,LookupPrivilegeValue
. - Snippet Integration: [122, 129 (NTSTATUS context, but conceptually related), 71]
-
Error Code Value: 183 (Decimal), 0x000000B7 (Hex)
Symbolic Name:
ERROR_ALREADY_EXISTS
Originating Module/Component: Win32 API Sets (KERNEL32/KERNELBASE)
Associated Error Message Text(s): "Cannot create a file when that file already exists."
Detailed Causation ("Why"):
- Object/Entity Existence: An attempt was made to create an object (typically a file or directory, but also named kernel objects like mutexes, events, or semaphores) using a "create new" or "create only if not exists" disposition, but an object with the same name already exists. This is the Win32 translation of
STATUS_OBJECT_NAME_COLLISION
or similar NTSTATUS codes. - File Creation Disposition: Using
CREATE_NEW
as thedwCreationDisposition
parameter inCreateFile
when the specified file already exists. - Directory Creation: Using
CreateDirectory
when the directory path already exists. - Named Objects: Using
CreateMutex
,CreateEvent
,CreateSemaphore
with a name for an object that already exists in the system or session namespace. - Registry Key Creation: Using
RegCreateKeyEx
with certain options if the key already exists and overwrite is not permitted by the options. - Third-Party Filter Driver Impact: Unlikely to be a direct cause from a filter for this specific error. Filters might cause the *underlying*
STATUS_OBJECT_NAME_COLLISION
from the kernel if they interfere with name resolution or object creation in a way that makes the system think an object exists when the caller expects to create it anew. However, if a filter *blocks* creation, it's more likely to useERROR_ACCESS_DENIED
.
Triggering Conditions ("When"):
- Calling
CreateFile
with theCREATE_NEW
flag for a file that already exists. - Calling
CreateDirectory
for a directory path that already exists. - Calling
CreateMutex
,CreateEvent
, orCreateSemaphore
with a specific name if an object with that name already exists and the intent was to create a new one. - When installing software or services if they attempt to create files, directories, or registry keys that were not cleaned up from a previous installation.
- Can occur when starting Windows Process Activation Service (WAS) if it tries to use a file (e.g., for generated keys) that already exists from a previous, possibly failed, attempt.123
- NTLite or DISM operations failing to mount a WIM image if the temporary mount point or related files already exist due to an incomplete previous operation or interference from security software.124
- Snippet Integration: 71, 123, 124
- Object/Entity Existence: An attempt was made to create an object (typically a file or directory, but also named kernel objects like mutexes, events, or semaphores) using a "create new" or "create only if not exists" disposition, but an object with the same name already exists. This is the Win32 translation of
3. Component Object Model (COM/OLE) & RPC Subsystem (OLE32.DLL / COMBASE.DLL / RPCSS) - HRESULT Codes
HRESULTs are the standard error reporting mechanism for COM. They are 32-bit values where the top bit indicates success (0) or failure (1). The HRESULT also contains a facility code and an error code specific to that facility.
-
Error Code Value: 0x80004001
Symbolic Name:
E_NOTIMPL
Originating Module/Component: COM/OLE (OLE32/COMBASE) / COM Servers
Associated Error Message Text(s): "Not implemented"
Detailed Causation ("Why"):
- COM Object Logic: A COM object's method was called, but the object (or the specific interface implementation) has not implemented that particular method. The method exists in the interface definition (IDL), but the server provides a stub implementation that returns
E_NOTIMPL
. - Incomplete Implementation: The COM server is partially implemented, or a feature associated with the called method is not available in the current version or configuration of the server.
- Interface Versioning: An older version of a COM component might be registered/running that does not support a method added in a newer version of an interface.
- Apprentice vs. Full API: In contexts like Autodesk Inventor's API, some methods available in the full Inventor application object model are not implemented in the Apprentice Server (a lightweight version for accessing document data without the full UI), and calling them on an Apprentice object returns
E_NOTIMPL
.125
Triggering Conditions ("When"):
- Calling a method on a COM interface that the implementing object has explicitly chosen not to implement, returning
E_NOTIMPL
. - When a client application calls a method that is part of an optional feature set of a COM server, and that feature is not installed or enabled.
- Attempting to use functionality that is only available in a full version of a product when interacting with a limited or lightweight version of its COM server.125
- In Visual Studio, trying to use a feature (like adding a new table via Server Explorer) that relies on a component that is not correctly installed or registered, potentially leading to this error if an expected interface method isn't found.126
- Snippet Integration: 33, 34, 35, 74, 125, 126
- COM Object Logic: A COM object's method was called, but the object (or the specific interface implementation) has not implemented that particular method. The method exists in the interface definition (IDL), but the server provides a stub implementation that returns
-
Error Code Value: 0x80004002
Symbolic Name:
E_NOINTERFACE
Originating Module/Component: COM/OLE (OLE32/COMBASE)
Associated Error Message Text(s): "No such interface supported"
Detailed Causation ("Why"):
- COM Object Logic: The primary cause. The COM object on which
QueryInterface
was called does not implement the requested interface (identified by its Interface ID - IID). - Incorrect IID: The client code passed an incorrect or misspelled IID to
QueryInterface
. - Proxy/Stub Issues (Marshalling): If the
QueryInterface
call is across apartments, processes, or machines (DCOM), issues with the proxy/stub mechanism for the requested interface can lead toE_NOINTERFACE
. The proxy object on the client side might not be aware of or support marshalling for the requested interface, even if the actual server object implements it. This can happen if the interface is not properly registered for marshalling or if the proxy/stub DLL is missing or misconfigured. - Type Library/Registration Errors: The COM component might not be correctly registered in the system registry, so its interface information (including which interfaces it supports) is unavailable or incorrect.
- Software Bugs (Casting): In languages like C++ or .NET, attempting to cast a COM object pointer (or a
System.__ComObject
in .NET) to an incompatible interface pointer type will internally result in aQueryInterface
call that fails withE_NOINTERFACE
.127, 128 - Threading Model Mismatches: Attempting to obtain an interface that is not marshallable or is restricted by threading models (e.g., trying to get a non-thread-safe interface pointer into the wrong apartment without a suitable proxy).
Triggering Conditions ("When"):
- During a call to
IUnknown::QueryInterface(iid, &ppv)
on any COM object, if the object does not support the interface identified byiid
. - When attempting an explicit or implicit cast of a COM object to an interface type that it does not implement (e.g., in C++ using
dynamic_cast
or a C-style cast on COM interface pointers, or in .NET when casting a generic COM interop wrapper to a specific interop interface type).127, 128 - During object creation (e.g.,
CoCreateInstance
) if marshalling is involved and the requested interface's proxy/stub is not available or registered correctly. - Snippet Integration: 33, 34, 35, 74, 127, 128
- COM Object Logic: The primary cause. The COM object on which
Error Code Summary Table
Originating Module/Component Category | Error Code (Example) | Symbolic Name (Example) | Brief Cause Summary |
---|---|---|---|
Kernel Executive (Memory Manager) | 0xC0000005 | STATUS_ACCESS_VIOLATION |
Invalid memory access (bad pointer, permissions, DEP, bug). |
Kernel Executive (Memory Manager / I/O) | 0xC0000006 | STATUS_IN_PAGE_ERROR |
I/O error occurred while paging data from disk (disk error, corruption, filter driver). |
Kernel Executive (Memory Manager) | 0xC0000017 | STATUS_NO_MEMORY |
System commit limit, page file, or kernel pool exhaustion; quota exceeded; memory leak. |
Kernel Executive (I/O Manager / PnP) | 0xC000000E | STATUS_NO_SUCH_DEVICE |
Specified device object does not exist (removed, disabled, driver issue, config error). |
Kernel Executive (I/O Manager / File System) | 0xC000000F | STATUS_NO_SUCH_FILE |
Specified file/directory does not exist; path error; missing boot file/dependency. |
Kernel Executive (I/O Manager / Drivers) | 0xC0000010 | STATUS_INVALID_DEVICE_REQUEST |
Unsupported IOCTL/FSCTL; invalid parameters for device; driver state invalid. |
Kernel Executive (Security / I/O / Object Mgr / Filters) | 0xC0000022 | STATUS_ACCESS_DENIED |
Insufficient permissions (ACLs), missing privileges, MIC violation, explicit block by filter driver (AV/EDR/DLP). |
Kernel Executive (Object Manager) | 0xC0000034 | STATUS_OBJECT_NAME_NOT_FOUND |
Named kernel object (file, key, event, etc.) does not exist; path error; stale SMB cache. |
Kernel Executive (Object Manager / FS / Registry) | 0xC0000035 | STATUS_OBJECT_NAME_COLLISION |
Attempt to create an object (file, key, named object) that already exists. |
Kernel Executive (Object Manager) | 0xC000003A | STATUS_OBJECT_PATH_NOT_FOUND |
Intermediate directory/key component in a hierarchical path does not exist. |
Kernel Executive (I/O Manager / File System) | 0xC0000043 | STATUS_SHARING_VIOLATION |
File open request conflicts with existing open handle's sharing modes; filter driver interference. |
Kernel Executive (Process Manager) | 0xC000000B | STATUS_INVALID_CID |
Invalid or non-existent Process ID (PID) or Thread ID (TID) supplied. |
Kernel Executive (Process Manager) | 0xC000004B | STATUS_THREAD_IS_TERMINATING |
Operation attempted on a thread object that is already exiting. |
Kernel Executive (Process Manager) | 0xC000010A | STATUS_PROCESS_IS_TERMINATING |
Operation attempted on a process object that is already exiting. |
Kernel Executive (Various / Drivers) | 0xC000009A | STATUS_INSUFFICIENT_RESOURCES |
Kernel resource exhaustion (non-paged/paged pool, PTEs, threads, IRPs); often driver leak. |
Kernel Executive (I/O Manager / Storage Drivers) | 0xC0000185 | STATUS_IO_DEVICE_ERROR |
Hardware I/O error reported by storage device (disk failure, bad sector, cable issue, driver bug). |
Kernel Executive (Configuration Manager) | 0xC000014C | STATUS_REGISTRY_CORRUPT |
Registry hive file is corrupt on disk or in memory; disk error; improper shutdown. |
Win32 API (Various) | 0 | ERROR_SUCCESS |
Operation completed successfully. |
Win32 API (KERNEL32/KERNELBASE) | 1 | ERROR_INVALID_FUNCTION |
Unsupported or incorrect function called (generic). |
Win32 API (KERNEL32/KERNELBASE) | 2 | ERROR_FILE_NOT_FOUND |
File/directory does not exist; path error; missing dependency. (Win32 equivalent of STATUS_NO_SUCH_FILE ). |
Win32 API (KERNEL32/KERNELBASE) | 3 | ERROR_PATH_NOT_FOUND |
Intermediate path component does not exist; invalid drive. (Win32 equivalent of STATUS_OBJECT_PATH_NOT_FOUND ). |
Win32 API (Various) | 5 | ERROR_ACCESS_DENIED |
Insufficient permissions, missing privilege, integrity violation, read-only attribute, block by filter driver. (Win32 equivalent of STATUS_ACCESS_DENIED ). |
Win32 API (KERNEL32/KERNELBASE, etc.) | 6 | ERROR_INVALID_HANDLE |
Handle is invalid, closed, uninitialized, corrupted, or wrong type. (Win32 equivalent of STATUS_INVALID_HANDLE ). |
Win32 API (KERNEL32/USER32/GDI32) | 8 | ERROR_NOT_ENOUGH_MEMORY |
Virtual memory, heap, USER/GDI object exhaustion; memory leak. (Win32 equivalent of STATUS_NO_MEMORY ). |
Win32 API (KERNEL32/KERNELBASE) | 15 | ERROR_INVALID_DRIVE |
Specified drive letter does not exist or is unavailable. |
Win32 API (KERNEL32/KERNELBASE) | 19 | ERROR_WRITE_PROTECT |
Attempt to write to write-protected media. |
Win32 API (KERNEL32/KERNELBASE) | 32 | ERROR_SHARING_VIOLATION |
File access/sharing mode conflicts with existing open handle; file locked by another process/filter. (Win32 equivalent of STATUS_SHARING_VIOLATION ). |
Win32 API (KERNEL32/KERNELBASE) | 33 | ERROR_LOCK_VIOLATION |
Attempt to access a file region locked by another process/handle using LockFile(Ex) . |
Win32 API (Various) | 87 | ERROR_INVALID_PARAMETER |
Incorrect argument passed to API function (value range, NULL pointer, bad flags, malformed string). |
Win32 API (Various) | 122 | ERROR_INSUFFICIENT_BUFFER |
Caller-provided buffer is too small for the data to be returned by the API. |
Win32 API (KERNEL32/KERNELBASE) | 183 | ERROR_ALREADY_EXISTS |
Attempt to create a file/directory/object that already exists using create-new semantics. (Win32 equivalent of STATUS_OBJECT_NAME_COLLISION ). |
COM/OLE / COM Servers | 0x80004001 | E_NOTIMPL |
Called COM method is not implemented by the server object. |
COM/OLE (OLE32/COMBASE) | 0x80004002 | E_NOINTERFACE |
Requested COM interface (IID) is not supported by the object queried; proxy/stub issue; registration error. |
Note: This table provides illustrative examples and brief summaries. Refer to the main catalog for details. Filter driver influence is a common factor not always explicitly stated here. |
Works Cited
- Components of the Windows Hardware Error Architecture - Windows ..., accessed May 12, 2025, https://learn.microsoft.com/en-us/windows-hardware/drivers/whea/components-of-the-windows-hardware-error-architecture
- Propagation - WCF | Microsoft Learn, accessed May 12, 2025, https://learn.microsoft.com/en-us/dotnet/framework/wcf/diagnostics/tracing/propagation
- RtlNtStatusToDosError function (winternl.h) - Win32 apps | Microsoft ..., accessed May 12, 2025, https://learn.microsoft.com/en-us/windows/win32/api/winternl/nf-winternl-rtlntstatustodoserror
- Microsoft-specific exception handling mechanisms - Wikipedia, accessed May 12, 2025, https://en.wikipedia.org/wiki/Microsoft-specific_exception_handling_mechanisms
- Syscalls via Vectored Exception Handling - RedOps - English, accessed May 12, 2025, https://redops.at/en/blog/syscalls-via-vectored-exception-handling
- Return STATUS_PENDING in Create Callback. · Issue #547 - GitHub, accessed May 12, 2025, https://github.com/winfsp/winfsp/issues/547
- IoCreateFile function (wdm.h) - Windows drivers - Learn Microsoft, accessed May 12, 2025, https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/nf-wdm-iocreatefile
- What causes SMB server error STATUS_INSUFFICIENT_RESOURCES (0xc000009a) ? | Microsoft Community Hub, accessed May 12, 2025, https://techcommunity.microsoft.com/discussions/windowsserver/what-causes-smb-server-error-status-insufficient-resources-0xc000009a-/3948713
- WdfDriverCreate fails with status of 0xC000009A - NTDEV - OSR Developer Community, accessed May 12, 2025, https://community.osr.com/t/wdfdrivercreate-fails-with-status-of-0xc000009a/53006
- error WSAENOBUFS (10055) - Windows Client | Microsoft Learn, accessed May 12, 2025, https://learn.microsoft.com/en-us/troubleshoot/windows-client/networking/connect-tcp-greater-than-5000-error-wsaenobufs-10055
- What causes winsock 10055 errors? How should I troubleshoot? - Server Fault, accessed May 12, 2025, https://serverfault.com/questions/399311/what-causes-winsock-10055-errors-how-should-i-troubleshoot
- [MS-ERREF]: NTSTATUS Values | Microsoft Learn, accessed May 12, 2025, https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-erref/596a1078-e883-4972-9bbc-49e60bebca55
- ntstatus.h - CodeMachine, accessed May 12, 2025, https://codemachine.com/downloads/win71/ntstatus.h
- ntoskrnl.exe causing crashes and BSOD, even in safe mode - Microsoft Community, accessed May 12, 2025, https://answers.microsoft.com/en-us/windows/forum/all/ntoskrnlexe-causing-crashes-and-bsod-even-in-safe/73055535-78e0-417e-9b64-d9c91bc7997b
- Troubleshooting Windows Startup and Shutdown Problems | Microsoft Press Store, accessed May 12, 2025, https://www.microsoftpressstore.com/articles/article.aspx?p=2201310
- NT Internals - Nynaeve, accessed May 12, 2025, http://www.nynaeve.net/?cat=10
- Alex Ionescu's Blog – Windows Internals, Thoughts on Security, and Reverse Engineering, accessed May 12, 2025, https://www.alex-ionescu.com/
- Blinding Sysmon: How to disable Windows monitoring in a covert way - HackMag, accessed May 12, 2025, https://hackmag.com/security/sysmon-blinding/
- Book Review: Windows Kernel Programming and Creating Drivers of Select Exercises, accessed May 12, 2025, https://truneski.github.io/post/2020/04/03/book-review-windows-kernel-programming-and-creating-drivers-of-select-exercises/
- "STATUS_SHARING_VIOLATION" error message when you try to open a highly fragmented file on a computer that is running Windows 7 or Windows Server 2008 R2 - Microsoft Support, accessed May 12, 2025, https://support.microsoft.com/en-us/topic/-status-sharing-violation-error-message-when-you-try-to-open-a-highly-fragmented-file-on-a-computer-that-is-running-windows-7-or-windows-server-2008-r2-be899c3b-8c5a-c883-ce0d-055d258a9178
- BSOD Problems INTERNAL POWER ERROR crashdump ntoskrnl - Microsoft Community, accessed May 12, 2025, https://answers.microsoft.com/en-us/windows/forum/all/bsod-problems-internal-power-error-crashdump/493a90bd-549f-49b2-bf30-bb98cfa2d1fc
- GUI application Execution fails after porting an application from VS2015 to VS2022. - Learn Microsoft, accessed May 12, 2025, https://learn.microsoft.com/en-us/answers/questions/2140710/gui-application-execution-fails-after-porting-an-a
- Faulting module name: KERNELBASE.dll - Microsoft Community, accessed May 12, 2025, https://answers.microsoft.com/en-us/windows/forum/all/faulting-module-name-kernelbasedll/d5a7b008-eb11-4e9e-ab5f-63016fe760d9
- Kernel32.dll - Glossary - DevX, accessed May 12, 2025, https://www.devx.com/terms/kernel32-dll/
- How to correct common User32.dll file errors - Microsoft Support, accessed May 12, 2025, https://support.microsoft.com/en-us/topic/how-to-correct-common-user32-dll-file-errors-3b34cc67-5741-ce2b-cc7d-86d5410f44f4
- Is user32.dll the "WinApi" msdn speaks of? - Stack Overflow, accessed May 12, 2025, https://stackoverflow.com/questions/48823107/is-user32-dll-the-winapi-msdn-speaks-of
- Quickly Fix the GDI32.dll was not Found Error on Windows - Fortect, accessed May 12, 2025, https://www.fortect.com/fix-dll-errors/gdi32-dll-not-found-windows/
- How to Fix Gdi32.dll Not Found or Missing Errors - TechSpace, accessed May 12, 2025, https://techspace.co.th/help/kb/systems/os/win10/how-to-fix-gdi32-dll-not-found-or-missing-errors
- How to Fix Advapi32.dll Not Found or Missing Errors - Lifewire, accessed May 12, 2025, https://www.lifewire.com/how-to-fix-advapi32-dll-not-found-or-missing-errors-2622982
- Advapi32.dll not found: what to do if this error occurs on your PC? - DiskInternals, accessed May 12, 2025, https://www.diskinternals.com/partition-recovery/advapi32-dll-not-found/
- How to Fix Shell32.dll Not Found or Missing Errors - Lifewire, accessed May 12, 2025, https://www.lifewire.com/how-to-fix-shell32-dll-not-found-or-missing-errors-2624008
- ShellExecuteA function (shellapi.h) - Win32 apps | Microsoft Learn, accessed May 12, 2025, https://learn.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shellexecutea
- HRESULT Error Codes | Microsoft Learn, accessed May 12, 2025, https://learn.microsoft.com/en-us/shows/inside/hresult
- Error Codes in COM - Win32 apps | Microsoft Learn, accessed May 12, 2025, https://learn.microsoft.com/en-us/windows/win32/learnwin32/error-codes-in-com
- COM Error Codes (Generic) (Winerror.h) - Win32 apps | Microsoft ..., accessed May 12, 2025, https://learn.microsoft.com/en-us/windows/win32/com/com-error-codes-1
- Error the RPC server is unavailable - Windows Server | Microsoft Learn, accessed May 12, 2025, https://learn.microsoft.com/en-us/troubleshoot/windows-server/user-profiles-and-logon/not-log-on-error-rpc-server-unavailable
- RPC error troubleshooting guidance - Windows Client | Microsoft ..., accessed May 12, 2025, https://learn.microsoft.com/en-us/troubleshoot/windows-client/networking/rpc-errors-troubleshooting
- impacket/impacket/hresult_errors.py at master · fortra/impacket - GitHub, accessed May 12, 2025, https://github.com/SecureAuthCorp/impacket/blob/master/impacket/hresult_errors.py
- HRESULT (Enums) - PInvoke.net, accessed May 12, 2025, https://www.pinvoke.net/default.aspx/Enums/HRESULT.html
- Exception.HResult Property (System) | Microsoft Learn, accessed May 12, 2025, https://learn.microsoft.com/en-us/dotnet/api/system.exception.hresult?view=net-9.0
- How to: Map HRESULTs and Exceptions - .NET Framework ..., accessed May 12, 2025, https://learn.microsoft.com/en-us/dotnet/framework/interop/how-to-map-hresults-and-exceptions
- Why am I getting linker errors for ws2_32.dll in my C program? - Stack Overflow, accessed May 12, 2025, https://stackoverflow.com/questions/5220309/why-am-i-getting-linker-errors-for-ws2-32-dll-in-my-c-program
- bind function (winsock.h) - Win32 apps | Microsoft Learn, accessed May 12, 2025, https://learn.microsoft.com/en-us/windows/win32/api/winsock/nf-winsock-bind
- connect function (winsock2.h) - Win32 apps | Microsoft Learn, accessed May 12, 2025, https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-connect
- Windows Sockets Error Codes (Winsock2.h) - Win32 apps ..., accessed May 12, 2025, https://learn.microsoft.com/en-us/windows/win32/winsock/windows-sockets-error-codes-2
- FwpmCalloutAdd0 function (fwpmk.h) - Windows drivers - Learn Microsoft, accessed May 12, 2025, https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/fwpmk/nf-fwpmk-fwpmcalloutadd0
- Roadmap for Developing WFP Callout Drivers - Windows drivers ..., accessed May 12, 2025, https://learn.microsoft.com/en-us/windows-hardware/drivers/network/roadmap-for-developing-wfp-callout-drivers
- Data corruption and network issues when you run a WFP-based application on a computer that is running Windows - Microsoft Support, accessed May 12, 2025, https://support.microsoft.com/en-us/topic/data-corruption-and-network-issues-when-you-run-a-wfp-based-application-on-a-computer-that-is-running-windows-d9316101-56f4-bc72-3001-83d3dd02b7a4
- NDIS LWF driver causing issues for WFP drivers in the network stack? - Stack Overflow, accessed May 12, 2025, https://stackoverflow.com/questions/69554075/ndis-lwf-driver-causing-issues-for-wfp-drivers-in-the-network-stack
- Roadmap for Developing NDIS Drivers - Windows - Learn Microsoft, accessed May 12, 2025, https://learn.microsoft.com/en-us/windows-hardware/drivers/network/roadmap-for-developing-ndis-drivers
- NDIS Filter Drivers - Windows drivers | Microsoft Learn, accessed May 12, 2025, https://learn.microsoft.com/en-us/windows-hardware/drivers/network/ndis-filter-drivers
- Socket error #11001: Host not found - Remote Utilities, accessed May 12, 2025, https://www.remoteutilities.com/support/kb/socket-error-11001-host-not-found/
- Socket error 11001 or 11004 when testing an alert - Pingman Tools, accessed May 12, 2025, https://www.pingman.com/kb/article/socket-error-11001-or-11004-when-testing-an-alert-45.html
- About File System Filter Drivers - Windows drivers | Microsoft Learn, accessed May 12, 2025, https://learn.microsoft.com/en-us/windows-hardware/drivers/ifs/about-file-system-filter-drivers
- CmCallbackGetKeyObjectID function (wdm.h) - Windows drivers - Learn Microsoft, accessed May 12, 2025, https://learn.microsoft.com/en-gb/windows-hardware/drivers/ddi/wdm/nf-wdm-cmcallbackgetkeyobjectid
- CmCallbackGetKeyObjectIDEx function (wdm.h) - Windows drivers ..., accessed May 12, 2025, https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/nf-wdm-cmcallbackgetkeyobjectidex
- Filtering Registry Calls - Windows drivers - Learn Microsoft, accessed May 12, 2025, https://learn.microsoft.com/en-us/windows-hardware/drivers/kernel/filtering-registry-calls
- CmRegisterCallbackEx function (wdm.h) - Windows drivers - Learn Microsoft, accessed May 12, 2025, https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/nf-wdm-cmregistercallbackex
- EX_CALLBACK_FUNCTION (wdm.h) - Windows drivers | Microsoft ..., accessed May 12, 2025, https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/nc-wdm-ex_callback_function
- Mini-filter and sharing violation in post-cleanup callback - OSR Developer Community, accessed May 12, 2025, https://community.osr.com/t/mini-filter-and-sharing-violation-in-post-cleanup-callback/24822
- Datacom Server TCPIP error 10061 WSAECONNREFUSED Connection Refused, accessed May 12, 2025, https://knowledge.broadcom.com/external/article/203992/datacom-server-tcpip-error-10061-wsaecon.html
- Why do Marshal products report Winsock errors? - Trustwave Support, accessed May 12, 2025, https://support.trustwave.com/kb/Goto12989.aspx
- Socket error 10060 (WSAETIMEDOUT) - TN3270 Plus User Guide, accessed May 12, 2025, https://www.sdisw.com/tn3270/manual/wsaetimedout.htm
- Socket errors 10060, 10061, 10064, 10065, accessed May 12, 2025, https://hstechdocs.helpsystems.com/manuals/globalscape/archive/cuteftp6/socket_errors_10060,_10061,_10064,_10065.htm
- Windows BSOD driver/Windows Install Issues. : r/techsupport - Reddit, accessed May 12, 2025, https://www.reddit.com/r/techsupport/comments/1im90j2/windows_bsod_driverwindows_install_issues/
- How To Fix a Blue Screen of Death (BSOD) on Windows PC - Secure Data Recovery Services, accessed May 12, 2025, https://www.securedatarecovery.com/blog/fixing-blue-screen-of-death
- Introduction to TroubleShootingScript toolset (TSS) - Windows Client | Microsoft Learn, accessed May 12, 2025, https://learn.microsoft.com/en-us/troubleshoot/windows-client/windows-tss/introduction-to-troubleshootingscript-toolset-tss
- Handling an IRP that the Framework does not Support - Windows drivers | Microsoft Learn, accessed May 12, 2025, https://learn.microsoft.com/en-us/windows-hardware/drivers/wdf/handling-an-irp-that-the-framework-does-not-support
- The NT Insider:Secrets of the Universe Revealed! - How NT Handles I/O Completion, accessed May 12, 2025, https://www.osronline.com/article.cfm%5Eid=83.htm
- Use NTSTATUS Values - Windows drivers | Microsoft Learn, accessed May 12, 2025, https://learn.microsoft.com/en-us/windows-hardware/drivers/kernel/using-ntstatus-values
- System Error Codes (0-499) (WinError.h) - Win32 apps | Microsoft Learn, accessed May 12, 2025, https://learn.microsoft.com/en-us/windows/win32/debug/system-error-codes--0-499-
- Windows Error Codes (MSDN) | PDF | Component Object Model - Scribd, accessed May 12, 2025, https://www.scribd.com/doc/89465561/Windows-Error-Codes-MSDN
- [MS-ERREF]: HRESULT Values | Microsoft Learn, accessed May 12, 2025, https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-erref/705fb797-2175-4a90-b5a3-3918024b10b8
- Common HRESULT Values - Win32 apps | Microsoft Learn, accessed May 12, 2025, https://learn.microsoft.com/en-us/windows/win32/seccrypto/common-hresult-values
- COM Error Codes (STG, RPC) (Winerror.h) - Win32 apps - Learn Microsoft, accessed May 12, 2025, https://learn.microsoft.com/en-us/windows/win32/com/com-error-codes-3
- WSASendMsg function (winsock2.h) - Win32 apps | Microsoft Learn, accessed May 12, 2025, https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsasendmsg
- Troubleshooting endpoint data loss prevention configuration and policy sync, accessed May 12, 2025, https://learn.microsoft.com/en-us/purview/dlp-edlp-tshoot-sync
- How to All Error of Encountered a Sharing Violation while Accessing in Windows PC, accessed May 12, 2025, https://www.youtube.com/watch?v=zZ8FMTCxm9Y
- Performance and consistency issues when modules or driver are loaded - SQL Server, accessed May 12, 2025, https://learn.microsoft.com/en-us/troubleshoot/sql/database-engine/performance/performance-consistency-issues-filter-drivers-modules
- Error Code 0xc0000005 in Windows 10? Fix it! - DiskInternals, accessed May 12, 2025, https://www.diskinternals.com/partition-recovery/error-code-0xc0000005-in-windows-10-fix-it/
- 0xc0000005 System Access Violation but Unsure the Trigger is (Chrome, Discord and TiWorker.exe triggers) - Microsoft Community, accessed May 12, 2025, https://answers.microsoft.com/en-us/windows/forum/all/0xc0000005-system-access-violation-but-unsure-the/d1a98a35-1d76-482d-a462-e804c61c501c
- How to Resolve STATUS_IN_PAGE_ERROR (0xc0000006 Error)? - Auslogics, accessed May 12, 2025, https://www.auslogics.com/en/articles/fix-status-in-page-error-0xc0000006-error/
- error code 0xc0000006 - Microsoft Community, accessed May 12, 2025, https://answers.microsoft.com/en-us/windows/forum/all/error-code-0xc0000006/47039af9-8cd4-4689-a3f2-498f10e4ef94
- How to Fix Windows 10 Upgrade Error Code 0xc0000017 - EaseUS Software, accessed May 12, 2025, https://www.easeus.com/computer-instruction/how-to-fix-windows-10-upgrade-error-0xc0000017.html
- Fix Windows 10 Error 0xc0000017 - Computer Repairs, accessed May 12, 2025, https://itfix.org.uk/fix-windows-10-error-0xc0000017/
- How to fix error 0xc00000e in Windows - IONOS, accessed May 12, 2025, https://www.ionos.com/digitalguide/server/configuration/0xc00000e/
- Error 0xc00000e : r/techsupport - Reddit, accessed May 12, 2025, https://www.reddit.com/r/techsupport/comments/18xzf06/error_0xc00000e/
- Computer won't boot and have code 0xc000000f - Microsoft Community, accessed May 12, 2025, https://answers.microsoft.com/en-us/windows/forum/all/computer-wont-boot-and-have-code-0xc000000f/72862f9f-514a-44c7-b1ed-c10743bfbab7
- [SOLVED]: How to Fix 0xc000000f Error on Windows and Regain Control - Geekflare, accessed May 12, 2025, https://geekflare.com/dev/fix-0xc000000f-error-on-windows/
- Randomly getting STATUS_INVALID_DEVICE_REQUEST for every smbclient calls · Issue #154 · jborean93/smbprotocol - GitHub, accessed May 12, 2025, https://github.com/jborean93/smbprotocol/issues/154
- How To Fix The Blue Screen Error Stop Code THREAD STUCK IN DEVICE DRIVER In Windows 10/11 [Tutorial] - YouTube, accessed May 12, 2025, https://www.youtube.com/watch?v=nSMCwPDI1fI
- failed to start with the following error: 0xC0000022 - Microsoft Community, accessed May 12, 2025, https://answers.microsoft.com/en-us/windows/forum/all/failed-to-start-with-the-following-error/31b73dd1-20ce-45b5-bc37-8cb458e79dfe
- Error 0xC0000022 access denied, while trying to activate windows - Microsoft Community, accessed May 12, 2025, https://answers.microsoft.com/en-us/windows/forum/all/error-0xc0000022-access-denied-while-trying-to/ac8ac291-0c56-42f7-97d6-33f62f48a78d
- Fix Windows 10 Error code 0xc0000034 - DiskInternals, accessed May 12, 2025, https://www.diskinternals.com/partition-recovery/0xc0000034/
- BSOD Error Code 0xc0000034 and compatibility issue with USB boot - Windows 10 Forums, accessed May 12, 2025, https://www.tenforums.com/bsod-crashes-debugging/74137-bsod-error-code-0xc0000034-windows-10-a.html
- "STATUS_OBJECT_NAME_NOT_FOUND" error message when you open a newly-created file in a shared folder in Windows 7 or in Windows Server 2008 R2 - Microsoft Support, accessed May 12, 2025, https://support.microsoft.com/en-us/topic/-status-object-name-not-found-error-message-when-you-open-a-newly-created-file-in-a-shared-folder-in-windows-7-or-in-windows-server-2008-r2-111de51c-ea2e-8c68-3ce9-9185a93bb8b8
- PerfDiag Logger failed to start 0xC0000035 - Microsoft Community, accessed May 12, 2025, https://answers.microsoft.com/en-us/windows/forum/all/perfdiag-logger-failed-to-start-0xc0000035/c64191b6-2a2b-4423-a967-6ec4b75fdfe4
- We are getting STATUS_OBJECT_NAME_COLLISION in upload file even though file is not already exist on given path · Issue #551 · hierynomus/smbj - GitHub, accessed May 12, 2025, https://github.com/hierynomus/smbj/issues/551
- [MS-CIFS]: SMB Error Classes and Codes | Microsoft Learn, accessed May 12, 2025, https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-cifs/8f11e0f3-d545-46cc-97e6-f00569e3e1bc
- STATUS_SHARING_VIOLATION when open file for the second time - NTDEV, accessed May 12, 2025, https://community.osr.com/t/status-sharing-violation-when-open-file-for-the-second-time/49156
- Windows Error Code 0xc0000185 - PC Outlet, accessed May 12, 2025, https://pcoutlet.com/software/windows/windows-error-code-0xc0000185
- Fix Windows 10/11 Startup Error Code 0xc0000185 - AnyRecover, accessed May 12, 2025, https://www.anyrecover.com/recover-computer-data/error-code-0xc0000185/
- PsLookupThreadByThreadId is failing with STATUS_INVALID_CID[0xC000000B] - NTDEV, accessed May 12, 2025, https://community.osr.com/t/pslookupthreadbythreadid-is-failing-with-status-invalid-cid-0xc000000b/49393
- Windows Thread Suspension Internals Part 1 - Reverse Engineering 0x4 Fun, accessed May 12, 2025, http://rce4fun.blogspot.com/2014/11/windows-thread-suspension-internals.html
- Fix: Boot Configuration Data Unreadable Error 0xc000014c - MiniTool Partition Wizard, accessed May 12, 2025, https://www.partitionwizard.com/partitionmagic/0xc000014c.html
- BSOD|| Technical Description of System Error (0xc000014c) - Arcserve Support, accessed May 12, 2025, https://support.arcserve.com/s/article/KB000009266
- How to convert specific NTSTATUS value to the Hresult? - Stack Overflow, accessed May 12, 2025, https://stackoverflow.com/questions/25566234/how-to-convert-specific-ntstatus-value-to-the-hresult
- Which API returns the message for NTSTATUS? - c++ - Stack Overflow, accessed May 12, 2025, https://stackoverflow.com/questions/78683179/which-api-returns-the-message-for-ntstatus
- Error 5 : Access Denied when starting windows service - Stack Overflow, accessed May 12, 2025, https://stackoverflow.com/questions/4267051/error-5-access-denied-when-starting-windows-service
- What causes WriteFile to return ERROR_ACCESS_DENIED? - Stack Overflow, accessed May 12, 2025, https://stackoverflow.com/questions/4312568/what-causes-writefile-to-return-error-access-denied
- Access is denied on 0x80070005 - Microsoft Community, accessed May 12, 2025, https://answers.microsoft.com/en-us/windows/forum/all/access-is-denied-on-0x80070005/0ad70e81-2343-4bb7-99a9-78f3d9ea578c
- Windows Server error "Access is denied (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))" - Support and Troubleshooting, accessed May 12, 2025, https://support.servicenow.com/kb?id=kb_article_view&sysparm_article=KB0564283
- Why am I getting Error Code 6 on StartService? - Stack Overflow, accessed May 12, 2025, https://stackoverflow.com/questions/13254487/why-am-i-getting-error-code-6-on-startservice
- 0x6 ERROR_INVALID_HANDLE error when a multithreaded application accesses a smart card - Windows Client | Microsoft Learn, accessed May 12, 2025, https://learn.microsoft.com/en-us/troubleshoot/windows-client/certificates-and-public-key-infrastructure-pki/0x6-error-invalid-handle-multithreaded-application
- "Win32Exception Not enough storage is available to process this command" error when run as a windows service - Stack Overflow, accessed May 12, 2025, https://stackoverflow.com/questions/28920550/win32exception-not-enough-storage-is-available-to-process-this-command-error-w
- Why RegisterClass fails with ERROR_NOT_ENOUGH_MEMORY? - Stack Overflow, accessed May 12, 2025, https://stackoverflow.com/questions/18893366/why-registerclass-fails-with-error-not-enough-memory
- Windows error 0x80070008 or 0x8007000E - BornCity, accessed May 12, 2025, https://borncity.com/win/2016/12/13/windows-error-0x80070008-or-0x8007000e/
- readlink on Windows cannot read app exec links · Issue #82015 · python/cpython - GitHub, accessed May 12, 2025, https://github.com/python/cpython/issues/82015
- Error Reference Difference PDF - Scribd, accessed May 12, 2025, https://fr.scribd.com/document/434230838/Error-Reference-difference-pdf
- OpenProcess error 87 invalid parameter - winapi - Stack Overflow, accessed May 12, 2025, https://stackoverflow.com/questions/4988082/openprocess-error-87-invalid-parameter
- NT Error Code 87 - Microsoft: Windows servers | Tek-Tips, accessed May 12, 2025, https://www.tek-tips.com/threads/nt-error-code-87.112376/
- ERROR_INSUFFICIENT_BUFFER returned from GetAdaptersAddresses - Stack Overflow, accessed May 12, 2025, https://stackoverflow.com/questions/12279135/error-insufficient-buffer-returned-from-getadaptersaddresses
- error 183 Cannot create a file when that file already exists. Unable to start WPAS service, accessed May 12, 2025, https://learn.microsoft.com/en-us/answers/questions/2198391/error-183-cannot-create-a-file-when-that-file-alre?forum=windowserver-all&referrer=answers
- Error [183] Cannot create a file when that file already exists. | NTLite Forums, accessed May 12, 2025, https://www.ntlite.com/community/index.php?threads/error-183-cannot-create-a-file-when-that-file-already-exists.4310/
- Not implemented (Exception from HRESULT: 0x80004001 (E_NOTIMPL)) - Forums, Autodesk, accessed May 12, 2025, https://forums.autodesk.com/t5/inventor-programming-ilogic/not-implemented-exception-from-hresult-0x80004001-e-notimpl/td-p/2640018
- Visual Studio 2013 Error Message: 0x80004001 (E_NOTIMPL) - Stack Overflow, accessed May 12, 2025, https://stackoverflow.com/questions/29711395/visual-studio-2013-error-message-0x80004001-e-notimpl
- Thread: [RESOLVED] Interopt.Excel issue or something else? - VBForums, accessed May 12, 2025, https://www.vbforums.com/showthread.php?910455-RESOLVED-Interopt-Excel-issue-or-something-else
- HRESULT: 0x80004002 (E_NOINTERFACE) from STA Thread - Help - Intuit, accessed May 12, 2025, https://help.developer.intuit.com/s/question/0D5G000004Dk61AKAR/hresult-0x80004002-enointerface-from-sta-thread
- NTSTATUS Error Code List - David Vielmetter -, accessed May 12, 2025, https://davidvielmetter.com/tips/ntstatus-error-code-list/
- stop code system thread exception not handled.. after reboot its - Microsoft Community, accessed May 12, 2025, https://answers.microsoft.com/en-us/windows/forum/all/stop-code-system-thread-exception-not-handled/18a0655e-dc28-4014-8625-eba67b9dff93
- [MS-ERREF]: Win32 Error Codes - Learn Microsoft, accessed May 12, 2025, https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-erref/18d8fbe8-a967-4f1c-ae50-99ca8e491d2d
- squid.sourceforge.net, accessed May 12, 2025, https://squid.sourceforge.net/changesets/squid3/patches/631.patch