| Previous | Next |
| ERROR_VID_NOTIFICATION_QUEUE_ALREADY_ASSOCIATED | ERROR_VID_PAGE_RANGE_OVERFLOW |
ERROR_VID_INVALID_MEMORY_BLOCK_HANDLE
ERROR_VID_INVALID_MEMORY_BLOCK_HANDLE is HRESULT 0xC0370012 in the VID memory-block handle validation area of the Windows virtualization stack. It applies to an opaque VID memory-block handle used for map, lock, notification, property, or destruction work.
Object lifecycle behind the result
The token does not identify a live memory block in the current partition generation. Investigate wrong-type handles, use-after-destroy, and cross-partition reuse.
Neighboring result: MB_STILL_REFERENCED means the block is valid but cannot yet be destroyed. INVALID_MEMORY_BLOCK_HANDLE means the supplied object reference itself is unacceptable.
Diagnostic evidence matrix
| Evidence | Why it changes the diagnosis |
|---|---|
| Handle provenance | Record create result, partition, size, and generation. |
| Operation type | Keep the map/lock/property/destroy request that rejected it. |
| Invalidation event | Locate destroy, rollback, worker replacement, or migration. |
| Wrapper type | Confirm the handle was not confused with GPA-range, queue, or PPM handles. |
Test one variable at a time
- Use typed wrappers for each opaque VID handle class.
- Clear published handles before destruction begins.
- Tag references with partition generation.
- Stress concurrent destroy against map and notification setup.
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
Live handles work only in their owning generation, and stale or wrong-type tokens are rejected by the wrapper before the VID call.
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.