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.
W tej sekcji opisano, jak oprogramowanie gościa wykrywa obecność funkcji hypervisor i wykonuje zapytania dotyczące jego możliwości, funkcji i informacji o wersji przy użyciu mechanizmów odnajdywania specyficznych dla architektury.
Odnajdywanie funkcji i interfejsu (x64)
Oprogramowanie gościa współdziała z funkcją hypervisor za pomocą różnych mechanizmów. Wiele z tych dubluje tradycyjne mechanizmy używane przez oprogramowanie do interakcji z procesorem bazowym. W związku z tym te mechanizmy są specyficzne dla architektury. W architekturze x64 są używane następujące mechanizmy:
- Instrukcja CPUID — służy do obsługi statycznych informacji o funkcji i wersji.
- MsR (rejestry specyficzne dla modelu) — używane do określania stanu i wartości kontrolek.
- Rejestry mapowane w pamięci — używane do obsługi wartości stanu i kontroli.
- Przerwania procesora — używane w przypadku zdarzeń asynchronicznych, powiadomień i komunikatów.
Oprócz tych interfejsów specyficznych dla architektury funkcja hypervisor udostępnia prosty interfejs proceduralny zaimplementowany za pomocą funkcji hypercalls.
Odnajdywanie funkcji Hypervisor
Przed użyciem jakichkolwiek interfejsów funkcji hypervisor oprogramowanie powinno najpierw określić, czy działa w środowisku zwirtualizowanym. Na platformach x64, które są zgodne z tą specyfikacją, odbywa się to przez wykonanie instrukcji CPUID z wartością wejściową (EAX) 1. Podczas wykonywania kod powinien sprawdzić bit 31 rejestru ECX ("hypervisor obecny bit"). Jeśli ten bit jest ustawiony, funkcja hypervisor jest obecna. W środowisku niezwirtualizowanym bit będzie jasny.
CPUID.01h.ECX:31 // if set, virtualization present
Jeśli ustawiono parametr "hypervisor present bit", dodatkowe liście CPUID można odpytować, aby uzyskać więcej informacji na temat zgodnej funkcji hypervisor i jej możliwości. Dwa takie liście mają gwarancję dostępności: 0x40000000 i 0x40000001. Później ponumerowane liście mogą być również dostępne.
Standardowe liście identyfikatora CPUID funkcji Hypervisor
Po wysłaniu zapytania do liścia 0x40000000 funkcja hypervisor zwróci informacje, które udostępniają maksymalny numer liścia CPUID funkcji hypervisor i sygnaturę identyfikatora dostawcy.
| Register | Podane informacje |
|---|---|
| EAX | Maksymalna wartość wejściowa dla informacji o identyfikatorze CPUID funkcji hypervisor |
| EBX | Podpis identyfikatora dostawcy funkcji Hypervisor |
| ECX | Podpis identyfikatora dostawcy funkcji Hypervisor |
| EDX | Podpis identyfikatora dostawcy funkcji Hypervisor |
Jeśli zostanie zwrócony kwerenda liścia 0x40000001 , zwróci wartość reprezentującą identyfikację interfejsu funkcji hypervisor neutralnej od dostawcy. Określa semantyka liści z 0x4000002 przez 0x400000FF.
| Register | Podane informacje |
|---|---|
| EAX | Podpis interfejsu funkcji Hypervisor. |
| EBX | Zarezerwowana |
| ECX | Zarezerwowana |
| EDX | Zarezerwowana |
Te dwa liście umożliwiają gościowi wykonywanie zapytań dotyczących identyfikatora dostawcy funkcji hypervisor i interfejsu niezależnie. Identyfikator dostawcy jest udostępniany tylko w celach informacyjnych i diagnostycznych. Zaleca się, aby oprogramowanie było oparte tylko na decyzjach dotyczących zgodności w podpisie interfejsu zgłoszonym za pośrednictwem liścia 0x40000001.
Liście identyfikatora CPUID funkcji Microsoft Hypervisor
W przypadku funkcji hypervisor zgodnych z interfejsem 0x40000000 CPUID funkcji hypervisor firmy Microsoft rejestry i 0x40000001 liści będą miały następujące wartości.
Zakres liści procesora CPUID funkcji Hypervisor — 0x40000000
EAX określa maksymalny liść cpuID funkcji hypervisor. EBX-EDX zawierają sygnaturę identyfikatora dostawcy funkcji hypervisor. Sygnatura identyfikatora dostawcy powinna być używana tylko do celów raportowania i diagnostyki.
| Register | Podane informacje |
|---|---|
| EAX | Maksymalna wartość wejściowa dla informacji o identyfikatorze CPUID funkcji hypervisor. W przypadku funkcji hypervisor firmy Microsoft będzie to co najmniej 0x40000005. |
| EBX | 0x7263694D — "Micr" |
| ECX | 0x666F736F — "osof" |
| EDX | 0x76482074 — "t Hv" |
Identyfikacja interfejsu neutralnego dostawcy funkcji Hypervisor — 0x40000001
EaX zawiera sygnaturę identyfikacji interfejsu funkcji hypervisor. Określa semantyka liści z 0x40000002 przez 0x400000FF.
| Register | Podane informacje |
|---|---|
| EAX | 0x31237648 — "Hv#1" |
| EBX | Zarezerwowana |
| ECX | Zarezerwowana |
| EDX | Zarezerwowana |
Funkcje hypervisor zgodne z interfejsem "Hv#1" zapewniają również co najmniej następujące liście.
Tożsamość systemu funkcji Hypervisor — 0x40000002
| Register | Bity | Podane informacje |
|---|---|---|
| EAX | Numer kompilacji | |
| EBX | 31-16 | Wersja główna |
| 15-0 | Wersja pomocnicza |
Identyfikacja funkcji hypervisor — 0x40000003
EaX i EBX wskazują, które funkcje są dostępne dla partycji na podstawie bieżących uprawnień partycji.
| Register | Bity | Podane informacje |
|---|---|---|
| EAX | Odpowiada bitom 31-0 HV_PARTITION_PRIVILEGE_MASK | |
| EBX | Odpowiada bitom 63–32 HV_PARTITION_PRIVILEGE_MASK | |
| ECX | 4-0 | Zarezerwowana |
| 5 | Niezmienny Mperf jest dostępny | |
| 6 | Dostępny jest stos nadzorcy w tle | |
| 7 | Architektura PMU jest dostępna | |
| 8 | Przechwycenie pułapki wyjątków jest dostępne | |
| 31-9 | Zarezerwowana | |
| EDX | 0 | Przestarzałe (wcześniej wskazana dostępność instrukcji MWAIT) |
| 1 | Dostępna jest obsługa debugowania gościa | |
| 2 | Dostępna jest obsługa monitora wydajności | |
| 3 | Obsługa zdarzeń dynamicznego partycjonowania procesora CPU fizycznego jest dostępna | |
| 4 | Dostępna jest obsługa przekazywania bloku parametrów wejściowych funkcji hypercall za pośrednictwem rejestrów XMM | |
| 5 | Dostępna jest obsługa stanu bezczynności wirtualnego gościa | |
| 6 | Obsługa stanu uśpienia funkcji hypervisor jest dostępna | |
| 7 | Obsługa wykonywania zapytań o odległości NUMA jest dostępna | |
| 8 | Obsługa określania częstotliwości czasomierza jest dostępna | |
| 9 | Dostępna jest obsługa iniekcji testów maszyn syntetycznych | |
| 10 | Dostępna jest obsługa reguł MSRs awarii gościa | |
| 11 | Dostępna jest obsługa debugowania msrs | |
| 12 | Obsługa serwera NPIEP jest dostępna | |
| 13 | DisableHypervisorAvailable | |
| 14 | ExtendedGvaRangesForFlushVirtualAddressListAvailable | |
| 15 | Dostępna jest obsługa zwracania danych wyjściowych funkcji hypercall za pośrednictwem rejestrów XMM | |
| 16 | Zarezerwowana | |
| 17 | SintPollingModeAvailable | |
| 18 | HypercallMsrLockAvailable | |
| 19 | Używanie bezpośrednich czasomierzy syntetycznych | |
| 20 | Obsługa rejestrowania pat dostępnego dla programu VSM | |
| dwadzieścia jeden | Obsługa rejestrowania bndcfgs dostępnego dla programu VSM | |
| 22 | Zarezerwowana | |
| 23 | Obsługa czas syntetycznego niedbalnego dostępnego czasomierza | |
| 25-24 | Zarezerwowana | |
| 26 | Obsługiwana funkcja ostatniego rekordu gałęzi (LBR) firmy Intel | |
| 31-27 | Zarezerwowana |
Zalecenia dotyczące implementacji — 0x40000004
Wskazuje, które zachowanie funkcji hypervisor zaleca zaimplementowanie systemu operacyjnego w celu uzyskania optymalnej wydajności.
| Register | Bity | Podane informacje |
|---|---|---|
| EAX | 0 | Zaleca się używanie funkcji hypercall dla przełączników przestrzeni adresowej, a nie MOV do instrukcji CR3. |
| 1 | Zalecamy używanie funkcji hypercall dla lokalnych opróżnień TLB, a nie INSTRUKCJE INVLPG lub MOV do CR3. | |
| 2 | Zaleca się używanie funkcji hypercall dla zdalnych opróżnień TLB, a nie przerwań między procesorami. | |
| 3 | Zalecamy korzystanie z msR na potrzeby uzyskiwania dostępu do rejestrów APIC EOI, ICR i TPR, a nie ich odpowiedników mapowanych w pamięci. | |
| 4 | Zalecamy użycie zarządzanego przez funkcję hypervisor do zainicjowania resetowania systemu. | |
| 5 | Zalecamy użycie złagodzonego chronometrażu dla tej partycji. Jeśli jest używany, maszyna wirtualna powinna wyłączyć wszelkie limity czasu watchdog, które polegają na terminowym dostarczaniu zewnętrznych przerwań. | |
| 6 | Zaleca się używanie ponownego mapowania dma. | |
| 7 | Zalecamy ponowne mapowanie przerwań. | |
| 8 | Zarezerwowane. | |
| 9 | Zalecamy wycofanie autoEOI. | |
| 10 | Zaleca się używanie funkcji Hypercall SyntheticClusterIpi. | |
| 11 | Zalecamy używanie nowszego interfejsu ExProcessorMasks. | |
| 12 | Wskazuje, że funkcja hypervisor jest zagnieżdżona w ramach partycji Hyper-V. | |
| 13 | Zaleca się używanie protokołu INT dla wywołań systemowych MBEC. | |
| 14 | Zalecane zagnieżdżonej funkcji hypervisor przy użyciu interfejsu z obsługą usługi VMCS. Wskazuje również, że mogą być dostępne dodatkowe zagnieżdżone oświecenia (zobacz 0x4000000A liści). | |
| 15 | UseSyncedTimeline — wskazuje, że partycja powinna używać stronniczość QueryPerformanceCounter dostarczona przez partycję główną. | |
| 16 | Zarezerwowana | |
| 17 | UseDirectLocalFlushEntire — wskazuje, że gość powinien przełączać cr4. KG do opróżnienia całego TLB, ponieważ jest to bardziej wydajne niż wykonywanie hipercall. | |
| 18 | NoNonArchitecturalCoreSharing — wskazuje, że udostępnianie rdzeni nie jest możliwe. Może to służyć jako optymalizacja, aby uniknąć obciążenia związanego z wydajnością STIBP. | |
| 31-19 | Zarezerwowana | |
| EBX | Zalecana liczba prób ponawiania próby ponowienia błędu spinlock przed powiadomieniem funkcji hypervisor o awariach. 0xFFFFFFFF wskazuje, że nigdy nie powiadamiaj. | |
| ECX | 6-0 | ImplementPhysicalAddressBits — zgłasza szerokość adresu fizycznego (MAXPHYADDR) zgłoszoną przez procesory fizyczne systemu. Jeśli wszystkie bity zawierają wartość 0, funkcja nie jest obsługiwana. Należy pamiętać, że zgłoszona wartość to rzeczywista liczba bitów adresów fizycznych, a nie pozycja bitów używana do reprezentowania tej liczby. |
| 31-7 | Zarezerwowana | |
| EDX | Zarezerwowana |
Limity implementacji funkcji Hypervisor — 0x40000005
Opisuje limity skalowania obsługiwane w bieżącej implementacji funkcji hypervisor. Jeśli jakakolwiek wartość ma wartość zero, funkcja hypervisor nie uwidacznia odpowiednich informacji; w przeciwnym razie mają te znaczenia.
| Register | Podane informacje |
|---|---|
| EAX | Maksymalna liczba obsługiwanych procesorów wirtualnych |
| EBX | Maksymalna liczba obsługiwanych procesorów logicznych |
| ECX | Maksymalna liczba fizycznych wektorów przerwań dostępnych do ponownego mapowania przerwań. |
| EDX | Zarezerwowana |
Funkcje sprzętu implementacji — 0x40000006
Wskazuje, które funkcje specyficzne dla sprzętu zostały wykryte i są obecnie używane przez funkcję hypervisor.
| Register | Bity | Podane informacje |
|---|---|---|
| EAX | 0 | Obsługa asysty nakładki APIC jest wykrywana i używana. |
| 1 | Obsługa map bitowych MSR jest wykrywana i używana. | |
| 2 | Obsługa liczników wydajności architektury jest wykrywana i używana. | |
| 3 | Obsługa translacji adresów drugiego poziomu jest wykrywana i używana. | |
| 4 | Obsługa ponownego mapowania DMA jest wykrywana i używana. | |
| 5 | Obsługa ponownego mapowania przerwań jest wykrywana i używana. | |
| 6 | Wskazuje, że w sprzęcie znajduje się szorer patrolujący pamięci. | |
| 7 | Ochrona DMA jest używana. | |
| 8 | Zażądano zestawu HPET. | |
| 9 | Czasomierze syntetyczne są niestabilne. | |
| 13-10 | Poziom funkcji hypervisor bieżącego gościa — "0", jeśli nie jest zagnieżdżony. | |
| 14 | Wymagany jest tryb docelowy fizyczny. | |
| 15 | Użyj vmFUNC na potrzeby przełącznika mapy aliasu. | |
| 16 | Obsługa zera pamięci sprzętowej jest obecna. | |
| 17 | Obsługa nieograniczonego gościa jest obecna. | |
| 18 | Obsługa alokacji zasobów (RDT-A, PQOS-A) jest obecna. | |
| 19 | Obsługa monitorowania zasobów (RDT-M, PQOS-M) jest obecna. | |
| 20 | Obsługa wirtualnej jednostki PMU gościa jest obecna. | |
| dwadzieścia jeden | Obsługa wirtualnego LBR gościa jest obecna. | |
| 22 | Obsługa wirtualnego IPT gościa jest obecna. | |
| 23 | Obsługa emulacji APIC jest obecna. | |
| 24 | Tabela ACPI WDAT jest wykrywana i używana przez funkcję hypervisor. | |
| 31-25 | Zarezerwowana | |
| EBX | Zarezerwowana | |
| ECX | Zarezerwowana | |
| EDX | Zarezerwowana |
Identyfikacja funkcji funkcji hypervisor zagnieżdżonych — 0x40000009
Opisuje funkcje uwidocznione na partycji przez funkcję hypervisor podczas uruchamiania zagnieżdżonego. EaX opisuje dostęp do wirtualnych msRs. EDX opisuje dostęp do hipercalls.
| Register | Bity | Podane informacje |
|---|---|---|
| EAX | 1-0 | Zarezerwowana |
| 2 | AccessSynicRegs | |
| 3 | Zarezerwowana | |
| 4 | AccessIntrCtrlRegs | |
| 5 | AccessHypercallMsrs | |
| 6 | AccessVpIndex | |
| 11-7 | Zarezerwowana | |
| 12 | AccessReenlightenmentControls | |
| 31-13 | Zarezerwowana | |
| EBX | Zarezerwowana | |
| ECX | Zarezerwowana | |
| EDX | 3-0 | Zarezerwowana |
| 4 | XmmRegistersForFastHypercallAvailable | |
| 14-5 | Zarezerwowana | |
| 15 | FastHypercallOutputAvailable | |
| 16 | Zarezerwowana | |
| 17 | SintPollingModeAvailable | |
| 31-18 | Zarezerwowana |
Funkcje wirtualizacji zagnieżdżonej funkcji hypervisor — 0x4000000A
Wskazuje, które zagnieżdżone optymalizacje wirtualizacji są dostępne dla zagnieżdżonej funkcji hypervisor.
| Register | Bity | Podane informacje |
|---|---|---|
| EAX | 7-0 | Wersja usługi VMCS z obsługą (niska) |
| 15-8 | Wersja usługi VMCS z obsługą (wysoka) | |
| 16 | Zarezerwowana | |
| 17 | Wskazuje obsługę bezpośrednich hipercalls opróżniania wirtualnego. | |
| 18 | Wskazuje obsługę funkcji hypercallFlushGuestPhysicalAddressSpace i HvCallFlushGuestPhysicalAddressList (na platformach x64). | |
| 19 | Wskazuje obsługę korzystania z obsługiwanej mapy bitowej MSR. | |
| 20 | Wskazuje obsługę łączenia wyjątków wirtualizacji w klasie wyjątków błędów strony. | |
| dwadzieścia jeden | Wskazuje obsługę wartości innej niż zero pola 0x00002802 (GuestIa32DebugCtl) w maszynie wirtualnej. | |
| 22 | Wskazuje obsługę obsługiwanego TLB na platformach AMD. Opróżnienia ASID nie mają wpływu na wpisy TLB pochodzące z serwera NPT. Funkcji Hypercalls należy użyć do unieważnienia wpisów TLB protokołu NPT. Wskazuje również obsługę funkcji hypercallCallFlushGuestPhysicalAddressSpace i HvCallFlushGuestPhysicalAddressList. | |
| 31-21 | Zarezerwowana | |
| EBX | 0 | Wskazuje obsługę pól GuestPerfGlobalCtrl i HostPerfGlobalCtrl w obsługującej maszynie wirtualnej. |
| 31-1 | Zarezerwowana | |
| ECX | Zarezerwowana | |
| EDX | Zarezerwowana |
Wersjonowanie
Informacje o wersji funkcji hypervisor są kodowane w liściu 0x40000002. Podano dwa numery wersji: wersję główną i wersję usługi.
Wersja główna zawiera numer wersji głównej i pomocniczej oraz numer kompilacji. Odpowiadają one numerom wersji systemu Microsoft Windows. Wersja usługi opisuje zmiany wprowadzone w wersji głównej.
Klienci są zdecydowanie zachęcani do sprawdzania funkcji hypervisor przy użyciu liści 0x400000030x40000005 CPUID, a nie porównywania z zakresami wersji.
Odnajdywanie funkcji i interfejsów (ARM64)
W architekturze ARM64 do odnajdywania funkcji i interfejsu są używane następujące mechanizmy:
- Zapytania HvRegister za pośrednictwem HvCallGetVpRegisters — używane na potrzeby statycznych funkcji i informacji o wersji.
- Rejestry mapowane w pamięci — używane do obsługi wartości stanu i kontroli.
Oprócz tych interfejsów specyficznych dla architektury funkcja hypervisor udostępnia prosty interfejs proceduralny zaimplementowany za pomocą funkcji hypercalls.
Odnajdywanie funkcji Hypervisor
Przed użyciem większości interfejsów funkcji hypervisor oprogramowanie powinno najpierw określić, czy działa w środowisku zwirtualizowanym.
W usłudze ARM64 oprogramowanie gościa może odnaleźć funkcję hypervisor przy użyciu standardowego interfejsu SMCCC (SMC Calling Convention). Odnajdywanie jest wykonywane przy użyciu instrukcji HVC lub SMC z identyfikatorem 0xC600FF0 funkcji w X0 (odpowiada to 64-bitowemu wywołaniu funkcji hypervisor specyficznej dla dostawcy, VENDOR_HYP_FUNCTION_CODE_UID). Wywołanie jest zgodne z konwencjami SMCCC, w tym imm16 z 0. Funkcja hypervisor firmy Microsoft zwraca następujące wartości reprezentujące identyfikator GUID 4d32ba58-cd24-4764-8eef-6c7516597024:
| Register | Wartość |
|---|---|
| X0 | 0x4d32ba58 |
| X1 | 0xcd244764 |
| X2 | 0x8eef6c75 |
| X3 | 0x16597024 |
Po wykryciu funkcji hypervisor oprogramowanie gościa może wykonywać zapytania dotyczące funkcji hypervisor za pomocą rejestrów syntetycznych przy użyciu funkcji hypercallGetVpRegisters HvCallGetVpRegisters . Przed ustawieniem rejestru systemu operacyjnego gościa można wykonywać zapytania dotyczące kilku rejestrów kluczy, co umożliwia wczesne odnajdywanie funkcji funkcji hypervisor podczas rozruchu.
Rejestry funkcji hypervisor
Platformy ARM64 wysyłają zapytania o informacje o funkcji hypervisor za pomocą rejestrów syntetycznych, a nie instrukcji dotyczących identyfikatora CPUID. Te rejestry udostępniają równoważne informacje ich odpowiednikom x64 CPUID i są dostępne za pośrednictwem HvCallGetVpRegisters. Wszystkie rejestry funkcji zwracają wartości 128-bitowe.
Tożsamość systemu funkcji Hypervisor — HvRegisterHypervisorVersion
Zwraca informacje o wersji zakodowane w wartości 128-bitowej. Układ jest identyczny z x64 cpuID liścia 0x40000002, z wartościami rejestru x64 zapakowanymi w wynik 128-bitowy (EAX w bitach 31-0, EBX w bitach 63-32, ECX w bitach 95-64, EDX w bitach 127-96).
Identyfikacja funkcji hypervisor — HvRegisterPrivilegesAndFeaturesInfo
Odpowiednik 0x40000003 liścia x64 CPUID. Wskazuje, które funkcje są dostępne dla partycji na podstawie bieżących uprawnień partycji. Zwraca wartość 128-bitową z następującymi polami:
| Bity | Podane informacje |
|---|---|
| 31-0 | Odpowiada bitom 31-0 HV_PARTITION_PRIVILEGE_MASK |
| 63-32 | Odpowiada bitom 63–32 HV_PARTITION_PRIVILEGE_MASK |
| 64 | Dostępna jest obsługa debugowania gościa. |
| 65 | Dostępna jest obsługa monitora wydajności. |
| 66 | Dostępna jest obsługa zdarzeń partycjonowania dynamicznego procesora CPU fizycznego. |
| 67 | Dostępna jest obsługa stanu bezczynności wirtualnego gościa. |
| 68 | Dostępna jest obsługa stanu uśpienia funkcji hypervisor. |
| 69 | Dostępna jest obsługa wykonywania zapytań dotyczących odległości NUMA. |
| 70 | Dostępna jest obsługa określania częstotliwości czasomierza. |
| 71 | Dostępna jest obsługa wstrzykiwania testów maszyn syntetycznych. |
| 72 | Dostępna jest obsługa rejestrów awarii gościa. |
| 73 | Zarezerwowane. |
| 74 | DisableHypervisorAvailable. |
| 75 | Zarezerwowane. |
| 76 | SintPollingModeAvailable. |
| 77 | Użyj bezpośrednich czasomierzy syntetycznych. |
| 127-78 | Zarezerwowane. |
Zalecenia dotyczące implementacji — HvRegisterFeaturesInfo
Odpowiednik 0x40000004 liścia cpuID x64. Wskazuje, które zachowanie funkcji hypervisor zaleca zaimplementowanie systemu operacyjnego w celu uzyskania optymalnej wydajności. Zwraca wartość 128-bitową.
| Bity | Podane informacje |
|---|---|
| 0 | UseHvRegisterForReset — w usłudze ARM64 jest to zawsze fałszywe (partycje powinny zamiast tego używać SYSTEM_RESET PSCI). |
| 1 | Zalecamy użycie złagodzonego chronometrażu dla tej partycji. Jeśli jest używany, maszyna wirtualna powinna wyłączyć wszelkie limity czasu watchdog, które polegają na terminowym dostarczaniu zewnętrznych przerwań. |
| 2 | Zaleca się używanie funkcji Hypercall SyntheticClusterIpi. W usłudze ARM64 jest to fałsz dla partycji głównej (która powinna używać bezpośrednio ICC_SGI1R_EL1) i prawda dla partycji gościa. |
| 3 | Zalecamy używanie nowszego interfejsu ExProcessorMasks. |
| 4 | Wskazuje, że funkcja hypervisor jest zagnieżdżona w ramach partycji Hyper-V. |
| 5 | Wskazuje, że partycja powinna używać stronniczość QueryPerformanceCounter dostarczona przez partycję główną. |
| 20-6 | Zarezerwowana |
| dwadzieścia jeden | UseHypercallForMmioAccess |
| 22 | UseGpaPinningHypercall |
| 23 | WakeVps |
| 25-24 | Zarezerwowana |
| 26 | MapPartitionEventLogBuffer |
| 31-27 | Zarezerwowana |
| 63-32 | Zalecana liczba prób ponawiania próby ponowienia błędu spinlock przed powiadomieniem funkcji hypervisor o awariach. 0xFFFFFFFF wskazuje, że nigdy nie powiadamiaj. |
| 127-64 | Zarezerwowana |
Limity implementacji funkcji Hypervisor — HvRegisterImplementationLimitsInfo
Opisuje limity skalowania obsługiwane w bieżącej implementacji funkcji hypervisor. Jeśli jakakolwiek wartość ma wartość zero, funkcja hypervisor nie uwidacznia odpowiednich informacji. Zwraca wartość 128-bitową z układem identycznym z x64 cpuID liścia 0x40000005, z wartościami rejestru x64 zapakowanymi w wynik 128-bitowy (EAX w bitach 31-0, EBX w bitach 63-32, ECX w bitach 95-64, EDX w bitach 127-96).
Funkcje sprzętu implementacji — HvRegisterHardwareFeaturesInfo
Odpowiednik 0x40000006 liścia cpuID x64. Wskazuje, które funkcje specyficzne dla sprzętu zostały wykryte i są obecnie używane przez funkcję hypervisor. Zwraca wartość 128-bitową.
| Bity | Podane informacje |
|---|---|
| 0 | Obsługa liczników wydajności architektury jest wykrywana i używana. |
| 1 | Obsługa translacji adresów drugiego poziomu jest wykrywana i używana. |
| 2 | Obsługa ponownego mapowania DMA jest wykrywana i używana. |
| 3 | Obsługa ponownego mapowania przerwań jest wykrywana i używana. |
| 4 | Wskazuje, że w sprzęcie znajduje się szorer patrolujący pamięci. |
| 5 | Ochrona DMA jest używana. |
| 6 | Czasomierze syntetyczne są niestabilne. |
| 127-7 | Zarezerwowana |
Wersjonowanie
Informacje o wersji funkcji hypervisor są kodowane w HvRegisterHypervisorVersion. Format odpowiada odpowiednikowi x64.