| Previous | Next |
| ERROR_VID_PAGE_RANGE_OVERFLOW | ERROR_VID_INVALID_GPA_RANGE_HANDLE |
ERROR_VID_INVALID_MESSAGE_QUEUE_HANDLE
ERROR_VID_INVALID_MESSAGE_QUEUE_HANDLE is HRESULT 0xC0370014 in the VID queue handle validation area of the Windows virtualization stack. It applies to an opaque message-queue handle passed to a VID queue operation.
Where the result originates
The handle is not valid in the current host, partition, or queue generation. Common causes are use-after-close, wrong object type, cross-partition reuse, and serialization of an opaque handle.
Neighboring result: MESSAGE_QUEUE_CLOSED can be returned for a known queue that reached closed state. INVALID_HANDLE indicates the supplied token cannot be accepted as the intended live queue object.
Build an incident record
| Evidence | Why it changes the diagnosis |
|---|---|
| Handle value and source | Record where it was obtained and whether it crossed process or IPC boundaries. |
| Owner identity | Keep partition, worker, queue name, and generation. |
| Close/delete timeline | Locate the first transition that invalidated the handle. |
| Type checks | Confirm the wrapper did not confuse memory-block, GPA-range, or queue handles. |
Run narrow checks
- Never persist or serialize opaque VID handles.
- Clear shared handle state before closing the queue.
- Use generation-tagged wrappers and reject cross-partition use.
- Race close against enqueue/dequeue under instrumentation.
Reproduce this condition with bounded producers and a fully instrumented consumer. Preserve message ordering, queue generation, handler ownership, target VP, and acknowledgement timestamps while changing only one concurrency condition.
Interpret three controls
| Control | Interpretation | Hold constant |
|---|---|---|
| Single producer and consumer | If it disappears with serialized ownership, the queue, handler, acknowledgement, or delivery race is implicated. | Preserve message type, partition, target VP, and queue capacity. |
| Fresh channel generation | A new queue or handler generation changing it points to stale registration, backlog, or incomplete teardown. | Keep payload, producer order, and host build unchanged in the test. |
| Controlled stall or burst | Deliberately slow the consumer or bound the producer rate. The threshold at which it appears identifies backpressure versus lifecycle failure. | Record queue depth, oldest-item age, and acknowledgement timing. |
Keep neighboring states separate
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.
Prove the correction
All queue operations use live current-generation handles, and deliberate stale or wrong-type handles fail before state mutation.
Technical references
- Microsoft Open Specifications: HRESULT values — used to interpret this result.
- Microsoft TLFS: inter-partition communication — used to interpret this result.
- Microsoft TLFS: HV_MESSAGE — 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.