| 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 while diagnosing ERROR_VIRTDISK_NOT_VIRTUAL_DISK. For ERROR_VIRTDISK_NOT_VIRTUAL_DISK, 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 for ERROR_VIRTDISK_NOT_VIRTUAL_DISK. Provider selection, backing-chain integrity, host-file attributes, sector geometry and operating-system ownership are independent validation stages within the ERROR_VIRTDISK_NOT_VIRTUAL_DISK workflow. For ERROR_VIRTDISK_NOT_VIRTUAL_DISK, this object model determines which identifiers, counts and ownership state are meaningful within the ERROR_VIRTDISK_NOT_VIRTUAL_DISK workflow.
The standard message identifies the immediate condition, but ERROR_VIRTDISK_NOT_VIRTUAL_DISK also requires the producer API, object topology and attempted state transition when ERROR_VIRTDISK_NOT_VIRTUAL_DISK is returned. Capture them before an automatic refresh advances the storage generation when ERROR_VIRTDISK_NOT_VIRTUAL_DISK is returned.
Record geometry, identity and ownership
| Storage diagnostic field | Value for ERROR_VIRTDISK_NOT_VIRTUAL_DISK |
|---|---|
| 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 |
- Verify image path belongs to the same storage generation that produced
ERROR_VIRTDISK_NOT_VIRTUAL_DISK. - For
ERROR_VIRTDISK_NOT_VIRTUAL_DISK, preserve VIRTUAL_STORAGE_TYPE before a rescan; it anchors the failed object generation when ERROR_VIRTDISK_NOT_VIRTUAL_DISK is returned. - Attach provider/vendor IDs to the
ERROR_VIRTDISK_NOT_VIRTUAL_DISKincident so later cleanup cannot replace the original identity when ERROR_VIRTDISK_NOT_VIRTUAL_DISK is returned. - Record VHD/VHDX/VHD Set identifiers at the instant
ERROR_VIRTDISK_NOT_VIRTUAL_DISKis returned, not after an automatic refresh. - Correlate host sector sizes with the first
ERROR_VIRTDISK_NOT_VIRTUAL_DISKcall and its transaction or job identifier. - Export attach flags for
ERROR_VIRTDISK_NOT_VIRTUAL_DISK; this is more useful than a drive letter or friendly name alone in the ERROR_VIRTDISK_NOT_VIRTUAL_DISK path. - Verify ownership belongs to the same storage generation that produced
ERROR_VIRTDISK_NOT_VIRTUAL_DISK.
Do not overwrite ERROR_VIRTDISK_NOT_VIRTUAL_DISK with a close, detach or rollback error. Preserve the causal order so the original storage contract remains visible while diagnosing ERROR_VIRTDISK_NOT_VIRTUAL_DISK.
Separate validation from capability
- Before changing state for
ERROR_VIRTDISK_NOT_VIRTUAL_DISK, 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 when ERROR_VIRTDISK_NOT_VIRTUAL_DISK is returned. - Exercise this exact comparison for
ERROR_VIRTDISK_NOT_VIRTUAL_DISK: inspect the file signature and open a known-good image of the same extension through the same API and access mask when ERROR_VIRTDISK_NOT_VIRTUAL_DISK is returned. - During the
ERROR_VIRTDISK_NOT_VIRTUAL_DISKcomparison, keep image bytes, unrelated disks, provider policy and cluster topology fixed when ERROR_VIRTDISK_NOT_VIRTUAL_DISK is returned. - After the test, record the next return value and the durable object state; crossing the
ERROR_VIRTDISK_NOT_VIRTUAL_DISKboundary should expose a later result rather than silently retrying in the ERROR_VIRTDISK_NOT_VIRTUAL_DISK path.
Use ERROR_VIRTDISK_PROVIDER_NOT_FOUND as the nearest comparison. ERROR_VIRTDISK_NOT_VIRTUAL_DISK 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 for the ERROR_VIRTDISK_NOT_VIRTUAL_DISK request. Keeping both names prevents a generic storage label from hiding the actual owner in the ERROR_VIRTDISK_NOT_VIRTUAL_DISK path.
Mechanism-specific note for ERROR_VIRTDISK_NOT_VIRTUAL_DISK
The provider was reached but the target does not parse as an accepted virtual-disk image when ERROR_VIRTDISK_NOT_VIRTUAL_DISK is returned. Preserve the first blocks, file length and parent-chain metadata without modifying the file within the ERROR_VIRTDISK_NOT_VIRTUAL_DISK workflow. Distinguish a wrong path or ordinary file from a damaged VHD/VHDX, because only the latter warrants image-integrity recovery in the ERROR_VIRTDISK_NOT_VIRTUAL_DISK path.
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 within the ERROR_VIRTDISK_NOT_VIRTUAL_DISK workflow. The ERROR_VIRTDISK_NOT_VIRTUAL_DISK repair is incomplete until a fresh enumeration and new handle observe the corrected state in the ERROR_VIRTDISK_NOT_VIRTUAL_DISK path.
- The controlled A/B case changes only the invariant responsible for
ERROR_VIRTDISK_NOT_VIRTUAL_DISK. - No unrelated disk, cluster owner, tier policy or virtual-disk backing file is altered to hide
ERROR_VIRTDISK_NOT_VIRTUAL_DISK. - Health, synchronization or job state reaches a terminal value consistent with the repaired
ERROR_VIRTDISK_NOT_VIRTUAL_DISKoperation. - Telemetry includes both symbolic names when
ERROR_VIRTDISK_NOT_VIRTUAL_DISKorERROR_VIRTDISK_PROVIDER_NOT_FOUNDoccurs again.
Before responding to ERROR_VIRTDISK_NOT_VIRTUAL_DISK with destructive cleanup, prove which object owns the failure within the ERROR_VIRTDISK_NOT_VIRTUAL_DISK workflow. Changing every disk or provider at once prevents a meaningful regression test in the ERROR_VIRTDISK_NOT_VIRTUAL_DISK path.
Technical references
- Microsoft: Virtual Disk API — primary API or object-model reference for the
ERROR_VIRTDISK_NOT_VIRTUAL_DISKboundary. - Microsoft: OpenVirtualDisk — use this source to verify virtdisk state and parameters for
ERROR_VIRTDISK_NOT_VIRTUAL_DISK. - Microsoft: AttachVirtualDisk — documents the supported management path relevant to
ERROR_VIRTDISK_NOT_VIRTUAL_DISK. - Microsoft: GetVirtualDiskInformation — defines the virtdisk objects used to interpret
ERROR_VIRTDISK_NOT_VIRTUAL_DISK.
Looking for a different code? Search another status or error code.