| Previous | Next |
| ERROR_VID_MB_PROPERTY_ALREADY_SET_RESET | ERROR_VID_INVALID_CHILD_GPA_PAGE_SET |
ERROR_VID_MMIO_RANGE_DESTROYED
ERROR_VID_MMIO_RANGE_DESTROYED is HRESULT 0xC0370021 in the VID MMIO range lifetime area of the Windows virtualization stack. It applies to a memory-mapped I/O range associated with a guest page range that no longer exists.
Object lifecycle behind the result
The operation retained or used an MMIO range after its destruction. Treat this as device/range lifecycle and generation ownership, not ordinary guest RAM mapping.
Neighboring result: INVALID_GPA_RANGE_HANDLE can describe an unrecognized range token; MMIO_RANGE_DESTROYED specifically indicates that the MMIO object once existed and reached a terminal state.
Diagnostic evidence matrix
| Evidence | Why it changes the diagnosis |
|---|---|
| MMIO range | Record GPA base, size, device, access type, and generation. |
| Destroy event | Keep initiator, reason, and completion time. |
| Late access | Capture VP exit, device callback, or mapping request that used the range afterward. |
| Device teardown order | Record callback quiesce, interrupt disable, range removal, and object release. |
Test one variable at a time
- Stop device callbacks and VP access before destroying the range.
- Version cached range descriptors across hot-remove and restore.
- Cancel pending MMIO emulation work during teardown.
- Test device remove while the guest actively accesses the range.
Use a controlled partition or disposable VM when a mapping, lock, or teardown test can be destructive. During the test run, keep page units, GPA boundaries, parent object, handle generation, and release order visible.
How to read the controls
| Control | Interpretation | Hold constant |
|---|---|---|
| Same request under lower host pressure | If this result changes after controlled pressure is removed, quantify host/pool capacity; if not, focus on caller bookkeeping. | Do not modify guest disks or unrelated VM devices during the result comparison. |
| Smaller exact range | Reduce only page count or mapped extent. If it moves, range arithmetic, object limits, or reserve capacity is involved. | Keep the same block, GPA base, flags, and partition generation. |
| Balanced fresh lifecycle | Create, use, release, and destroy one object instance. If a different result appears after recreation, investigate leaked references, locks, handles, or mappings. | Preserve sizes and operation order while changing only generation. |
Scope of this status
A handle observed is generation-bound. Keep its parent partition and object type beside the token; never serialize it, copy it to another partition, or reuse it after the terminal transition.
Regression proof
No callback or VP path references the range after destruction, and a recreated device publishes a distinct current-generation range.
Technical references
- Microsoft Open Specifications: HRESULT values — used to interpret this result.
- Microsoft: WHvMapGpaRange — used to interpret this result.
- Microsoft: WHP memory data types — used to interpret this result.
- Microsoft: Hyper-V architecture — used to interpret this result.
Looking for a different code? Search another status or error code.
