Поделиться через


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 Задает новое значение для указанного регистра.

См. также раздел

HV_REGISTER_NAME

HV_REGISTER_VALUE