HvCallStartVirtualProcessor
HvCallStartVirtualProcessor is an enlightened method for starting a virtual processor. It is functionally equivalent to traditional INIT-based methods, except that the VP can start with a desired register state.
This is the only method for starting a VP in a non-zero VTL.
Interface
HV_STATUS
HvCallStartVirtualProcessor(
_In_ HV_PARTITION_ID PartitionId,
_In_ HV_VP_INDEX VpIndex,
_In_ HV_VTL TargetVtl,
_In_ HV_INITIAL_VP_CONTEXT VpContext
);
Call Code
0x0099
(Simple)
Input Parameters
Name | Offset | Size | Information Provided |
---|---|---|---|
PartitionId |
0 | 8 | Partition |
VpIndex |
8 | 4 | VP Index to start. To get the VP index from an APIC ID, use HvGetVpIndexFromApicId. |
TargetVtl |
12 | 1 | Target VTL |
VpContext |
16 | 224 | Specifies the initial context in which the VP should start. |
Return Values
Status code | Error Condition |
---|---|
HV_STATUS_ACCESS_DENIED |
Access denied |
HV_STATUS_INVALID_PARTITION_ID |
The specified partition ID is invalid. |
HV_STATUS_INVALID_VP_INDEX |
The virtual processor specified by HV_VP_INDEX is invalid. |
HV_STATUS_INVALID_REGISTER_VALUE |
The supplied register value is invalid. |
HV_STATUS_INVALID_VP_STATE |
A virtual processor is not in the correct state for the performance of the indicated operation. |
HV_STATUS_INVALID_PARTITION_STATE |
The specified partition is not in the “active” state. |
HV_STATUS_INVALID_VTL_STATE |
The VTL state conflicts with the requested operation. |