965 lines
18 KiB
C
965 lines
18 KiB
C
/*++
|
|
|
|
Copyright (c) Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
Vid.h
|
|
|
|
Abstract:
|
|
|
|
Header file for the VID user-mode interface layer, Vid.dll.
|
|
|
|
Author:
|
|
|
|
John Gregg (jgregg) 08-Jun-2005
|
|
|
|
--*/
|
|
|
|
#pragma once
|
|
|
|
#if !defined(_VID_DLL_)
|
|
#define VIDDLLAPI DECLSPEC_IMPORT
|
|
#else
|
|
#define VIDDLLAPI
|
|
#endif
|
|
|
|
#include "VidDefs.h"
|
|
|
|
//
|
|
// The following is required in order to make sure the C++ compiler doesn't
|
|
// mangle the functions exported from Vid.dll.
|
|
//
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
//
|
|
// This is a wrapper for the queue handle
|
|
// which contains the user mode VA of the
|
|
// client exchange buffer.
|
|
//
|
|
typedef struct _VID_QUEUE_HANDLE
|
|
{
|
|
QUEUE_HANDLE FileHandle;
|
|
PVOID ExchangeBufferContext;
|
|
UINT32 ConcurrencyLevel;
|
|
} VID_QUEUE_HANDLE, *PVID_QUEUE_HANDLE;
|
|
|
|
static const VID_QUEUE_HANDLE INVALID_VID_QUEUE_HANDLE
|
|
= { INVALID_HANDLE_VALUE, NULL, 0 };
|
|
|
|
#define VID_QUEUE_HANDLE_IS_EQUAL(h1, h2) \
|
|
(h1.FileHandle == h2.FileHandle)
|
|
|
|
|
|
|
|
#ifndef _TEST_VID_
|
|
|
|
//
|
|
// Partition related API.
|
|
//
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidGetIdealPartitionNumaMask(
|
|
__in UINT64 PartitionPageCount,
|
|
__in UINT32 VirtualProcessorCount,
|
|
__out UINT64* NumaNodeMask
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
PT_HANDLE
|
|
WINAPI
|
|
VidCreatePartition(
|
|
__in_ecount(PartitionNameSizeInChars) WCHAR* PartitionName,
|
|
__in UINT32 PartitionNameSizeInChars,
|
|
__in UINT32 ProcessorCount,
|
|
__in UINT64 NumaNodeMask
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
PT_HANDLE
|
|
WINAPI
|
|
VidCreatePartitionEx(
|
|
__in_ecount(PartitionNameSizeInChars) WCHAR* PartitionName,
|
|
__in UINT32 PartitionNameSizeInChars,
|
|
__in UINT32 ProcessorCount,
|
|
__in UINT64 NumaNodeMask,
|
|
__in UINT32 Flags
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidDeletePartition(
|
|
__in PT_HANDLE Partition
|
|
);
|
|
|
|
|
|
//
|
|
// Virtual processor related API.
|
|
//
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidAddVirtualProcessor(
|
|
__in PT_HANDLE Partition,
|
|
__out VID_PROCESSOR_INDEX* NewProcessorIndex
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidRemoveVirtualProcessor(
|
|
__in PT_HANDLE Partition,
|
|
__in VID_PROCESSOR_INDEX ProcessorIndex
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidStartVirtualProcessor(
|
|
__in PT_HANDLE Partition,
|
|
__in VID_PROCESSOR_INDEX ProcessorIndex
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidStopVirtualProcessor(
|
|
__in PT_HANDLE Partition,
|
|
__in VID_PROCESSOR_INDEX ProcessorIndex,
|
|
__in_opt PVOID UserContext,
|
|
__in VID_QUEUE_HANDLE MessageQueue
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidGetVirtualProcessorRunningStatus(
|
|
__in PT_HANDLE Partition,
|
|
__in VID_PROCESSOR_INDEX ProcessorIndex,
|
|
__out VID_PROCESSOR_STATUS* ProcessorStatus
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidGetVirtualProcessorState(
|
|
__in PT_HANDLE Partition,
|
|
__in VID_PROCESSOR_INDEX ProcessorIndex,
|
|
__in_ecount(ProcessorStateCodeCount)
|
|
VID_VP_STATE_CODE* ProcessorStateCodeArray,
|
|
__in UINT8 ProcessorStateCodeCount,
|
|
__out_ecount(ProcessorStateCodeCount)
|
|
VID_VP_STATE_VALUE* ProcessorStateOutputArray
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidSetVirtualProcessorState(
|
|
__in PT_HANDLE Partition,
|
|
__in VID_PROCESSOR_INDEX ProcessorIndex,
|
|
__in_ecount(ProcessorStateCodeCount)
|
|
VID_VP_STATE_CODE* ProcessorStateCodeArray,
|
|
__in UINT8 ProcessorStateCodeCount,
|
|
__in_ecount(ProcessorStateCodeCount)
|
|
VID_VP_STATE_VALUE* ProcessorStateInputArray
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidAssertVirtualProcessorInterrupt(
|
|
__in PT_HANDLE Partition,
|
|
__in HV_INTERRUPT_CONTROL InterruptControl,
|
|
__in UINT64 DestinationAddress,
|
|
__in HV_INTERRUPT_VECTOR InterruptVector,
|
|
__in UINT32 Flags
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidClearVirtualProcessorInterrupt(
|
|
__in PT_HANDLE Partition
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidRegisterCpuidHandler(
|
|
__in PT_HANDLE Partition,
|
|
__in VID_PROCESSOR_INDEX ProcessorIndex,
|
|
__in VID_QUEUE_HANDLE MessageQueue,
|
|
__in UINT32 CpuidFunction,
|
|
__in PVOID UserContext,
|
|
__out HANDLER_REF * HandlerRef
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidRegisterLegacyFpErrorHandler(
|
|
__in PT_HANDLE Partition,
|
|
__in VID_QUEUE_HANDLE MessageQueue,
|
|
__in UINT32 Flags,
|
|
__in PVOID UserContext,
|
|
__out HANDLER_REF* HandlerRef
|
|
);
|
|
|
|
//
|
|
// Client notifications related API.
|
|
//
|
|
VIDDLLAPI
|
|
VID_QUEUE_HANDLE
|
|
WINAPI
|
|
VidCreateMessageQueueEx(
|
|
__in PT_HANDLE PartitionHandle,
|
|
__in_ecount(QueueNameSizeInChars)
|
|
WCHAR* QueueName,
|
|
__in UINT32 QueueNameSizeInChars,
|
|
__in UINT32 Flags,
|
|
__in UINT32 ConcurrencyLevel,
|
|
__in VID_QUEUE_HANDLE QueueGroup
|
|
);
|
|
|
|
VIDDLLAPI
|
|
VID_QUEUE_HANDLE
|
|
WINAPI
|
|
VidCreateMessageQueue(
|
|
__in PT_HANDLE PartitionHandle,
|
|
__in_ecount(QueueNameSizeInChars)
|
|
WCHAR* QueueName,
|
|
__in UINT32 QueueNameSizeInChars,
|
|
__in UINT32 Flags
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidDeleteMessageQueue(
|
|
__in VID_QUEUE_HANDLE MessageQueue
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidRegisterIoPortHandler(
|
|
__in PT_HANDLE Partition,
|
|
__in VID_QUEUE_HANDLE MessageQueue,
|
|
__in VID_IO_PORT_ADDRESS PortRangeBegin,
|
|
__in VID_IO_PORT_ADDRESS PortRangeEnd,
|
|
__in UINT32 Flags,
|
|
__in PVOID UserContext,
|
|
__out HANDLER_REF* HandlerRef
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidRegisterMsrHandler(
|
|
__in PT_HANDLE Partition,
|
|
__in VID_QUEUE_HANDLE MessageQueue,
|
|
__in VID_MSR_ADDRESS MsrRangeBegin,
|
|
__in VID_MSR_ADDRESS MsrRangeEnd,
|
|
__in UINT32 Flags,
|
|
__in PVOID UserContext,
|
|
__out HANDLER_REF* HandlerRef
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidRegisterExceptionHandler(
|
|
__in PT_HANDLE Partition,
|
|
__in VID_QUEUE_HANDLE MessageQueue,
|
|
__in UINT8 ExceptionVector,
|
|
__in UINT32 Flags,
|
|
__in PVOID UserContext,
|
|
__out HANDLER_REF* HandlerRef
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidRegisterTripleFaultHandler(
|
|
__in PT_HANDLE Partition,
|
|
__in VID_QUEUE_HANDLE MessageQueue,
|
|
__in UINT32 Flags,
|
|
__in PVOID UserContext,
|
|
__out HANDLER_REF* HandlerRef
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidRegisterApicEoiHandler(
|
|
__in PT_HANDLE Partition,
|
|
__in VID_QUEUE_HANDLE MessageQueue,
|
|
__in UINT32 Flags,
|
|
__in PVOID UserContext,
|
|
__out HANDLER_REF* HandlerRef
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidUnregisterHandler(
|
|
__in PT_HANDLE Partition,
|
|
__in HANDLER_REF HandlerRef
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidHandleMessageAndGetNextMessage(
|
|
__in VID_QUEUE_HANDLE MessageQueue,
|
|
__in UINT32 Flags,
|
|
__in PVID_MSG_RETURN_DATA MessageReturnData,
|
|
__out PVID_MSG_DATA MessageData,
|
|
__in_opt LPOVERLAPPED Overlapped
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidHandleMessageAndGetNextMessageEx(
|
|
__in VID_QUEUE_HANDLE MessageQueue,
|
|
__in UINT32 Flags,
|
|
__inout VID_MSG_RETURN_DATA** MessageReturnData,
|
|
__out_opt VID_MSG_DATA** MessageData,
|
|
__in UINT32 Timeout
|
|
);
|
|
|
|
//
|
|
// Save and Restore API.
|
|
//
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidSavePartitionState(
|
|
__in PT_HANDLE Partition,
|
|
__in UINT32 Flags,
|
|
__out_bcount(*SavedStateBlobSize)
|
|
PVID_SAVED_STATE_DESCRIPTOR SavedStateBlob,
|
|
__inout UINT32* SavedStateBlobSize
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidRestorePartitionState(
|
|
__in PT_HANDLE Partition,
|
|
__in UINT32 Flags,
|
|
__in_bcount(SavedStateBlobSize)
|
|
PVID_SAVED_STATE_DESCRIPTOR SavedStateBlob,
|
|
__in UINT32 SavedStateBlobSize
|
|
);
|
|
|
|
//
|
|
// Scheduling APIs
|
|
//
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidSetCpuReserve(
|
|
__in PT_HANDLE Partition,
|
|
__in UINT32 CpuReserve
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidSetCpuCap(
|
|
__in PT_HANDLE Partition,
|
|
__in UINT32 CpuCap
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidSetRelativeWeight(
|
|
__in PT_HANDLE Partition,
|
|
__in UINT32 Weight
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidSetSchedulingControl(
|
|
__in PT_HANDLE Partition,
|
|
__in HV_SCHEDULING_CONTROL Flags
|
|
);
|
|
|
|
//
|
|
// Partition Property APIs
|
|
//
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidSetPartitionProperty(
|
|
__in PT_HANDLE Partition,
|
|
__in UINT64 PropertyCode,
|
|
__in UINT64 PropertyValue
|
|
);
|
|
|
|
//
|
|
// Timer APIs
|
|
//
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidCreateTimer(
|
|
__in PT_HANDLE Partition,
|
|
__in VID_QUEUE_HANDLE QueueHandle,
|
|
__in PVOID UserContext,
|
|
__out TIMER_REF * TimerRef
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidGetCurrentReferenceTime(
|
|
__in PT_HANDLE Partition,
|
|
__out HV_NANO100_TIME * CurrentTime
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidSetAbsoluteTimer(
|
|
__in PT_HANDLE Partition,
|
|
__in TIMER_REF TimerRef,
|
|
__in HV_NANO100_TIME SignalTime
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidCancelTimer(
|
|
__in PT_HANDLE Partition,
|
|
__in TIMER_REF TimerRef
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidDeleteTimer(
|
|
__in PT_HANDLE Partition,
|
|
__in TIMER_REF TimerRef
|
|
);
|
|
|
|
|
|
//
|
|
// Debugging related API.
|
|
//
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidSingleStepVirtualProcessor(
|
|
__in PT_HANDLE Partition,
|
|
__in VID_PROCESSOR_INDEX ProcessorIndex,
|
|
__in VID_QUEUE_HANDLE MessageQueue
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidRegisterSoftwareBreakpoint(
|
|
__in PT_HANDLE Partition,
|
|
__in VID_PROCESSOR_INDEX ProcessorIndex,
|
|
__in UINT64 BreakpointAddress,
|
|
__in UINT32 Flags,
|
|
__in PVOID UserContext,
|
|
__in VID_QUEUE_HANDLE MessageQueue
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidUnregisterSoftwareBreakpoint(
|
|
__in PT_HANDLE Partition,
|
|
__in VID_PROCESSOR_INDEX ProcessorIndex,
|
|
__in UINT64 BreakpointAddress
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidGetHvPartitionId(
|
|
__in PT_HANDLE Partition,
|
|
__out PHV_PARTITION_ID PartitionId
|
|
);
|
|
|
|
//
|
|
// Performance statistics-related API.
|
|
//
|
|
// FUTURE-jgregg-1/24/2006: Some of these
|
|
// currently call the HV directly; they should
|
|
// be updated to tie into the perflib providers.
|
|
//
|
|
VIDDLLAPI
|
|
HANDLE
|
|
WINAPI
|
|
VidOpenStatisticsHandle();
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidCloseStatisticsHandle(
|
|
__in HANDLE StatsHandle
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidGetVidStatistics(
|
|
__in HANDLE StatsHandle,
|
|
__inout PUINT32 BufferSize,
|
|
__out_bcount(*BufferSize) PUINT64 StatsBuffer
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidGetPartitionStatistics(
|
|
__in PT_HANDLE PartitionHandle,
|
|
__inout PUINT32 BufferSize,
|
|
__out_bcount(*BufferSize) PUINT64 StatsBuffer
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidGetQueueStatistics(
|
|
__in VID_QUEUE_HANDLE QueueHandle,
|
|
__inout PUINT32 BufferSize,
|
|
__out_bcount(*BufferSize) PUINT64 StatsBuffer
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidGetNumaNodeStatistics(
|
|
__in HANDLE StatsHandle,
|
|
__in UINT32 NodeIndex,
|
|
__inout PUINT32 BufferSize,
|
|
__out_bcount(*BufferSize) PUINT64 StatsBuffer
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidTestGetNumaNodeStat(
|
|
__in HANDLE StatsHandle,
|
|
__in UINT32 NodeIndex,
|
|
__in VID_NUMA_NODE_STAT_PROPERTY Property,
|
|
__out PUINT64 Value
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidGetPartitionIds(
|
|
__in HANDLE StatsHandle,
|
|
__out PHV_PARTITION_ID ParentPartitionId,
|
|
__inout UINT32* Count,
|
|
__out PHV_PARTITION_ID ChildPartitionIds,
|
|
__inout UINT32* NameBufferSize,
|
|
__out WCHAR* NameBuffer
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidGetHvVpRuntime(
|
|
__in HANDLE StatsHandle,
|
|
__in HV_PARTITION_ID PartitionId,
|
|
__in VID_PROCESSOR_INDEX VpIndex,
|
|
__out UINT64 * HvRunTime
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidGetHvRuntimeForAllLps(
|
|
__in HANDLE StatsHandle,
|
|
__out UINT32* LpCount,
|
|
__out UINT64* LpMask,
|
|
__out UINT64* LpRuntimes,
|
|
__in UINT32 LpRuntimesSizeInBytes
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidGetHvRuntimeForAllVps(
|
|
__in HANDLE StatsHandle,
|
|
__in HV_PARTITION_ID PartitionId,
|
|
__out UINT32* VpCount,
|
|
__out UINT64* VpRuntimes,
|
|
__in UINT32 VpRuntimesSizeInBytes
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidGetHvLogicalProcessorRuntime(
|
|
__in HANDLE StatsHandle,
|
|
__in UINT32 LogicalProcessorIndex,
|
|
__out UINT64* HvRuntime,
|
|
__out UINT64* HvHypervisorTime,
|
|
__out UINT64* HvGroupRuntime,
|
|
__out UINT64* HvGlobalTime
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidGetHvMemoryBalance(
|
|
__in PT_HANDLE PartitionHandle,
|
|
__out UINT64 * PagesAvailable,
|
|
__out UINT64 * PagesInUse
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidMapHvGlobalStatsPage(
|
|
__in HANDLE StatsHandle,
|
|
__in BOOLEAN UseIndex,
|
|
__in UINT32 Index,
|
|
__in UINT32 ReservedIndex,
|
|
__out PVOID * UserMapping
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidUnmapHvGlobalStatsPage(
|
|
__in HANDLE StatsHandle,
|
|
__in BOOLEAN UseIndex,
|
|
__in UINT32 Index,
|
|
__in UINT32 ReservedIndex
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidMapHvRootStatsPage(
|
|
__in HANDLE StatsHandle,
|
|
__in BOOLEAN UseIndex,
|
|
__in UINT32 Index,
|
|
__in UINT32 ReservedIndex,
|
|
__out PVOID * UserMapping
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidUnmapHvRootStatsPage(
|
|
__in HANDLE StatsHandle,
|
|
__in BOOLEAN UseIndex,
|
|
__in UINT32 Index,
|
|
__in UINT32 ReservedIndex
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidMapHvLocalStatsPage(
|
|
__in PT_HANDLE PartitionHandle,
|
|
__in BOOLEAN UseIndex,
|
|
__in UINT32 Index,
|
|
__in UINT32 ReservedIndex,
|
|
__out PVOID * UserMapping
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidUnmapHvLocalStatsPage(
|
|
__in PT_HANDLE PartitionHandle,
|
|
__in BOOLEAN UseIndex,
|
|
__in UINT32 Index,
|
|
__in UINT32 ReservedIndex
|
|
);
|
|
|
|
//
|
|
// Partition HV Memory pool policy API.
|
|
//
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidSetHvMemoryPolicy(
|
|
__in PT_HANDLE PartitionHandle,
|
|
__in UINT32 Flags,
|
|
__in QUEUE_HANDLE QueueHandle,
|
|
__in PVOID UserContext,
|
|
__in UINT64 DepositBlockSizeKb,
|
|
__in UINT64 NotificationThresholdKb,
|
|
__in UINT64 SptPoolSize
|
|
);
|
|
|
|
//
|
|
// Partition memory management related API.
|
|
//
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidCreateMemoryBlock(
|
|
__in PT_HANDLE Partition,
|
|
__in UINT64 PageCount,
|
|
__in UINT64 MinWorkingSetSize,
|
|
__in_ecount(PagingFileNameSizeInChars)
|
|
WCHAR* PagingFileName,
|
|
__in UINT32 PagingFileNameSizeInChars,
|
|
__in PSID PagingFileAccessSid,
|
|
__in VID_PHYSICAL_NODE_INDEX NumaNodeIndex,
|
|
__in UINT64 Flags,
|
|
__out MB_HANDLE* NewMemoryBlock
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidDestroyMemoryBlock(
|
|
__in PT_HANDLE Partition,
|
|
__in MB_HANDLE MemoryBlock
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidSetMemoryBlockMinWorkingSet(
|
|
__in PT_HANDLE Partition,
|
|
__in MB_HANDLE MemoryBlock,
|
|
__in UINT64 MinWorkingSetSize,
|
|
__in_ecount(PagingFileNameSizeInChars)
|
|
WCHAR* PagingFileName,
|
|
__in UINT32 PagingFileNameSizeInChars,
|
|
__in PSID PagingFileAccessSid
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidSetMemoryBlockProperty(
|
|
__in PT_HANDLE Partition,
|
|
__in MB_HANDLE MemoryBlock,
|
|
__in UINT64 Property,
|
|
__in BOOL SetProperty
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidScanMemoryBlockForSharedPages(
|
|
__in PT_HANDLE Partition,
|
|
__in MB_HANDLE MemoryBlock
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidProtectMemoryBlockPages(
|
|
__in PT_HANDLE Partition,
|
|
__in MB_HANDLE MemoryBlock
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidUnprotectMemoryBlockPages(
|
|
__in PT_HANDLE Partition,
|
|
__in MB_HANDLE MemoryBlock
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidCreateMemoryBlockGpaRange(
|
|
__in PT_HANDLE Partition,
|
|
__in MB_HANDLE MemoryBlock,
|
|
__in GUEST_PHYSICAL_PAGE_INDEX StartPage,
|
|
__in UINT64 RangePageCount,
|
|
__in MB_PAGE_INDEX StartMbp,
|
|
__in UINT64 Flags,
|
|
__out RG_HANDLE* NewGpaRange
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidCreateMmioGpaRange(
|
|
__in PT_HANDLE Partition,
|
|
__in GUEST_PHYSICAL_PAGE_INDEX StartPage,
|
|
__in UINT64 RangePageCount,
|
|
__in VID_QUEUE_HANDLE MessageQueue,
|
|
__in PVOID ClientContext,
|
|
__out RG_HANDLE* NewGpaRange
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidDestroyGpaRange(
|
|
__in PT_HANDLE Partition,
|
|
__in RG_HANDLE GpaRange
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidSetMemoryBlockNotificationQueue(
|
|
__in PT_HANDLE Partition,
|
|
__in MB_HANDLE MemoryBlock,
|
|
__in VID_QUEUE_HANDLE MessageQueue,
|
|
__in PVOID ClientContext
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidSetMemoryBlockClientNotifications(
|
|
__in PT_HANDLE Partition,
|
|
__in MB_HANDLE MemoryBlock,
|
|
__in MB_PAGE_INDEX StartMbp,
|
|
__in UINT64 MbpCount,
|
|
__in UINT32 NotificationMask
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidMapMemoryBlockPageRange(
|
|
__in PT_HANDLE Partition,
|
|
__in MB_HANDLE MemoryBlock,
|
|
__in MB_PAGE_INDEX StartMbp,
|
|
__in UINT64 MbpCount,
|
|
__in VID_ACCESS_TYPE DesiredAccess,
|
|
__inout VOID** UserMappingAddress
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidUnmapMemoryBlockPageRangeBulk(
|
|
__in PT_HANDLE Partition,
|
|
__in_ecount(UserMappingAddressCount) PVOID* UserMappingAddressList,
|
|
__in UINT32 UserMappingAddressCount
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidReadMemoryBlockPageRange(
|
|
__in PT_HANDLE Partition,
|
|
__in MB_HANDLE MemoryBlock,
|
|
__in MB_PAGE_INDEX StartMbp,
|
|
__in UINT64 MbpCount,
|
|
__out_bcount(BufferSize)
|
|
PVOID ClientBuffer,
|
|
__in UINT64 BufferSize
|
|
);
|
|
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidWriteMemoryBlockPageRange(
|
|
__in PT_HANDLE Partition,
|
|
__in MB_HANDLE MemoryBlock,
|
|
__in MB_PAGE_INDEX StartMbp,
|
|
__in UINT64 MbpCount,
|
|
__in_bcount(BufferSize)
|
|
PVOID ClientBuffer,
|
|
__in UINT64 BufferSize
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidTranslateGvaToGpa(
|
|
__in PT_HANDLE Partition,
|
|
__in HV_VP_INDEX VpIndex,
|
|
__in HV_TRANSLATE_GVA_CONTROL_FLAGS ControlFlags,
|
|
__in HV_GVA_PAGE_NUMBER GvaPage,
|
|
__out PHV_TRANSLATE_GVA_RESULT TranslationResult,
|
|
__out PHV_GPA_PAGE_NUMBER GpaPage,
|
|
__out PVOID* MmioContext,
|
|
__out PVOID* MemoryBlockContext,
|
|
__out UINT64* MemoryBlockPageIndex,
|
|
__out UINT64* MemoryBlockGpaRangeFlags
|
|
);
|
|
|
|
//
|
|
// These interfaces are used as hooks for testing.
|
|
// They should not be in the retail product.
|
|
//
|
|
|
|
#ifdef DBG
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidDebugHandleIntercept(
|
|
__in PT_HANDLE Partition,
|
|
__in_bcount(MessageSize) PVOID HvInterceptMessage,
|
|
__in UINT32 MessageSize,
|
|
__out PVID_MSG_DATA OutgoingMessageData
|
|
);
|
|
|
|
VIDDLLAPI
|
|
BOOL
|
|
WINAPI
|
|
VidDebugFlushQueue(
|
|
__in VID_QUEUE_HANDLE Queue
|
|
);
|
|
|
|
#endif // DBG
|
|
|
|
#endif // _TEST_VID_
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|