| Previous | Next |
| ERROR_CTLOG_VHD_CHANGED_OFFLINE | ERROR_CTLOG_INCONSISTENT_TRACKING_FILE |
ERROR_CTLOG_INVALID_TRACKING_STATE
Read the code at the owning storage layer: ctlog invalid tracking state
Windows returns ERROR_CTLOG_INVALID_TRACKING_STATE, value 0xC03A0023, at the ctlog boundary. It means that the requested start, stop, query or reset transition is not valid from the current change-tracking state. Preserve the exact handle and generation of resilient change-tracking baseline and sidecar metadata for the virtual disk before any rescan changes the evidence.
Resilient change tracking answers which virtual-disk byte ranges changed after a named baseline. The tracking identifier, virtual-disk generation and sidecar metadata must remain consistent across every query and backup checkpoint. This object model determines which identifiers, counts and ownership state are meaningful.
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.
Build a trustworthy incident record
| Storage diagnostic field | Value |
|---|---|
| Narrow experiment | create a fresh RCT baseline on a copy of the virtual disk and replay only the requested start, query, reset or stop transition |
| Closest comparison | ERROR_CTLOG_TRACKING_NOT_INITIALIZED |
| Owning object | resilient change-tracking baseline and sidecar metadata for the virtual disk |
| Rejected invariant | the requested start, stop, query or reset transition is not valid from the current change-tracking state |
| Identity and generation | virtual-disk identifier, ChangeTrackingId, RCT state, VHDX generation, sidecar path and size, offline maintenance history and queried byte range |
Keep this HRESULT as the primary result if rollback or cleanup reports another code; those later values describe recovery, not the first rejected invariant.
Controlled comparison
- Capture the API parameters and object map that led to this result; do not begin with cleanup.
- Build a passing control with the same disks or image copy and preserve virtual-disk identifier, ChangeTrackingId, RCT state, VHDX generation, sidecar path and size, offline maintenance history and queried byte range.
- Run the narrow transition described here: create a fresh RCT baseline on a copy of the virtual disk and replay only the requested start, query, reset or stop transition.
- Compare resulting IDs, counts, health and ownership to prove the caller crossed the result invariant rather than suppressing it.
Use ERROR_CTLOG_TRACKING_NOT_INITIALIZED as the nearest comparison. This result is specific to the requested start, stop, query or reset transition is not valid from the current change-tracking state; the neighboring result belongs to another validation or lifecycle branch. Keeping both names prevents a generic storage label from hiding the actual owner.
Mechanism-specific note
Model tracking as a state machine and log the requested transition. Starting an already active session, querying before initialization or resetting during another operation are different caller defects. Refresh state after every asynchronous operation instead of predicting it from the previous call.
Completion criteria
Create a new trustworthy change-tracking baseline after validating the VHDX and tracking metadata; never merge ranges from an invalidated generation into backup state. The result repair is incomplete until a fresh enumeration and new handle observe the corrected state.
- the first retry uses newly enumerated identifiers rather than cached handles.
- The durable metadata or provider state agrees with the success returned after this result.
- A second run after close/reopen does not recreate the rejected the condition.
- the nearby
ERROR_CTLOG_TRACKING_NOT_INITIALIZEDpath remains separately testable and separately logged.
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.
Technical references
- Microsoft: QueryChangesVirtualDisk — primary API or object-model reference for the boundary.
- Microsoft: Virtual Disk API — use this source to verify ctlog state and parameters for it.
- Microsoft: GetVirtualDiskInformation — documents the supported management path relevant to it.
- Microsoft: COM error codes for VHD and change tracking — defines the ctlog objects used to interpret it.
Looking for a different code? Search another status or error code.
