Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
HypercallSetVpRegisters HvCallSetRegisters zapisuje stan procesora wirtualnego.
Interfejs
HV_STATUS
HvCallSetVpRegisters(
_In_ HV_PARTITION_ID PartitionId,
_In_ HV_VP_INDEX VpIndex,
_In_ HV_INPUT_VTL InputVtl,
_Inout_ UINT32* RegisterCount,
_In_reads_(*RegisterCount) const HV_REGISTER_NAME* RegisterNameList,
_In_reads_(*RegisterCount) const HV_REGISTER_VALUE* RegisterValueList
);
Stan jest zapisywany jako seria wartości rejestru, z których każda odpowiada nazwie rejestru podanej jako dane wejściowe.
Minimalne sprawdzanie błędów jest wykonywane po zmodyfikowaniu wartości rejestru. W szczególności funkcja hypervisor zweryfikuje, że zarezerwowane bity rejestru są ustawione na zero, bity, które są definiowane architektonicznie jako zawsze zawierające zero lub jeden są odpowiednio ustawione, a określone bity poza rozmiarem architektury rejestru są zero.
Tego wywołania nie można użyć do modyfikowania wartości rejestru tylko do odczytu.
Skutki uboczne modyfikowania rejestru nie są wykonywane. Obejmuje to generowanie wyjątków, synchronizacji potoków, opróżniania TLB itd.
Restrictions
- Obiekt wywołujący musi być elementem nadrzędnym partycji określonej przez PartitionId lub określona partycja musi być "samodzielna", a partycja musi mieć uprawnienie AccessVpRegisters.
Kod wywołania
0x0051 (Rep)
Parametry wejściowe
| Name | Przesunięcie | Rozmiar | Podane informacje |
|---|---|---|---|
PartitionId |
0 | 8 | Określa identyfikator partycji. |
VpIndex |
8 | 4 | Określa indeks procesora wirtualnego. |
TargetVtl |
12 | 1 | określa docelową bibliotekę VTL. |
| RsvdZ | 13 | 3 |
Input List, element
| Name | Przesunięcie | Rozmiar | Podane informacje |
|---|---|---|---|
RegisterName |
0 | 4 | Określa nazwę rejestru, który ma zostać zmodyfikowany. |
| RsvdZ | 4 | 12 | |
RegisterValue |
16 | 16 | Określa nową wartość dla określonego rejestru. |
Lista wczesnych rejestrów (ARM64)
W usłudze ARM64 niektóre rejestry można ustawić przy użyciu tej funkcji hypercall, zanim rejestr identyfikatora systemu operacyjnego gościa (HvRegisterGuestOsId) jest ustawiony na wartość inną niż zero. Umożliwia to wczesne inicjowanie krytycznych rejestrów systemu podczas procesu rozruchu.
Przed identyfikacją systemu operacyjnego gościa można ustawić następujące rejestry:
| Nazwa rejestracji | Description |
|---|---|
HvRegisterGuestOsId |
Rejestr identyfikacji systemu operacyjnego gościa |
HvArm64RegisterSyntheticVbarEl1 |
Rejestr adresów podstawowych wektorów syntetycznych dla EL1 |
HvRegisterGuestCrashCtl |
Rejestr kontroli awarii gościa |
HvRegisterGuestCrashP0 |
Parametr awarii gościa 0 |
HvRegisterGuestCrashP1 |
Parametr awarii gościa 1 |
HvRegisterGuestCrashP2 |
Parametr awarii gościa 2 |
HvRegisterGuestCrashP3 |
Parametr awarii gościa 3 |
HvRegisterGuestCrashP4 |
Parametr awarii gościa 4 |
Wszystkie inne rejestry wymagają ustanowienia identyfikatora systemu operacyjnego gościa (bez zera), zanim będzie można je zmodyfikować za pomocą tego hiperwołania.
Nuta: Ustawienie HvRegisterGuestOsId wartości innej niż zero jest zazwyczaj pierwszym krokiem w sekwencji inicjowania funkcji hypervisor, ponieważ identyfikuje system operacyjny gościa funkcji hypervisor i umożliwia dostęp do pełnego zestawu rejestrów.