HvCallSetVpRegisters
Гипервыск HvCallSetVpRegisters записывает состояние виртуального процессора.
Интерфейс
HV_STATUS
HvCallSetVpRegisters(
_In_ HV_PARTITION_ID PartitionId,
_In_ HV_VP_INDEX VpIndex,
_In_ HV_INPUT_VTL InputVtl,
_Inout_ PUINT32 RegisterCount,
_In_reads(RegisterCount) PCHV_REGISTER_NAME RegisterNameList,
_In_reads(RegisterCount) PCHV_REGISTER_VALUE RegisterValueList
);
Состояние записывается в виде ряда значений регистра, каждое из которых соответствует имени регистра, предоставленному в качестве входных данных.
Минимальная проверка ошибок выполняется при изменении значения регистра. В частности, гипервизор будет проверять, что зарезервированные биты регистра равны нулю, биты, которые определены в архитектуре как всегда содержащие ноль или единицу, задаются соответствующим образом, а указанные биты, превышающие размер архитектуры регистра, обнуляются.
Этот вызов нельзя использовать для изменения значения регистра, доступного только для чтения.
Побочные эффекты изменения регистра не выполняются. К ним относятся создание исключений, синхронизации конвейеров, сбросы TLB и т. д.
Ограничения
- Вызывающий объект должен быть либо родительским для секции, указанной параметром PartitionId, либо указанная секция должна быть "self", а секция должна иметь привилегию AccessVpRegisters.
Код вызова
0x0051
(Rep)
Входные параметры
Имя | Offset | Размер | Предоставленные сведения |
---|---|---|---|
PartitionId |
0 | 8 | Указывает идентификатор секции. |
VpIndex |
8 | 4 | Указывает индекс виртуального процессора. |
TargetVtl |
12 | 1 | указывает целевой VTL. |
RsvdZ | 13 | 3 |
Входной элемент списка
Имя | Offset | Размер | Предоставленные сведения |
---|---|---|---|
RegisterName |
0 | 4 | Указывает имя регистра, который необходимо изменить. |
RsvdZ | 4 | 12 | |
RegisterValue |
16 | 16 | Задает новое значение для указанного регистра. |