| Previous | Next |
| ERROR_VIRTDISK_PROVIDER_NOT_FOUND | ERROR_VHD_PARENT_VHD_ACCESS_DENIED |
ERROR_VIRTDISK_NOT_VIRTUAL_DISK
Interpret the state transition: virtdisk not virtual disk
Windows returns ERROR_VIRTDISK_NOT_VIRTUAL_DISK, value 0xC03A0015, at the virtdisk boundary. It means that the opened path or disk object does not contain a virtual-disk format accepted by the selected provider. Preserve the exact handle and generation of Virtual Disk API provider, image format and host-disk state before any rescan changes the evidence.
The Virtual Disk API chooses a format provider from VIRTUAL_STORAGE_TYPE, opens an image with explicit access rights and can attach it as a disk. Provider selection, backing-chain integrity, host-file attributes, sector geometry and operating-system ownership are independent validation stages.
Record geometry, identity and ownership
| Storage diagnostic field | Value |
|---|---|
| Owning object | Virtual Disk API provider, image format and host-disk state |
| Rejected invariant | the opened path or disk object does not contain a virtual-disk format accepted by the selected provider |
| Identity and generation | image path, VIRTUAL_STORAGE_TYPE, provider/vendor IDs, VHD/VHDX/VHD Set identifiers, host sector sizes, attach flags, ownership and online/read-only state |
| Narrow experiment | inspect the file signature and open a known-good image of the same extension through the same API and access mask |
| Closest comparison | ERROR_VIRTDISK_PROVIDER_NOT_FOUND |
Do not overwrite this result with a close, detach or rollback error. Preserve the causal order so the original storage contract remains visible.
Separate validation from capability
- Before changing state, freeze the failing generation and save image path, VIRTUAL_STORAGE_TYPE, provider/vendor IDs, VHD/VHDX/VHD Set identifiers, host sector sizes, attach flags, ownership and online/read-only state.
- Exercise this exact comparison: inspect the file signature and open a known-good image of the same extension through the same API and access mask.
- During the comparison, keep image bytes, unrelated disks, provider policy and cluster topology fixed.
- After the test, record the next return value and the durable object state; crossing the boundary should expose a later result rather than silently retrying.
Use ERROR_VIRTDISK_PROVIDER_NOT_FOUND as the nearest comparison. This result is specific to the opened path or disk object does not contain a virtual-disk format accepted by the selected provider; 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
The provider was reached but the target does not parse as an accepted virtual-disk image. Preserve the first blocks, file length and parent-chain metadata without modifying the file. Distinguish a wrong path or ordinary file from a damaged VHD/VHDX, because only the latter warrants image-integrity recovery.
Verification after correction
Correct the provider, image format, backing-file chain, host geometry or disk ownership identified by the failing call, then reopen the image to obtain a new handle before retrying. The repair is incomplete until a fresh enumeration and new handle observe the corrected state.
- The controlled A/B case changes only the invariant that triggers this result.
- No unrelated disk, cluster owner, tier policy or virtual-disk backing file is altered to hide it.
- Health, synchronization or job state reaches a terminal value consistent with the repaired operation.
- Telemetry includes both symbolic names when it or
ERROR_VIRTDISK_PROVIDER_NOT_FOUNDoccurs again.
Technical references
- Microsoft: Virtual Disk API — primary API or object-model reference.
- Microsoft: OpenVirtualDisk — use this source to verify virtdisk state and parameters.
- Microsoft: AttachVirtualDisk — documents the supported management path relevant to this HRESULT.
- Microsoft: GetVirtualDiskInformation — defines the virtdisk objects used to interpret it.
Looking for a different code? Search another status or error code.