| Previous | Next |
| ERROR_VOLMGR_NO_SUCH_USER | ERROR_VOLMGR_NUMBER_OF_MEMBERS_INVALID |
ERROR_VOLMGR_NOTIFICATION_RESET
Why this is narrower than a generic disk error: volmgr notification reset
Windows returns ERROR_VOLMGR_NOTIFICATION_RESET, value 0xC038002C, at the volmgr boundary. It means that the notification generation changed, invalidating outstanding task numbers and previously returned registration state for it. Preserve the exact handle and generation of volume-manager notification registration and pending wait request before any rescan changes the evidence.
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 while diagnosing this result. Indices and counts are relative to the submitted layout generation, while configuration logs are replicated across participating dynamic disks for it. This object model determines which identifiers, counts and ownership state are meaningful for it.
The standard message identifies the immediate condition, but this result also requires the producer API, object topology and attempted state transition for it. Capture them before an automatic refresh advances the storage generation for it.
Storage facts that change the diagnosis
| Storage diagnostic field | Value |
|---|---|
| Rejected invariant | the notification generation changed, invalidating outstanding task numbers and previously returned registration state |
| 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 |
| Closest comparison | ERROR_VOLMGR_UNEXPECTED_DISK_LAYOUT_CHANGE |
| Owning object | volume-manager notification registration and pending wait request |
A management layer handling this result should report later recovery errors separately, because they answer a different question from the failed storage operation for it.
A/B test for this HRESULT
- Create a nonproduction case for it that preserves the same geometry and ownership model while diagnosing this result.
- Collect registration ID, task number, pending IRP count, process lifetime, pack ID and the notification generation returned before the failure before invoking the first mutating API.
- Change one condition only: register one consumer, issue exactly one asynchronous wait, complete or cancel it, and compare registration/task identifiers at each step.
- Re-enumerate after the transition and confirm it is not reproduced by a stale handle from the old generation.
Compare traces for ERROR_VOLMGR_UNEXPECTED_DISK_LAYOUT_CHANGE and it. The latter page covers a nearby storage boundary, whereas it rejects the notification generation changed, invalidating outstanding task numbers and previously returned registration state. A correct caller should be able to reproduce each case independently for it.
Mechanism-specific note
Notification registrations have two lifetimes: the registration itself and any outstanding asynchronous wait while diagnosing it. 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 for it.
Corrective action and regression check
Repair notification ownership and sequencing: cancel stale waits, unregister only live IDs, then create one replacement registration after the previous generation is closed. After correcting it, reopen the pack, volume, tier, snapshot or virtual disk so no cached generation participates in the validation run.
- The original request now reaches success or a documented later status with the intended layout and access mode while diagnosing it.
- A new enumeration reports internally consistent IDs, counts, geometry and ownership for the object corrected after it.
- The passing state survives the lifecycle transition relevant to it, such as reopen, remount, owner change or detach/attach.
- The application still distinguishes it from
ERROR_VOLMGR_UNEXPECTED_DISK_LAYOUT_CHANGEand has no unbounded retry loop.
Do not use it as a reason to edit dynamic-disk sectors, VHDX metadata, RCT sidecars or snapshot support files directly. Unsupported edits can turn a recoverable state mismatch into persistent corruption while diagnosing it.
Technical references
- Microsoft: COM error codes for VOLMGR, VHD and SDIAG — primary API or object-model reference for the boundary.
- Microsoft: Virtual Disk Service object model — use this source to verify volmgr state and parameters for it.
- Microsoft: Pack object — documents the supported management path relevant to it.
- Microsoft: Virtual Disk Service common return codes — defines the volmgr objects used to interpret it.
Looking for a different code? Search another status or error code.
