Win32 API 日本語リファレンス
ホームSystem.Hypervisor › WHV_CAPABILITY

WHV_CAPABILITY

共用体
サイズx64: 24 バイト / x86: 24 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
HypervisorPresentBOOL4+0+0ハイパーバイザが存在し利用可能かを示すBOOL。WHvCapabilityCodeHypervisorPresent照会時に使う。
FeaturesWHV_CAPABILITY_FEATURES8+0+0プラットフォームがサポートする機能集合を示すWHV_CAPABILITY_FEATURESである。
ExtendedVmExitsWHV_EXTENDED_VM_EXITS8+0+0サポートされる拡張VM終了種別を示すWHV_EXTENDED_VM_EXITSである。
ProcessorVendorWHV_PROCESSOR_VENDOR4+0+0プロセッサのベンダー種別を示すWHV_PROCESSOR_VENDOR(Intel/AMD等)である。
ProcessorFeaturesWHV_PROCESSOR_FEATURES8+0+0サポートされるプロセッサ機能を示すWHV_PROCESSOR_FEATURESである。
SyntheticProcessorFeaturesBanksWHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS16+0+0サポートされる合成プロセッサ機能をバンク形式で示す。
ProcessorXsaveFeaturesWHV_PROCESSOR_XSAVE_FEATURES8+0+0サポートされるXSAVE関連プロセッサ機能を示す。
ProcessorClFlushSizeBYTE1+0+0CLFLUSH命令のキャッシュラインサイズ(8バイト単位)を示すBYTEである。
ExceptionExitBitmapULONGLONG8+0+0VM終了を発生させる例外ベクタのビットマップを示すULONGLONGである。
X64MsrExitBitmapWHV_X64_MSR_EXIT_BITMAP8+0+0MSRアクセスによるVM終了条件を示すWHV_X64_MSR_EXIT_BITMAPである。
ProcessorClockFrequencyULONGLONG8+0+0プロセッサクロック周波数をHz単位で示すULONGLONGである。
InterruptClockFrequencyULONGLONG8+0+0割り込みクロック周波数をHz単位で示すULONGLONGである。
ProcessorFeaturesBanksWHV_PROCESSOR_FEATURES_BANKS24+0+0サポートされるプロセッサ機能をバンク形式で示すWHV_PROCESSOR_FEATURES_BANKSである。
GpaRangePopulateFlagsWHV_ADVISE_GPA_RANGE_POPULATE_FLAGS4+0+0GPA範囲ポピュレートでサポートされるフラグを示す。
ProcessorFrequencyCapWHV_CAPABILITY_PROCESSOR_FREQUENCY_CAP20+0+0プロセッサ周波数制御の能力を示すWHV_CAPABILITY_PROCESSOR_FREQUENCY_CAPである。
ProcessorPerfmonFeaturesWHV_PROCESSOR_PERFMON_FEATURES8+0+0サポートされるパフォーマンスモニタリング機能を示す。
SchedulerFeaturesWHV_SCHEDULER_FEATURES8+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 Structure
import 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_FEATURES
struct 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 非対応)。必要に応じ手動でアクセス。