| Previous | Next |
| ERROR_WAKE_SYSTEM_DEBUGGER | ERROR_EXTRANEOUS_INFORMATION |
ERROR_HANDLES_CLOSED
What ERROR_HANDLES_CLOSED means
The operation succeeded with an important side effect: handles referencing affected objects are no longer valid. Code that ignores the warning may later use stale handle values and report misleading secondary errors.
Where it appears
- session, process, namespace, or object teardown
- operations that replace or invalidate underlying objects
- cleanup performed by the kernel after a state transition
Likely causes
- the API contract requires dependent handles to be closed
- a container, transaction, or owning object was destroyed
- the caller retained aliases after a replacement operation
Evidence to collect
- the operation that returned the status
- the complete set of handles owned by the component
- subsequent invalid-handle failures and their call stacks
- ownership and lifetime transitions around the operation
How to respond
Mark affected handles invalid immediately and reacquire only those that remain logically needed. Cleanup must be idempotent so that automatic closure is not followed by a second close on the same numeric value.
Diagnostic interpretation
For this particular status, the decisive evidence is the operation that returned the status, the complete set of handles owned by the component. Those details separate the documented condition from unrelated failures that happen to occur nearby.
Record the numeric code together with the symbolic name ERROR_HANDLES_CLOSED, the API or subsystem that produced it, and the first preceding failure. A later cleanup occurrence may describe a consequence instead of the initiating defect.
Example
A diagnostic trace records this result after an operation changes subsystem state. The result investigation should follow the first state-changing call, validate its resulting state, and classify later cleanup messages as secondary evidence.
Implementation guidance
Code handling this result should distinguish a terminal failure from a warning, progress indication, or request to repeat after a defined state change. When handling it, preserve handles and output fields only where the originating API explicitly keeps them valid. The path needs bounded retries and cleanup that tolerates partial initialization.
Validation after remediation
Repeat one controlled operation that previously produced this result. Verify both disappearance of the status and completion of the specific state transition described above. Adjacent messages around it must also be reviewed so a fallback is not mistaken for a complete repair.
References
Looking for a different code? Search another status or error code.
