What does HRESULT 0xC03A0015 (ERROR_VIRTDISK_NOT_VIRTUAL_DISK) mean?

 
Could be also:
ConstantTypeOS
STATUS_VIRTDISK_NOT_VIRTUAL_DISKNTSTATUSWindows
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 fieldValue for ERROR_VIRTDISK_NOT_VIRTUAL_DISK
Owning objectVirtual Disk API provider, image format and host-disk state
Rejected invariantthe opened path or disk object does not contain a virtual-disk format accepted by the selected provider
Identity and generationimage path, VIRTUAL_STORAGE_TYPE, provider/vendor IDs, VHD/VHDX/VHD Set identifiers, host sector sizes, attach flags, ownership and online/read-only state
Narrow experimentinspect the file signature and open a known-good image of the same extension through the same API and access mask
Closest comparisonERROR_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_DISK incident 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_DISK is returned, not after an automatic refresh.
  • Correlate host sector sizes with the first ERROR_VIRTDISK_NOT_VIRTUAL_DISK call 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

  1. 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.
  2. 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.
  3. During the ERROR_VIRTDISK_NOT_VIRTUAL_DISK comparison, keep image bytes, unrelated disks, provider policy and cluster topology fixed when ERROR_VIRTDISK_NOT_VIRTUAL_DISK is returned.
  4. After the test, record the next return value and the durable object state; crossing the ERROR_VIRTDISK_NOT_VIRTUAL_DISK boundary 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_DISK operation.
  • Telemetry includes both symbolic names when ERROR_VIRTDISK_NOT_VIRTUAL_DISK or ERROR_VIRTDISK_PROVIDER_NOT_FOUND occurs 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


Looking for a different code? Search another status or error code.