| Previous | Next |
| ERROR_VOLMGR_ALL_DISKS_FAILED | ERROR_VOLMGR_NO_SUCH_USER |
ERROR_VOLMGR_NO_REGISTERED_USERS
Read the code at the owning storage layer: volmgr no registered users
ERROR_VOLMGR_NO_REGISTERED_USERS has unsigned value 0xC038002A. In the volmgr layer, it rejects a specific contract because a notification operation expected at least one registered consumer, but the registration set is empty. Diagnosis of this result should follow volume-manager notification registration and pending wait request through one controlled state transition.
Dynamic volumes are represented as packs containing disks and volumes; each volume has one or more plexes, and each plex is assembled from members and extents. Indices and counts are relative to the submitted layout generation, while configuration logs are replicated across participating dynamic disks. This object model determines which identifiers, counts and ownership state are meaningful.
A useful record contains more than the final UI symptom: retain the first failing call, target identity, topology and state transition before management software rescans the disks.
Build a trustworthy incident record
| Storage diagnostic field | Value |
|---|---|
| Closest comparison | ERROR_VOLMGR_NO_SUCH_USER |
| Owning object | volume-manager notification registration and pending wait request |
| Rejected invariant | a notification operation expected at least one registered consumer, but the registration set is empty |
| Identity and generation | registration ID, task number, pending IRP count, process lifetime, pack ID and the notification generation returned before the failure |
| Narrow experiment | register one consumer, issue exactly one asynchronous wait, complete or cancel it, and compare registration/task identifiers at each step |
When it is followed by a secondary cleanup failure, store both codes with timestamps and retain this one as the initiating result.
Controlled comparison
- serialize the failing request and the enumeration from which its identifiers came while diagnosing this result.
- Preserve registration ID, task number, pending IRP count, process lifetime, pack ID and the notification generation returned before the failure while every handle is still valid.
- Repeat the operation using this controlled change: register one consumer, issue exactly one asynchronous wait, complete or cancel it, and compare registration/task identifiers at each step for it.
- Close and reacquire the relevant objects, then run once more to test lifecycle correctness after this result.
The distinction from ERROR_VOLMGR_NO_SUCH_USER is operational. The decisive condition is a notification operation expected at least one registered consumer, but the registration set is empty; log the neighboring code separately so capability, identity and state are not conflated.
Mechanism-specific note
Notification registrations have two lifetimes: the registration itself and any outstanding asynchronous wait while diagnosing this result. Log both identifiers and the cancellation path. A service restart, handle close or notification reset can invalidate the old generation even when the numeric task value is later reused, so never match completion by task number alone.
Completion criteria
Repair notification ownership and sequencing: cancel stale waits, unregister only live IDs, then create one replacement registration after the previous generation is closed. Apply the change through the supported storage API, then close and reacquire affected objects before retrying.
- the first retry uses newly enumerated identifiers rather than cached handles while diagnosing it.
- The durable metadata or provider state agrees with the success returned after it.
- A second run after close/reopen does not recreate the rejected the condition.
- the nearby
ERROR_VOLMGR_NO_SUCH_USERpath remains separately testable and separately logged.
Before responding to it with destructive cleanup, prove which object owns the failure. Changing every disk or provider at once prevents a meaningful regression test.
Technical references
- Microsoft: COM error codes for VOLMGR, VHD and SDIAG — documents the supported management path relevant to it.
- Microsoft: Virtual Disk Service object model — defines the volmgr objects used to interpret it.
- Microsoft: Pack object — primary API or object-model reference for the boundary.
- Microsoft: Virtual Disk Service common return codes — use this source to verify volmgr state and parameters for it.
Looking for a different code? Search another status or error code.
