VPCI(가상 PCI) 디바이스의 MMIO 범위를 호출자의 프로세스에 매핑합니다.
문법
typedef enum WHV_VPCI_DEVICE_REGISTER_SPACE
{
WHvVpciConfigSpace = -1,
WHvVpciBar0 = 0,
WHvVpciBar1 = 1,
WHvVpciBar2 = 2,
WHvVpciBar3 = 3,
WHvVpciBar4 = 4,
WHvVpciBar5 = 5
} WHV_VPCI_DEVICE_REGISTER_SPACE;
typedef enum WHV_VPCI_MMIO_RANGE_FLAGS
{
WHvVpciMmioRangeFlagReadAccess = 0x00000001,
WHvVpciMmioRangeFlagWriteAccess = 0x00000002
} WHV_VPCI_MMIO_RANGE_FLAGS;
// Enables bitwise operators on the WHV_VPCI_MMIO_RANGE_FLAGS enumeration.
DEFINE_ENUM_FLAG_OPERATORS(WHV_VPCI_MMIO_RANGE_FLAGS);
typedef struct WHV_VPCI_MMIO_MAPPING
{
WHV_VPCI_DEVICE_REGISTER_SPACE Location;
WHV_VPCI_MMIO_RANGE_FLAGS Flags;
UINT64 SizeInBytes;
UINT64 OffsetInBytes;
PVOID VirtualAddress;
} WHV_VPCI_MMIO_MAPPING;
HRESULT
WINAPI
WHvMapVpciDeviceMmioRanges(
_In_ WHV_PARTITION_HANDLE Partition,
_In_ UINT64 LogicalDeviceId,
_Out_ UINT32* MappingCount,
_Outptr_result_buffer_(*MappingCount) WHV_VPCI_MMIO_MAPPING** Mappings
);
Parameters
Partition
VPCI 디바이스를 소유하는 파티션을 처리합니다.
LogicalDeviceId
VPCI 디바이스의 논리적 디바이스 식별자를 지정합니다.
MappingCount
반환 Mappings 된 배열의 요소 수를 받습니다.
Mappings
매핑된 MMIO 범위를 설명하는 요소 배열 WHV_VPCI_MMIO_MAPPING 에 대한 포인터를 받습니다.
반환 값
함수가 성공하면 반환 값은 .입니다 S_OK.
Remarks
이 함수는 WHvMapVpciDeviceMmioRanges VPCI 디바이스와 연결된 실제 MMIO 범위를 호출자 프로세스의 가상 주소 공간에 매핑합니다. 디바이스는 D0 전원 상태여야 합니다. 을 사용하여 전원 상태를 WHvSetVpciDevicePowerState설정합니다.
사용 가능한 각 BAR(기본 주소 레지스터)는 배열에서 Mappings 하나 이상의 항목으로 표시됩니다. 항목은 주로 BAR별로 정렬됩니다. 동일한 BAR에 대한 항목은 오프셋별로 정렬되고, 겹치지 않으며, 중간 간격 없이 BAR의 전체 크기를 덮습니다. 각 항목은 기준 주소와 지정된 길이의 지정된 오프셋부터 시작하여 BAR의 하위 범위를 식별하며, 하위 범위가 매핑되는 가상 주소 및 호출자의 프로세스에 부여된 액세스 수준을 식별합니다.
반환된 배열은 호출자가 디바이스의 MMIO 범위 WHvUnmapVpciDeviceMmioRanges의 매핑을 해제하거나, 디바이스 WHvSetVpciDevicePowerState에서 전원을 끄거나, 디바이스 WHvDeleteVpciDevice를 삭제할 때까지 유효합니다.
Requirements
| 요구 사항 | Value |
|---|---|
| 지원되는 최소 Windows | Windows 10, 버전 20H2(x64); Windows 11 버전 24H2, 빌드 26100.3915(Arm64) |
| Header | WinHvPlatform.h |
| 라이브러리 | WinHvPlatform.lib |
| 동적 링크 라이브러리 (DLL) | WinHvPlatform.dll |
| 아키텍처 | x64, Arm64 |