WHvAdviseGpaRange

Hiper yöneticiye bir veya daha fazla konuk fiziksel adres aralığının bellek desteğiyle ilgili ipuçları sağlar.

Sözdizimi

// Structure describing a memory range entry
typedef struct WHV_MEMORY_RANGE_ENTRY {
    UINT64 GuestAddress;
    UINT64 SizeInBytes;
} WHV_MEMORY_RANGE_ENTRY;

// WHvAdviseGpaRange types
typedef enum WHV_ADVISE_GPA_RANGE_CODE
{
    WHvAdviseGpaRangeCodePopulate         = 0x00000000,
    WHvAdviseGpaRangeCodePin              = 0x00000001,
    WHvAdviseGpaRangeCodeUnpin            = 0x00000002,
} WHV_ADVISE_GPA_RANGE_CODE;

typedef union WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS
{
    UINT32 AsUINT32;
    struct
    {
        UINT32 Prefetch:1;
        UINT32 AvoidHardFaults:1;
        UINT32 Reserved:30;
    };
} WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS;

typedef enum WHV_MEMORY_ACCESS_TYPE
{
    WHvMemoryAccessRead    = 0,
    WHvMemoryAccessWrite   = 1,
    WHvMemoryAccessExecute = 2
} WHV_MEMORY_ACCESS_TYPE;

//
// Parameters used by WHvAdviseGpaRangeCodePopulate
//
typedef struct WHV_ADVISE_GPA_RANGE_POPULATE
{
    WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS Flags;
    WHV_MEMORY_ACCESS_TYPE AccessType;
} WHV_ADVISE_GPA_RANGE_POPULATE;

//
// WHvAdviseGpaRange buffer
//
typedef union WHV_ADVISE_GPA_RANGE
{
    WHV_ADVISE_GPA_RANGE_POPULATE Populate;
} WHV_ADVISE_GPA_RANGE;

HRESULT
WINAPI
WHvAdviseGpaRange(
    _In_ WHV_PARTITION_HANDLE Partition,
    _In_reads_(GpaRangesCount) const WHV_MEMORY_RANGE_ENTRY* GpaRanges,
    _In_ UINT32 GpaRangesCount,
    _In_ WHV_ADVISE_GPA_RANGE_CODE Advice,
    _In_reads_bytes_(AdviceBufferSizeInBytes) const VOID* AdviceBuffer,
    _In_ UINT32 AdviceBufferSizeInBytes
    );

Parameters

Partition

Bölüm nesnesi için tanıtıcı.

GpaRanges

Her biri önerinin WHV_MEMORY_RANGE_ENTRY uygulandığı konuk fiziksel adres aralığını açıklayan bir yapı dizisi işaretçisi belirtir. WHvAdviseGpaRangeCodePin ve WHvAdviseGpaRangeCodeUnpin öneri kodları için her aralığın sayfaya hizalanmış olması gerekir.

GpaRangesCount

tarafından işaret edilen GpaRangesdizideki girdi sayısını belirtir. Bu değer sıfırdan büyük olmalıdır.

Advice

Aralıklara uygulanacak öneriyi bir WHV_ADVISE_GPA_RANGE_CODE değer olarak belirtir.

AdviceBuffer

Öneri parametrelerini içeren bir arabelleğe yönelik bir işaretçi belirtir. Arabellek düzeni tarafından Advicebelirlenir. için WHvAdviseGpaRangeCodePopulatearabellek bir WHV_ADVISE_GPA_RANGE_POPULATE yapıdır.

AdviceBufferSizeInBytes

tarafından AdviceBufferişaret edilen arabelleğin boyutunu bayt cinsinden belirtir.

Dönüş Değeri

İşlev başarılı olursa, dönüş değeri olur S_OK.

İşlev tanımlı WHV_ADVISE_GPA_RANGE_CODE bir değer değilse Advice veya öneri arabelleğindeki parametreler belirtilen Adviceiçin geçerli değilse döndürürE_INVALIDARG.

Açıklamalar

işlevi, WHvAdviseGpaRange sanallaştırma yığınının bir konuk fiziksel adres aralığı kümesini destekleyen belleğin amaçlanan kullanımı hakkında hiper yöneticiyi bilgilendirmesine olanak tanır, böylece hiper yönetici bu belleğin işlenme ve erişim şeklini iyileştirebilir.

Advice parametresi işlemi seçer:

  • WHvAdviseGpaRangeCodePopulate sanal işlemci tarafından erişim öncesinde belirtilen aralıklar için yedekleme belleğini işler ve içindekine göre AccessType sayfalarda WHV_ADVISE_GPA_RANGE_POPULATE hata verir. Prefetch bayrağı, AvoidHardFaults sayfaların proaktif olarak getirilmesini ve bayrağı işlemin sabit sayfa hataları almaktan kaçınmasını istemektedir. Doldurma işlemine sağlanan aralıkların sayfaya hizalanması gerekmez.
  • WHvAdviseGpaRangeCodePin belirtilen aralıklar için yedekleme belleğini sabitleyerek yerleşik kalmasını sağlar.
  • WHvAdviseGpaRangeCodeUnpin ile önceden oluşturulmuş WHvAdviseGpaRangeCodePinbir pin yayınlar.

Sabitleme ve kaldırma işlemleri için içindeki GpaRanges her aralığın sayfaya hizalanması gerekir.

Requirements

Requirement Değer
Desteklenen en düşük Windows Windows 10, sürüm 20H2 (x64); Windows 11, sürüm 24H2, derleme 26100.3915 (Arm64)
Header WinHvPlatform.h
Kütüphane WinHvPlatform.lib
DLL WinHvPlatform.dll
Architecture x64, Arm64

Ayrıca bakınız