| Previous | Next |
| ERROR_VID_RESERVE_PAGE_SET_TOO_SMALL | ERROR_VID_MBP_COUNT_EXCEEDED_LIMIT |
ERROR_VID_MBP_ALREADY_LOCKED_USING_RESERVED_PAGE
ERROR_VID_MBP_ALREADY_LOCKED_USING_RESERVED_PAGE is HRESULT 0xC0370025 in the VID reserved-page lock exclusivity area of the Windows virtualization stack. The built-in message names the immediate result; the useful custom context is the exact boundary: a memory-block page that already has a lock backed by a reserve page-set page. Record the first returning operation and host-side event before a management layer retries or translates it.
Why this HRESULT is specific
The caller tries to lock or map the same MBP through a path incompatible with the existing reserved-page-backed lock. Establish whether duplicate, overlapping, or differently flagged ownership caused the conflict.
Hyper-V architecture documentation identifies VID as the component that provides partition, virtual-processor, and memory-management services., many ERROR_VID_* values describe internal host objects rather than a public API that administrators should call directly. Accordingly, diagnose this result through the named object/state, the VMMS or Worker event chain, and the operation that produced it; do not invent a user-mode VID call from the constant name.
Neighboring result: MBPS_ARE_LOCKED is broader; this code identifies the specific existing lock mechanism that uses a reserve page.
Records worth collecting
| Evidence | Why it changes the diagnosis |
|---|---|
| MBP identity | Record block, page index/GPA, and partition. |
| Existing lock | Keep reserve set, owner, access flags, and acquisition time. |
| New request | Capture overlap, requested flags, and caller. |
| Release dependency | Identify the completion that will free the reserved page. |
Preserve identifiers and counts without dumping guest secrets or unrelated memory. Useful this result timestamps include the last successful operation, first failure, any automatic retry, and the object-generation change that followed.
A reproducible test plan
- Detect overlapping locks in the caller before submitting them.
- Reuse the existing lock only when ownership and access semantics allow.
- Serialize transitions between reserved and ordinary mapping paths.
- Test partial overlap and concurrent lock requests.
Use a controlled partition or disposable VM when a mapping, lock, or teardown test can be destructive. During the result run, keep page units, GPA boundaries, parent object, handle generation, and release order visible.
Comparison matrix
Across these controls for it, preserve a memory-block page that already has a lock backed by a reserve page-set page as the boundary under test.
| Control | Interpretation | Hold constant |
|---|---|---|
| Same request under lower host pressure — this result | 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 — it | 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 for it. |
| Balanced fresh lifecycle — it | Create, use, release, and destroy one object generation. A different it exposes leaked references, locks, handles, or mappings. | Preserve sizes and operation order while changing only generation. |
Misleading shortcuts
Restarting can release the exact lock, reference, mapping, or opaque handle behind it without fixing the lifecycle defect. Before recovering from it, preserve the object graph and acquire/release counts.
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.
Verification after repair
Each MBP has one compatible lock owner at a time and transitions release the reserve page before another mechanism acquires it. Repeat the original operation under the original supported conditions and retain one deliberate negative control. A management command succeeding on a different object is not sufficient to close this incident.
Technical references
These sources define it and the public Hyper-V architecture surrounding the internal state. They do not create a public user-mode VID API for the named object.
- Microsoft Open Specifications: HRESULT values — used to interpret the boundary.
- Microsoft: WHvMapGpaRange — used to interpret the boundary.
- Microsoft: WHP memory data types — used to interpret the boundary.
- Microsoft: Hyper-V architecture — used to interpret the boundary.
Looking for a different code? Search another status or error code.
