ホーム › System.Hypervisor › WHV_CAPABILITY
WHV_CAPABILITY
共用体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| HypervisorPresent | BOOL | 4 | +0 | +0 | ハイパーバイザが存在し利用可能かを示すBOOL。WHvCapabilityCodeHypervisorPresent照会時に使う。 |
| Features | WHV_CAPABILITY_FEATURES | 8 | +0 | +0 | プラットフォームがサポートする機能集合を示すWHV_CAPABILITY_FEATURESである。 |
| ExtendedVmExits | WHV_EXTENDED_VM_EXITS | 8 | +0 | +0 | サポートされる拡張VM終了種別を示すWHV_EXTENDED_VM_EXITSである。 |
| ProcessorVendor | WHV_PROCESSOR_VENDOR | 4 | +0 | +0 | プロセッサのベンダー種別を示すWHV_PROCESSOR_VENDOR(Intel/AMD等)である。 |
| ProcessorFeatures | WHV_PROCESSOR_FEATURES | 8 | +0 | +0 | サポートされるプロセッサ機能を示すWHV_PROCESSOR_FEATURESである。 |
| SyntheticProcessorFeaturesBanks | WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS | 16 | +0 | +0 | サポートされる合成プロセッサ機能をバンク形式で示す。 |
| ProcessorXsaveFeatures | WHV_PROCESSOR_XSAVE_FEATURES | 8 | +0 | +0 | サポートされるXSAVE関連プロセッサ機能を示す。 |
| ProcessorClFlushSize | BYTE | 1 | +0 | +0 | CLFLUSH命令のキャッシュラインサイズ(8バイト単位)を示すBYTEである。 |
| ExceptionExitBitmap | ULONGLONG | 8 | +0 | +0 | VM終了を発生させる例外ベクタのビットマップを示すULONGLONGである。 |
| X64MsrExitBitmap | WHV_X64_MSR_EXIT_BITMAP | 8 | +0 | +0 | MSRアクセスによるVM終了条件を示すWHV_X64_MSR_EXIT_BITMAPである。 |
| ProcessorClockFrequency | ULONGLONG | 8 | +0 | +0 | プロセッサクロック周波数をHz単位で示すULONGLONGである。 |
| InterruptClockFrequency | ULONGLONG | 8 | +0 | +0 | 割り込みクロック周波数をHz単位で示すULONGLONGである。 |
| ProcessorFeaturesBanks | WHV_PROCESSOR_FEATURES_BANKS | 24 | +0 | +0 | サポートされるプロセッサ機能をバンク形式で示すWHV_PROCESSOR_FEATURES_BANKSである。 |
| GpaRangePopulateFlags | WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS | 4 | +0 | +0 | GPA範囲ポピュレートでサポートされるフラグを示す。 |
| ProcessorFrequencyCap | WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP | 20 | +0 | +0 | プロセッサ周波数制御の能力を示すWHV_CAPABILITY_PROCESSOR_FREQUENCY_CAPである。 |
| ProcessorPerfmonFeatures | WHV_PROCESSOR_PERFMON_FEATURES | 8 | +0 | +0 | サポートされるパフォーマンスモニタリング機能を示す。 |
| SchedulerFeatures | WHV_SCHEDULER_FEATURES | 8 | +0 | +0 | サポートされるスケジューラ機能を示すWHV_SCHEDULER_FEATURESである。 |
各言語での定義
#include <windows.h>
// WHV_CAPABILITY_FEATURES (x64 8 / x86 8 バイト)
typedef struct WHV_CAPABILITY_FEATURES {
_Anonymous_e__Struct Anonymous;
ULONGLONG AsUINT64;
} WHV_CAPABILITY_FEATURES;
// WHV_EXTENDED_VM_EXITS (x64 8 / x86 8 バイト)
typedef struct WHV_EXTENDED_VM_EXITS {
_Anonymous_e__Struct Anonymous;
ULONGLONG AsUINT64;
} WHV_EXTENDED_VM_EXITS;
// WHV_PROCESSOR_FEATURES (x64 8 / x86 8 バイト)
typedef struct WHV_PROCESSOR_FEATURES {
_Anonymous_e__Struct Anonymous;
ULONGLONG AsUINT64;
} WHV_PROCESSOR_FEATURES;
// WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS (x64 16 / x86 16 バイト)
typedef struct WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS {
DWORD BanksCount;
DWORD Reserved0;
_Anonymous_e__Union Anonymous;
} WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS;
// WHV_PROCESSOR_XSAVE_FEATURES (x64 8 / x86 8 バイト)
typedef struct WHV_PROCESSOR_XSAVE_FEATURES {
_Anonymous_e__Struct Anonymous;
ULONGLONG AsUINT64;
} WHV_PROCESSOR_XSAVE_FEATURES;
// WHV_X64_MSR_EXIT_BITMAP (x64 8 / x86 8 バイト)
typedef struct WHV_X64_MSR_EXIT_BITMAP {
ULONGLONG AsUINT64;
_Anonymous_e__Struct Anonymous;
} WHV_X64_MSR_EXIT_BITMAP;
// WHV_PROCESSOR_FEATURES_BANKS (x64 24 / x86 24 バイト)
typedef struct WHV_PROCESSOR_FEATURES_BANKS {
DWORD BanksCount;
DWORD Reserved0;
_Anonymous_e__Union Anonymous;
} WHV_PROCESSOR_FEATURES_BANKS;
// WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS (x64 4 / x86 4 バイト)
typedef struct WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS {
DWORD AsUINT32;
_Anonymous_e__Struct Anonymous;
} WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS;
// WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP (x64 20 / x86 20 バイト)
typedef struct WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP {
DWORD _bitfield;
DWORD HighestFrequencyMhz;
DWORD NominalFrequencyMhz;
DWORD LowestFrequencyMhz;
DWORD FrequencyStepMhz;
} WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP;
// WHV_PROCESSOR_PERFMON_FEATURES (x64 8 / x86 8 バイト)
typedef struct WHV_PROCESSOR_PERFMON_FEATURES {
_Anonymous_e__Struct Anonymous;
ULONGLONG AsUINT64;
} WHV_PROCESSOR_PERFMON_FEATURES;
// WHV_SCHEDULER_FEATURES (x64 8 / x86 8 バイト)
typedef struct WHV_SCHEDULER_FEATURES {
_Anonymous_e__Struct Anonymous;
ULONGLONG AsUINT64;
} WHV_SCHEDULER_FEATURES;
// WHV_CAPABILITY (x64 24 / x86 24 バイト)
typedef struct WHV_CAPABILITY {
BOOL HypervisorPresent;
WHV_CAPABILITY_FEATURES Features;
WHV_EXTENDED_VM_EXITS ExtendedVmExits;
WHV_PROCESSOR_VENDOR ProcessorVendor;
WHV_PROCESSOR_FEATURES ProcessorFeatures;
WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS SyntheticProcessorFeaturesBanks;
WHV_PROCESSOR_XSAVE_FEATURES ProcessorXsaveFeatures;
BYTE ProcessorClFlushSize;
ULONGLONG ExceptionExitBitmap;
WHV_X64_MSR_EXIT_BITMAP X64MsrExitBitmap;
ULONGLONG ProcessorClockFrequency;
ULONGLONG InterruptClockFrequency;
WHV_PROCESSOR_FEATURES_BANKS ProcessorFeaturesBanks;
WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS GpaRangePopulateFlags;
WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP ProcessorFrequencyCap;
WHV_PROCESSOR_PERFMON_FEATURES ProcessorPerfmonFeatures;
WHV_SCHEDULER_FEATURES SchedulerFeatures;
} WHV_CAPABILITY;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_CAPABILITY_FEATURES
{
public _Anonymous_e__Struct Anonymous;
public ulong AsUINT64;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_EXTENDED_VM_EXITS
{
public _Anonymous_e__Struct Anonymous;
public ulong AsUINT64;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_PROCESSOR_FEATURES
{
public _Anonymous_e__Struct Anonymous;
public ulong AsUINT64;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS
{
public uint BanksCount;
public uint Reserved0;
public _Anonymous_e__Union Anonymous;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_PROCESSOR_XSAVE_FEATURES
{
public _Anonymous_e__Struct Anonymous;
public ulong AsUINT64;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_X64_MSR_EXIT_BITMAP
{
public ulong AsUINT64;
public _Anonymous_e__Struct Anonymous;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_PROCESSOR_FEATURES_BANKS
{
public uint BanksCount;
public uint Reserved0;
public _Anonymous_e__Union Anonymous;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS
{
public uint AsUINT32;
public _Anonymous_e__Struct Anonymous;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP
{
public uint _bitfield;
public uint HighestFrequencyMhz;
public uint NominalFrequencyMhz;
public uint LowestFrequencyMhz;
public uint FrequencyStepMhz;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_PROCESSOR_PERFMON_FEATURES
{
public _Anonymous_e__Struct Anonymous;
public ulong AsUINT64;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_SCHEDULER_FEATURES
{
public _Anonymous_e__Struct Anonymous;
public ulong AsUINT64;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_CAPABILITY
{
[MarshalAs(UnmanagedType.Bool)] public bool HypervisorPresent;
public WHV_CAPABILITY_FEATURES Features;
public WHV_EXTENDED_VM_EXITS ExtendedVmExits;
public int ProcessorVendor;
public WHV_PROCESSOR_FEATURES ProcessorFeatures;
public WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS SyntheticProcessorFeaturesBanks;
public WHV_PROCESSOR_XSAVE_FEATURES ProcessorXsaveFeatures;
public byte ProcessorClFlushSize;
public ulong ExceptionExitBitmap;
public WHV_X64_MSR_EXIT_BITMAP X64MsrExitBitmap;
public ulong ProcessorClockFrequency;
public ulong InterruptClockFrequency;
public WHV_PROCESSOR_FEATURES_BANKS ProcessorFeaturesBanks;
public WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS GpaRangePopulateFlags;
public WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP ProcessorFrequencyCap;
public WHV_PROCESSOR_PERFMON_FEATURES ProcessorPerfmonFeatures;
public WHV_SCHEDULER_FEATURES SchedulerFeatures;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_CAPABILITY_FEATURES
Public Anonymous As _Anonymous_e__Struct
Public AsUINT64 As ULong
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_EXTENDED_VM_EXITS
Public Anonymous As _Anonymous_e__Struct
Public AsUINT64 As ULong
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_PROCESSOR_FEATURES
Public Anonymous As _Anonymous_e__Struct
Public AsUINT64 As ULong
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS
Public BanksCount As UInteger
Public Reserved0 As UInteger
Public Anonymous As _Anonymous_e__Union
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_PROCESSOR_XSAVE_FEATURES
Public Anonymous As _Anonymous_e__Struct
Public AsUINT64 As ULong
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_X64_MSR_EXIT_BITMAP
Public AsUINT64 As ULong
Public Anonymous As _Anonymous_e__Struct
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_PROCESSOR_FEATURES_BANKS
Public BanksCount As UInteger
Public Reserved0 As UInteger
Public Anonymous As _Anonymous_e__Union
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS
Public AsUINT32 As UInteger
Public Anonymous As _Anonymous_e__Struct
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP
Public _bitfield As UInteger
Public HighestFrequencyMhz As UInteger
Public NominalFrequencyMhz As UInteger
Public LowestFrequencyMhz As UInteger
Public FrequencyStepMhz As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_PROCESSOR_PERFMON_FEATURES
Public Anonymous As _Anonymous_e__Struct
Public AsUINT64 As ULong
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_SCHEDULER_FEATURES
Public Anonymous As _Anonymous_e__Struct
Public AsUINT64 As ULong
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_CAPABILITY
<MarshalAs(UnmanagedType.Bool)> Public HypervisorPresent As Boolean
Public Features As WHV_CAPABILITY_FEATURES
Public ExtendedVmExits As WHV_EXTENDED_VM_EXITS
Public ProcessorVendor As Integer
Public ProcessorFeatures As WHV_PROCESSOR_FEATURES
Public SyntheticProcessorFeaturesBanks As WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS
Public ProcessorXsaveFeatures As WHV_PROCESSOR_XSAVE_FEATURES
Public ProcessorClFlushSize As Byte
Public ExceptionExitBitmap As ULong
Public X64MsrExitBitmap As WHV_X64_MSR_EXIT_BITMAP
Public ProcessorClockFrequency As ULong
Public InterruptClockFrequency As ULong
Public ProcessorFeaturesBanks As WHV_PROCESSOR_FEATURES_BANKS
Public GpaRangePopulateFlags As WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS
Public ProcessorFrequencyCap As WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP
Public ProcessorPerfmonFeatures As WHV_PROCESSOR_PERFMON_FEATURES
Public SchedulerFeatures As WHV_SCHEDULER_FEATURES
End Structureimport ctypes
from ctypes import wintypes
class WHV_CAPABILITY_FEATURES(ctypes.Structure):
_fields_ = [
("Anonymous", _Anonymous_e__Struct),
("AsUINT64", ctypes.c_ulonglong),
]
class WHV_EXTENDED_VM_EXITS(ctypes.Structure):
_fields_ = [
("Anonymous", _Anonymous_e__Struct),
("AsUINT64", ctypes.c_ulonglong),
]
class WHV_PROCESSOR_FEATURES(ctypes.Structure):
_fields_ = [
("Anonymous", _Anonymous_e__Struct),
("AsUINT64", ctypes.c_ulonglong),
]
class WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS(ctypes.Structure):
_fields_ = [
("BanksCount", wintypes.DWORD),
("Reserved0", wintypes.DWORD),
("Anonymous", _Anonymous_e__Union),
]
class WHV_PROCESSOR_XSAVE_FEATURES(ctypes.Structure):
_fields_ = [
("Anonymous", _Anonymous_e__Struct),
("AsUINT64", ctypes.c_ulonglong),
]
class WHV_X64_MSR_EXIT_BITMAP(ctypes.Structure):
_fields_ = [
("AsUINT64", ctypes.c_ulonglong),
("Anonymous", _Anonymous_e__Struct),
]
class WHV_PROCESSOR_FEATURES_BANKS(ctypes.Structure):
_fields_ = [
("BanksCount", wintypes.DWORD),
("Reserved0", wintypes.DWORD),
("Anonymous", _Anonymous_e__Union),
]
class WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS(ctypes.Structure):
_fields_ = [
("AsUINT32", wintypes.DWORD),
("Anonymous", _Anonymous_e__Struct),
]
class WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP(ctypes.Structure):
_fields_ = [
("_bitfield", wintypes.DWORD),
("HighestFrequencyMhz", wintypes.DWORD),
("NominalFrequencyMhz", wintypes.DWORD),
("LowestFrequencyMhz", wintypes.DWORD),
("FrequencyStepMhz", wintypes.DWORD),
]
class WHV_PROCESSOR_PERFMON_FEATURES(ctypes.Structure):
_fields_ = [
("Anonymous", _Anonymous_e__Struct),
("AsUINT64", ctypes.c_ulonglong),
]
class WHV_SCHEDULER_FEATURES(ctypes.Structure):
_fields_ = [
("Anonymous", _Anonymous_e__Struct),
("AsUINT64", ctypes.c_ulonglong),
]
class WHV_CAPABILITY(ctypes.Structure):
_fields_ = [
("HypervisorPresent", wintypes.BOOL),
("Features", WHV_CAPABILITY_FEATURES),
("ExtendedVmExits", WHV_EXTENDED_VM_EXITS),
("ProcessorVendor", ctypes.c_int),
("ProcessorFeatures", WHV_PROCESSOR_FEATURES),
("SyntheticProcessorFeaturesBanks", WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS),
("ProcessorXsaveFeatures", WHV_PROCESSOR_XSAVE_FEATURES),
("ProcessorClFlushSize", ctypes.c_ubyte),
("ExceptionExitBitmap", ctypes.c_ulonglong),
("X64MsrExitBitmap", WHV_X64_MSR_EXIT_BITMAP),
("ProcessorClockFrequency", ctypes.c_ulonglong),
("InterruptClockFrequency", ctypes.c_ulonglong),
("ProcessorFeaturesBanks", WHV_PROCESSOR_FEATURES_BANKS),
("GpaRangePopulateFlags", WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS),
("ProcessorFrequencyCap", WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP),
("ProcessorPerfmonFeatures", WHV_PROCESSOR_PERFMON_FEATURES),
("SchedulerFeatures", WHV_SCHEDULER_FEATURES),
]#[repr(C)]
pub struct WHV_CAPABILITY_FEATURES {
pub Anonymous: _Anonymous_e__Struct,
pub AsUINT64: u64,
}
#[repr(C)]
pub struct WHV_EXTENDED_VM_EXITS {
pub Anonymous: _Anonymous_e__Struct,
pub AsUINT64: u64,
}
#[repr(C)]
pub struct WHV_PROCESSOR_FEATURES {
pub Anonymous: _Anonymous_e__Struct,
pub AsUINT64: u64,
}
#[repr(C)]
pub struct WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS {
pub BanksCount: u32,
pub Reserved0: u32,
pub Anonymous: _Anonymous_e__Union,
}
#[repr(C)]
pub struct WHV_PROCESSOR_XSAVE_FEATURES {
pub Anonymous: _Anonymous_e__Struct,
pub AsUINT64: u64,
}
#[repr(C)]
pub struct WHV_X64_MSR_EXIT_BITMAP {
pub AsUINT64: u64,
pub Anonymous: _Anonymous_e__Struct,
}
#[repr(C)]
pub struct WHV_PROCESSOR_FEATURES_BANKS {
pub BanksCount: u32,
pub Reserved0: u32,
pub Anonymous: _Anonymous_e__Union,
}
#[repr(C)]
pub struct WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS {
pub AsUINT32: u32,
pub Anonymous: _Anonymous_e__Struct,
}
#[repr(C)]
pub struct WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP {
pub _bitfield: u32,
pub HighestFrequencyMhz: u32,
pub NominalFrequencyMhz: u32,
pub LowestFrequencyMhz: u32,
pub FrequencyStepMhz: u32,
}
#[repr(C)]
pub struct WHV_PROCESSOR_PERFMON_FEATURES {
pub Anonymous: _Anonymous_e__Struct,
pub AsUINT64: u64,
}
#[repr(C)]
pub struct WHV_SCHEDULER_FEATURES {
pub Anonymous: _Anonymous_e__Struct,
pub AsUINT64: u64,
}
#[repr(C)]
pub struct WHV_CAPABILITY {
pub HypervisorPresent: i32,
pub Features: WHV_CAPABILITY_FEATURES,
pub ExtendedVmExits: WHV_EXTENDED_VM_EXITS,
pub ProcessorVendor: i32,
pub ProcessorFeatures: WHV_PROCESSOR_FEATURES,
pub SyntheticProcessorFeaturesBanks: WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS,
pub ProcessorXsaveFeatures: WHV_PROCESSOR_XSAVE_FEATURES,
pub ProcessorClFlushSize: u8,
pub ExceptionExitBitmap: u64,
pub X64MsrExitBitmap: WHV_X64_MSR_EXIT_BITMAP,
pub ProcessorClockFrequency: u64,
pub InterruptClockFrequency: u64,
pub ProcessorFeaturesBanks: WHV_PROCESSOR_FEATURES_BANKS,
pub GpaRangePopulateFlags: WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS,
pub ProcessorFrequencyCap: WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP,
pub ProcessorPerfmonFeatures: WHV_PROCESSOR_PERFMON_FEATURES,
pub SchedulerFeatures: WHV_SCHEDULER_FEATURES,
}import "golang.org/x/sys/windows"
type WHV_CAPABILITY_FEATURES struct {
Anonymous _Anonymous_e__Struct
AsUINT64 uint64
}
type WHV_EXTENDED_VM_EXITS struct {
Anonymous _Anonymous_e__Struct
AsUINT64 uint64
}
type WHV_PROCESSOR_FEATURES struct {
Anonymous _Anonymous_e__Struct
AsUINT64 uint64
}
type WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS struct {
BanksCount uint32
Reserved0 uint32
Anonymous _Anonymous_e__Union
}
type WHV_PROCESSOR_XSAVE_FEATURES struct {
Anonymous _Anonymous_e__Struct
AsUINT64 uint64
}
type WHV_X64_MSR_EXIT_BITMAP struct {
AsUINT64 uint64
Anonymous _Anonymous_e__Struct
}
type WHV_PROCESSOR_FEATURES_BANKS struct {
BanksCount uint32
Reserved0 uint32
Anonymous _Anonymous_e__Union
}
type WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS struct {
AsUINT32 uint32
Anonymous _Anonymous_e__Struct
}
type WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP struct {
_bitfield uint32
HighestFrequencyMhz uint32
NominalFrequencyMhz uint32
LowestFrequencyMhz uint32
FrequencyStepMhz uint32
}
type WHV_PROCESSOR_PERFMON_FEATURES struct {
Anonymous _Anonymous_e__Struct
AsUINT64 uint64
}
type WHV_SCHEDULER_FEATURES struct {
Anonymous _Anonymous_e__Struct
AsUINT64 uint64
}
type WHV_CAPABILITY struct {
HypervisorPresent int32
Features WHV_CAPABILITY_FEATURES
ExtendedVmExits WHV_EXTENDED_VM_EXITS
ProcessorVendor int32
ProcessorFeatures WHV_PROCESSOR_FEATURES
SyntheticProcessorFeaturesBanks WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS
ProcessorXsaveFeatures WHV_PROCESSOR_XSAVE_FEATURES
ProcessorClFlushSize byte
ExceptionExitBitmap uint64
X64MsrExitBitmap WHV_X64_MSR_EXIT_BITMAP
ProcessorClockFrequency uint64
InterruptClockFrequency uint64
ProcessorFeaturesBanks WHV_PROCESSOR_FEATURES_BANKS
GpaRangePopulateFlags WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS
ProcessorFrequencyCap WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP
ProcessorPerfmonFeatures WHV_PROCESSOR_PERFMON_FEATURES
SchedulerFeatures WHV_SCHEDULER_FEATURES
}type
WHV_CAPABILITY_FEATURES = record
Anonymous: _Anonymous_e__Struct;
AsUINT64: UInt64;
end;
WHV_EXTENDED_VM_EXITS = record
Anonymous: _Anonymous_e__Struct;
AsUINT64: UInt64;
end;
WHV_PROCESSOR_FEATURES = record
Anonymous: _Anonymous_e__Struct;
AsUINT64: UInt64;
end;
WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS = record
BanksCount: DWORD;
Reserved0: DWORD;
Anonymous: _Anonymous_e__Union;
end;
WHV_PROCESSOR_XSAVE_FEATURES = record
Anonymous: _Anonymous_e__Struct;
AsUINT64: UInt64;
end;
WHV_X64_MSR_EXIT_BITMAP = record
AsUINT64: UInt64;
Anonymous: _Anonymous_e__Struct;
end;
WHV_PROCESSOR_FEATURES_BANKS = record
BanksCount: DWORD;
Reserved0: DWORD;
Anonymous: _Anonymous_e__Union;
end;
WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS = record
AsUINT32: DWORD;
Anonymous: _Anonymous_e__Struct;
end;
WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP = record
_bitfield: DWORD;
HighestFrequencyMhz: DWORD;
NominalFrequencyMhz: DWORD;
LowestFrequencyMhz: DWORD;
FrequencyStepMhz: DWORD;
end;
WHV_PROCESSOR_PERFMON_FEATURES = record
Anonymous: _Anonymous_e__Struct;
AsUINT64: UInt64;
end;
WHV_SCHEDULER_FEATURES = record
Anonymous: _Anonymous_e__Struct;
AsUINT64: UInt64;
end;
WHV_CAPABILITY = record
HypervisorPresent: BOOL;
Features: WHV_CAPABILITY_FEATURES;
ExtendedVmExits: WHV_EXTENDED_VM_EXITS;
ProcessorVendor: Integer;
ProcessorFeatures: WHV_PROCESSOR_FEATURES;
SyntheticProcessorFeaturesBanks: WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS;
ProcessorXsaveFeatures: WHV_PROCESSOR_XSAVE_FEATURES;
ProcessorClFlushSize: Byte;
ExceptionExitBitmap: UInt64;
X64MsrExitBitmap: WHV_X64_MSR_EXIT_BITMAP;
ProcessorClockFrequency: UInt64;
InterruptClockFrequency: UInt64;
ProcessorFeaturesBanks: WHV_PROCESSOR_FEATURES_BANKS;
GpaRangePopulateFlags: WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS;
ProcessorFrequencyCap: WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP;
ProcessorPerfmonFeatures: WHV_PROCESSOR_PERFMON_FEATURES;
SchedulerFeatures: WHV_SCHEDULER_FEATURES;
end;const WHV_CAPABILITY_FEATURES = extern struct {
Anonymous: _Anonymous_e__Struct,
AsUINT64: u64,
};
const WHV_EXTENDED_VM_EXITS = extern struct {
Anonymous: _Anonymous_e__Struct,
AsUINT64: u64,
};
const WHV_PROCESSOR_FEATURES = extern struct {
Anonymous: _Anonymous_e__Struct,
AsUINT64: u64,
};
const WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS = extern struct {
BanksCount: u32,
Reserved0: u32,
Anonymous: _Anonymous_e__Union,
};
const WHV_PROCESSOR_XSAVE_FEATURES = extern struct {
Anonymous: _Anonymous_e__Struct,
AsUINT64: u64,
};
const WHV_X64_MSR_EXIT_BITMAP = extern struct {
AsUINT64: u64,
Anonymous: _Anonymous_e__Struct,
};
const WHV_PROCESSOR_FEATURES_BANKS = extern struct {
BanksCount: u32,
Reserved0: u32,
Anonymous: _Anonymous_e__Union,
};
const WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS = extern struct {
AsUINT32: u32,
Anonymous: _Anonymous_e__Struct,
};
const WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP = extern struct {
_bitfield: u32,
HighestFrequencyMhz: u32,
NominalFrequencyMhz: u32,
LowestFrequencyMhz: u32,
FrequencyStepMhz: u32,
};
const WHV_PROCESSOR_PERFMON_FEATURES = extern struct {
Anonymous: _Anonymous_e__Struct,
AsUINT64: u64,
};
const WHV_SCHEDULER_FEATURES = extern struct {
Anonymous: _Anonymous_e__Struct,
AsUINT64: u64,
};
const WHV_CAPABILITY = extern struct {
HypervisorPresent: i32,
Features: WHV_CAPABILITY_FEATURES,
ExtendedVmExits: WHV_EXTENDED_VM_EXITS,
ProcessorVendor: i32,
ProcessorFeatures: WHV_PROCESSOR_FEATURES,
SyntheticProcessorFeaturesBanks: WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS,
ProcessorXsaveFeatures: WHV_PROCESSOR_XSAVE_FEATURES,
ProcessorClFlushSize: u8,
ExceptionExitBitmap: u64,
X64MsrExitBitmap: WHV_X64_MSR_EXIT_BITMAP,
ProcessorClockFrequency: u64,
InterruptClockFrequency: u64,
ProcessorFeaturesBanks: WHV_PROCESSOR_FEATURES_BANKS,
GpaRangePopulateFlags: WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS,
ProcessorFrequencyCap: WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP,
ProcessorPerfmonFeatures: WHV_PROCESSOR_PERFMON_FEATURES,
SchedulerFeatures: WHV_SCHEDULER_FEATURES,
};type
WHV_CAPABILITY_FEATURES {.bycopy.} = object
Anonymous: _Anonymous_e__Struct
AsUINT64: uint64
WHV_EXTENDED_VM_EXITS {.bycopy.} = object
Anonymous: _Anonymous_e__Struct
AsUINT64: uint64
WHV_PROCESSOR_FEATURES {.bycopy.} = object
Anonymous: _Anonymous_e__Struct
AsUINT64: uint64
WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS {.bycopy.} = object
BanksCount: uint32
Reserved0: uint32
Anonymous: _Anonymous_e__Union
WHV_PROCESSOR_XSAVE_FEATURES {.bycopy.} = object
Anonymous: _Anonymous_e__Struct
AsUINT64: uint64
WHV_X64_MSR_EXIT_BITMAP {.bycopy.} = object
AsUINT64: uint64
Anonymous: _Anonymous_e__Struct
WHV_PROCESSOR_FEATURES_BANKS {.bycopy.} = object
BanksCount: uint32
Reserved0: uint32
Anonymous: _Anonymous_e__Union
WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS {.bycopy.} = object
AsUINT32: uint32
Anonymous: _Anonymous_e__Struct
WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP {.bycopy.} = object
_bitfield: uint32
HighestFrequencyMhz: uint32
NominalFrequencyMhz: uint32
LowestFrequencyMhz: uint32
FrequencyStepMhz: uint32
WHV_PROCESSOR_PERFMON_FEATURES {.bycopy.} = object
Anonymous: _Anonymous_e__Struct
AsUINT64: uint64
WHV_SCHEDULER_FEATURES {.bycopy.} = object
Anonymous: _Anonymous_e__Struct
AsUINT64: uint64
WHV_CAPABILITY {.bycopy.} = object
HypervisorPresent: int32
Features: WHV_CAPABILITY_FEATURES
ExtendedVmExits: WHV_EXTENDED_VM_EXITS
ProcessorVendor: int32
ProcessorFeatures: WHV_PROCESSOR_FEATURES
SyntheticProcessorFeaturesBanks: WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS
ProcessorXsaveFeatures: WHV_PROCESSOR_XSAVE_FEATURES
ProcessorClFlushSize: uint8
ExceptionExitBitmap: uint64
X64MsrExitBitmap: WHV_X64_MSR_EXIT_BITMAP
ProcessorClockFrequency: uint64
InterruptClockFrequency: uint64
ProcessorFeaturesBanks: WHV_PROCESSOR_FEATURES_BANKS
GpaRangePopulateFlags: WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS
ProcessorFrequencyCap: WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP
ProcessorPerfmonFeatures: WHV_PROCESSOR_PERFMON_FEATURES
SchedulerFeatures: WHV_SCHEDULER_FEATURESstruct WHV_CAPABILITY_FEATURES
{
_Anonymous_e__Struct Anonymous;
ulong AsUINT64;
}
struct WHV_EXTENDED_VM_EXITS
{
_Anonymous_e__Struct Anonymous;
ulong AsUINT64;
}
struct WHV_PROCESSOR_FEATURES
{
_Anonymous_e__Struct Anonymous;
ulong AsUINT64;
}
struct WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS
{
uint BanksCount;
uint Reserved0;
_Anonymous_e__Union Anonymous;
}
struct WHV_PROCESSOR_XSAVE_FEATURES
{
_Anonymous_e__Struct Anonymous;
ulong AsUINT64;
}
struct WHV_X64_MSR_EXIT_BITMAP
{
ulong AsUINT64;
_Anonymous_e__Struct Anonymous;
}
struct WHV_PROCESSOR_FEATURES_BANKS
{
uint BanksCount;
uint Reserved0;
_Anonymous_e__Union Anonymous;
}
struct WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS
{
uint AsUINT32;
_Anonymous_e__Struct Anonymous;
}
struct WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP
{
uint _bitfield;
uint HighestFrequencyMhz;
uint NominalFrequencyMhz;
uint LowestFrequencyMhz;
uint FrequencyStepMhz;
}
struct WHV_PROCESSOR_PERFMON_FEATURES
{
_Anonymous_e__Struct Anonymous;
ulong AsUINT64;
}
struct WHV_SCHEDULER_FEATURES
{
_Anonymous_e__Struct Anonymous;
ulong AsUINT64;
}
struct WHV_CAPABILITY
{
int HypervisorPresent;
WHV_CAPABILITY_FEATURES Features;
WHV_EXTENDED_VM_EXITS ExtendedVmExits;
int ProcessorVendor;
WHV_PROCESSOR_FEATURES ProcessorFeatures;
WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS SyntheticProcessorFeaturesBanks;
WHV_PROCESSOR_XSAVE_FEATURES ProcessorXsaveFeatures;
ubyte ProcessorClFlushSize;
ulong ExceptionExitBitmap;
WHV_X64_MSR_EXIT_BITMAP X64MsrExitBitmap;
ulong ProcessorClockFrequency;
ulong InterruptClockFrequency;
WHV_PROCESSOR_FEATURES_BANKS ProcessorFeaturesBanks;
WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS GpaRangePopulateFlags;
WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP ProcessorFrequencyCap;
WHV_PROCESSOR_PERFMON_FEATURES ProcessorPerfmonFeatures;
WHV_SCHEDULER_FEATURES SchedulerFeatures;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WHV_CAPABILITY サイズ: 24 バイト(x64)
dim st, 6 ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; HypervisorPresent : BOOL (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; Features : WHV_CAPABILITY_FEATURES (+0, 8byte) varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; ExtendedVmExits : WHV_EXTENDED_VM_EXITS (+0, 8byte) varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; ProcessorVendor : WHV_PROCESSOR_VENDOR (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; ProcessorFeatures : WHV_PROCESSOR_FEATURES (+0, 8byte) varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; SyntheticProcessorFeaturesBanks : WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS (+0, 16byte) varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; ProcessorXsaveFeatures : WHV_PROCESSOR_XSAVE_FEATURES (+0, 8byte) varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; ProcessorClFlushSize : BYTE (+0, 1byte) poke st,0,値 / 値 = peek(st,0)
; ExceptionExitBitmap : ULONGLONG (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; X64MsrExitBitmap : WHV_X64_MSR_EXIT_BITMAP (+0, 8byte) varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; ProcessorClockFrequency : ULONGLONG (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; InterruptClockFrequency : ULONGLONG (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; ProcessorFeaturesBanks : WHV_PROCESSOR_FEATURES_BANKS (+0, 24byte) varptr(st)+0 を基点に操作(24byte:入れ子/配列)
; GpaRangePopulateFlags : WHV_ADVISE_GPA_RANGE_POPULATE_FLAGS (+0, 4byte) varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; ProcessorFrequencyCap : WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP (+0, 20byte) varptr(st)+0 を基点に操作(20byte:入れ子/配列)
; ProcessorPerfmonFeatures : WHV_PROCESSOR_PERFMON_FEATURES (+0, 8byte) varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; SchedulerFeatures : WHV_SCHEDULER_FEATURES (+0, 8byte) varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS
#field int BanksCount
#field int Reserved0
#field byte Anonymous 8
#endstruct
#defstruct global WHV_PROCESSOR_FEATURES_BANKS
#field int BanksCount
#field int Reserved0
#field byte Anonymous 16
#endstruct
#defstruct global WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP
#field int _bitfield
#field int HighestFrequencyMhz
#field int NominalFrequencyMhz
#field int LowestFrequencyMhz
#field int FrequencyStepMhz
#endstruct
#defstruct global WHV_CAPABILITY
#field bool HypervisorPresent
#field byte Features 8
#field byte ExtendedVmExits 8
#field int ProcessorVendor
#field byte ProcessorFeatures 8
#field WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS SyntheticProcessorFeaturesBanks
#field byte ProcessorXsaveFeatures 8
#field byte ProcessorClFlushSize
#field int64 ExceptionExitBitmap
#field byte X64MsrExitBitmap 8
#field int64 ProcessorClockFrequency
#field int64 InterruptClockFrequency
#field WHV_PROCESSOR_FEATURES_BANKS ProcessorFeaturesBanks
#field byte GpaRangePopulateFlags 4
#field WHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP ProcessorFrequencyCap
#field byte ProcessorPerfmonFeatures 8
#field byte SchedulerFeatures 8
#endstruct
stdim st, WHV_CAPABILITY ; NSTRUCT 変数を確保
st->HypervisorPresent = 100
mes "HypervisorPresent=" + st->HypervisorPresent
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。