HvCallStartVirtualProcessor 是启动虚拟处理器的启发式方法。 它在功能上等效于传统的基于 INIT 的方法,不同之处在于 VP 可以从所需的注册状态开始。
这是在非零 VTL 中启动 VP 的唯一方法。
接口
HV_STATUS
HvCallStartVirtualProcessor(
_In_ HV_PARTITION_ID PartitionId,
_In_ HV_VP_INDEX VpIndex,
_In_ HV_VTL TargetVtl,
_In_ HV_INITIAL_VP_CONTEXT VpContext
);
调用代码
0x0099 (简单)
输入参数
| Name | Offset | 尺寸 | 提供的信息 |
|---|---|---|---|
PartitionId |
0 | 8 | Partition |
VpIndex |
8 | 4 | 要启动的 VP 索引。 若要从 APIC ID 获取 VP 索引,请使用 HvCallGetVpIndexFromApicId。 |
TargetVtl |
12 | 1 | 目标 VTL |
VpContext |
16 | 224 | 指定 VP 应启动的初始上下文。 |
返回值
| 状态代码 | 错误条件 |
|---|---|
HV_STATUS_ACCESS_DENIED |
访问被拒绝 |
HV_STATUS_INVALID_PARTITION_ID |
指定的分区 ID 无效。 |
HV_STATUS_INVALID_VP_INDEX |
由HV_VP_INDEX指定的虚拟处理器无效。 |
HV_STATUS_INVALID_REGISTER_VALUE |
提供的寄存器值无效。 |
HV_STATUS_INVALID_VP_STATE |
虚拟处理器在指示作的性能时未处于正确的状态。 |
HV_STATUS_INVALID_PARTITION_STATE |
指定的分区未处于“活动”状态。 |
HV_STATUS_INVALID_VTL_STATE |
VTL 状态与请求的作冲突。 |