지정된 호스트 프로세스에서 파티션의 게스트 실제 주소 공간 범위를 메모리에 매핑합니다.
문법
// Guest physical address
typedef UINT64 WHV_GUEST_PHYSICAL_ADDRESS;
// Flags used by WHvMapGpaRange/WHvMapGpaRange2
typedef enum WHV_MAP_GPA_RANGE_FLAGS
{
WHvMapGpaRangeFlagNone = 0x00000000,
WHvMapGpaRangeFlagRead = 0x00000001,
WHvMapGpaRangeFlagWrite = 0x00000002,
WHvMapGpaRangeFlagExecute = 0x00000004,
WHvMapGpaRangeFlagTrackDirtyPages = 0x00000008,
} WHV_MAP_GPA_RANGE_FLAGS;
// Enables bitwise operators on the WHV_MAP_GPA_RANGE_FLAGS enumeration.
DEFINE_ENUM_FLAG_OPERATORS(WHV_MAP_GPA_RANGE_FLAGS);
HRESULT
WINAPI
WHvMapGpaRange2(
_In_ WHV_PARTITION_HANDLE Partition,
_In_ HANDLE Process,
_In_ VOID* SourceAddress,
_In_ WHV_GUEST_PHYSICAL_ADDRESS GuestAddress,
_In_ UINT64 SizeInBytes,
_In_ WHV_MAP_GPA_RANGE_FLAGS Flags
);
Parameters
Partition
파티션 개체에 대한 핸들입니다.
Process
주소 공간에 식별된 메모리 영역 SourceAddress이 포함된 호스트 프로세스에 대한 핸들입니다. 핸들은 해당 프로세스에 대한 액세스 권한을 부여PROCESS_VM_READPROCESS_VM_WRITE하고 PROCESS_VM_OPERATION 액세스해야 합니다.
SourceAddress
매핑의 원본인 메모리 영역의 Process주소 공간 내에서 페이지 정렬 주소를 지정합니다.
GuestAddress
VM의 실제 주소 공간에서 대상 주소를 지정합니다.
SizeInBytes
매핑할 바이트 수를 지정합니다.
Flags
매핑에 대한 액세스 플래그를 지정합니다.
반환 값
함수가 성공하면 반환 값은 .입니다 S_OK.
원본 지역 또는 게스트 실제 주소 범위가 페이지 정렬되지 않았거나, 크기가 0이거나, 오버플로되는 범위를 설명하는 경우 함수가 반환됩니다 E_INVALIDARG. 또한 이 함수는 페이지에 적용할 수 없는 액세스 권한의 값 또는 조합을 지정하는 경우에도 Flags 반환 E_INVALIDARG 됩니다.
Remarks
함수는 WHvMapGpaRange2 확장된 형식입니다 WHvMapGpaRange. 항상 호출 프로세스의 주소 공간을 매핑의 원본으로 사용하는 반면 WHvMapGpaRange 명시 WHvMapGpaRange2 적 Process 핸들을 수락하고 해당 프로세스의 주소 공간을 사용합니다. 이렇게 하면 가상화가 다른 호스트 프로세스에서 소유한 메모리를 사용하여 파티션의 게스트 실제 메모리를 다시 스택할 수 있습니다.
파티션의 GPA 공간에서 범위에 대한 매핑을 만들면 원본 프로세스의 영역이 해당 범위에 대한 지원 메모리로 설정됩니다. 이 작업은 지정된 GPA 페이지에 대한 이전 매핑을 대체합니다.
만든 WHvMapGpaRange2매핑을 제거하려면 .를 호출합니다 WHvUnmapGpaRange.
Requirements
| 요구 사항 | Value |
|---|---|
| 지원되는 최소 Windows | Windows 10, 버전 20H2(x64); Windows 11 버전 24H2, 빌드 26100.3915(Arm64) |
| Header | WinHvPlatform.h |
| 라이브러리 | WinHvPlatform.lib |
| 동적 링크 라이브러리 (DLL) | WinHvPlatform.dll |
| 아키텍처 | x64, Arm64 |