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

WHV_PARTITION_PROPERTY

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

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

フィールド

フィールドサイズx64x86説明
ExtendedVmExitsWHV_EXTENDED_VM_EXITS8+0+0パーティションで有効にする拡張VM終了種別を示す。
ProcessorFeaturesWHV_PROCESSOR_FEATURES8+0+0仮想プロセッサに公開するプロセッサ機能を示す。
SyntheticProcessorFeaturesBanksWHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS16+0+0仮想プロセッサに公開する合成プロセッサ機能をバンク形式で示す。
ProcessorXsaveFeaturesWHV_PROCESSOR_XSAVE_FEATURES8+0+0仮想プロセッサに公開するXSAVE関連機能を示す。
ProcessorClFlushSizeBYTE1+0+0公開するCLFLUSHキャッシュラインサイズ(8バイト単位)を示すBYTEである。
ProcessorCountDWORD4+0+0パーティションの仮想プロセッサ数を示すDWORDである。
CpuidExitListDWORD4+0+0VM終了を発生させるCPUIDリーフ番号のリスト要素である。
CpuidResultListWHV_X64_CPUID_RESULT32+0+0CPUID結果を上書き設定するWHV_X64_CPUID_RESULTのリスト要素である。
CpuidResultList2WHV_X64_CPUID_RESULT248+0+0拡張形式のCPUID結果設定WHV_X64_CPUID_RESULT2のリスト要素である。
MsrActionListWHV_MSR_ACTION_ENTRY8+0+0MSRアクセス動作を定義するWHV_MSR_ACTION_ENTRYのリスト要素である。
UnimplementedMsrActionWHV_MSR_ACTION4+0+0未実装MSRへのアクセス時に取る既定動作を示すWHV_MSR_ACTIONである。
ExceptionExitBitmapULONGLONG8+0+0VM終了を発生させる例外ベクタのビットマップを示すULONGLONGである。
LocalApicEmulationModeWHV_X64_LOCAL_APIC_EMULATION_MODE4+0+0ローカルAPICのエミュレーションモードを示すWHV_X64_LOCAL_APIC_EMULATION_MODEである。
SeparateSecurityDomainBOOL4+0+0パーティションを独立したセキュリティドメインにするかを示すBOOLである。
NestedVirtualizationBOOL4+0+0ネステッド仮想化を有効にするかを示すBOOLである。
X64MsrExitBitmapWHV_X64_MSR_EXIT_BITMAP8+0+0MSRアクセスによるVM終了条件を示すWHV_X64_MSR_EXIT_BITMAPである。
ProcessorClockFrequencyULONGLONG8+0+0公開するプロセッサクロック周波数をHz単位で示すULONGLONGである。
InterruptClockFrequencyULONGLONG8+0+0公開する割り込みクロック周波数をHz単位で示すULONGLONGである。
ApicRemoteReadBOOL4+0+0APICレジスタのリモート読み取りを許可するかを示すBOOLである。
ProcessorFeaturesBanksWHV_PROCESSOR_FEATURES_BANKS24+0+0仮想プロセッサに公開するプロセッサ機能をバンク形式で示す。
ReferenceTimeULONGLONG8+0+0パーティションの基準時間(100ns単位)を示すULONGLONGである。
PrimaryNumaNodeWORD2+0+0パーティションの主NUMAノード番号を示すWORDである。
CpuReserveDWORD4+0+0CPU予約割合を示すDWORD。最低限保証する処理能力を表す。
CpuCapDWORD4+0+0CPU使用率の上限を示すDWORDである。
CpuWeightDWORD4+0+0他パーティションに対する相対的なCPU割り当て重みを示すDWORDである。
CpuGroupIdULONGLONG8+0+0パーティションが所属するCPUグループのIDを示すULONGLONGである。
ProcessorFrequencyCapDWORD4+0+0プロセッサ周波数の上限をMHz単位で示すDWORDである。
AllowDeviceAssignmentBOOL4+0+0物理デバイスの割り当て(DDA)を許可するかを示すBOOLである。
ProcessorPerfmonFeaturesWHV_PROCESSOR_PERFMON_FEATURES8+0+0仮想プロセッサに公開するパフォーマンスモニタリング機能を示す。
DisableSmtBOOL4+0+0同時マルチスレッディング(SMT)を無効化するかを示すBOOLである。

各言語での定義

#include <windows.h>

// 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_CPUID_RESULT  (x64 32 / x86 32 バイト)
typedef struct WHV_X64_CPUID_RESULT {
    DWORD Function;
    DWORD Reserved[3];
    DWORD Eax;
    DWORD Ebx;
    DWORD Ecx;
    DWORD Edx;
} WHV_X64_CPUID_RESULT;

// WHV_CPUID_OUTPUT  (x64 16 / x86 16 バイト)
typedef struct WHV_CPUID_OUTPUT {
    DWORD Eax;
    DWORD Ebx;
    DWORD Ecx;
    DWORD Edx;
} WHV_CPUID_OUTPUT;

// WHV_X64_CPUID_RESULT2  (x64 48 / x86 48 バイト)
typedef struct WHV_X64_CPUID_RESULT2 {
    DWORD Function;
    DWORD Index;
    DWORD VpIndex;
    WHV_X64_CPUID_RESULT2_FLAGS Flags;
    WHV_CPUID_OUTPUT Output;
    WHV_CPUID_OUTPUT Mask;
} WHV_X64_CPUID_RESULT2;

// WHV_MSR_ACTION_ENTRY  (x64 8 / x86 8 バイト)
typedef struct WHV_MSR_ACTION_ENTRY {
    DWORD Index;
    BYTE ReadAction;
    BYTE WriteAction;
    WORD Reserved;
} WHV_MSR_ACTION_ENTRY;

// 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_PROCESSOR_PERFMON_FEATURES  (x64 8 / x86 8 バイト)
typedef struct WHV_PROCESSOR_PERFMON_FEATURES {
    _Anonymous_e__Struct Anonymous;
    ULONGLONG AsUINT64;
} WHV_PROCESSOR_PERFMON_FEATURES;

// WHV_PARTITION_PROPERTY  (x64 48 / x86 48 バイト)
typedef struct WHV_PARTITION_PROPERTY {
    WHV_EXTENDED_VM_EXITS ExtendedVmExits;
    WHV_PROCESSOR_FEATURES ProcessorFeatures;
    WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS SyntheticProcessorFeaturesBanks;
    WHV_PROCESSOR_XSAVE_FEATURES ProcessorXsaveFeatures;
    BYTE ProcessorClFlushSize;
    DWORD ProcessorCount;
    DWORD CpuidExitList[1];
    WHV_X64_CPUID_RESULT CpuidResultList[1];
    WHV_X64_CPUID_RESULT2 CpuidResultList2[1];
    WHV_MSR_ACTION_ENTRY MsrActionList[1];
    WHV_MSR_ACTION UnimplementedMsrAction;
    ULONGLONG ExceptionExitBitmap;
    WHV_X64_LOCAL_APIC_EMULATION_MODE LocalApicEmulationMode;
    BOOL SeparateSecurityDomain;
    BOOL NestedVirtualization;
    WHV_X64_MSR_EXIT_BITMAP X64MsrExitBitmap;
    ULONGLONG ProcessorClockFrequency;
    ULONGLONG InterruptClockFrequency;
    BOOL ApicRemoteRead;
    WHV_PROCESSOR_FEATURES_BANKS ProcessorFeaturesBanks;
    ULONGLONG ReferenceTime;
    WORD PrimaryNumaNode;
    DWORD CpuReserve;
    DWORD CpuCap;
    DWORD CpuWeight;
    ULONGLONG CpuGroupId;
    DWORD ProcessorFrequencyCap;
    BOOL AllowDeviceAssignment;
    WHV_PROCESSOR_PERFMON_FEATURES ProcessorPerfmonFeatures;
    BOOL DisableSmt;
} WHV_PARTITION_PROPERTY;
using System;
using System.Runtime.InteropServices;

[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_CPUID_RESULT
{
    public uint Function;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public uint[] Reserved;
    public uint Eax;
    public uint Ebx;
    public uint Ecx;
    public uint Edx;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_CPUID_OUTPUT
{
    public uint Eax;
    public uint Ebx;
    public uint Ecx;
    public uint Edx;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_X64_CPUID_RESULT2
{
    public uint Function;
    public uint Index;
    public uint VpIndex;
    public int Flags;
    public WHV_CPUID_OUTPUT Output;
    public WHV_CPUID_OUTPUT Mask;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_MSR_ACTION_ENTRY
{
    public uint Index;
    public byte ReadAction;
    public byte WriteAction;
    public ushort Reserved;
}

[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_PROCESSOR_PERFMON_FEATURES
{
    public _Anonymous_e__Struct Anonymous;
    public ulong AsUINT64;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_PARTITION_PROPERTY
{
    public WHV_EXTENDED_VM_EXITS ExtendedVmExits;
    public WHV_PROCESSOR_FEATURES ProcessorFeatures;
    public WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS SyntheticProcessorFeaturesBanks;
    public WHV_PROCESSOR_XSAVE_FEATURES ProcessorXsaveFeatures;
    public byte ProcessorClFlushSize;
    public uint ProcessorCount;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] public uint[] CpuidExitList;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] public WHV_X64_CPUID_RESULT[] CpuidResultList;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] public WHV_X64_CPUID_RESULT2[] CpuidResultList2;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)] public WHV_MSR_ACTION_ENTRY[] MsrActionList;
    public int UnimplementedMsrAction;
    public ulong ExceptionExitBitmap;
    public int LocalApicEmulationMode;
    [MarshalAs(UnmanagedType.Bool)] public bool SeparateSecurityDomain;
    [MarshalAs(UnmanagedType.Bool)] public bool NestedVirtualization;
    public WHV_X64_MSR_EXIT_BITMAP X64MsrExitBitmap;
    public ulong ProcessorClockFrequency;
    public ulong InterruptClockFrequency;
    [MarshalAs(UnmanagedType.Bool)] public bool ApicRemoteRead;
    public WHV_PROCESSOR_FEATURES_BANKS ProcessorFeaturesBanks;
    public ulong ReferenceTime;
    public ushort PrimaryNumaNode;
    public uint CpuReserve;
    public uint CpuCap;
    public uint CpuWeight;
    public ulong CpuGroupId;
    public uint ProcessorFrequencyCap;
    [MarshalAs(UnmanagedType.Bool)] public bool AllowDeviceAssignment;
    public WHV_PROCESSOR_PERFMON_FEATURES ProcessorPerfmonFeatures;
    [MarshalAs(UnmanagedType.Bool)] public bool DisableSmt;
}
Imports System.Runtime.InteropServices

<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_CPUID_RESULT
    Public Function As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=3)> Public Reserved() As UInteger
    Public Eax As UInteger
    Public Ebx As UInteger
    Public Ecx As UInteger
    Public Edx As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_CPUID_OUTPUT
    Public Eax As UInteger
    Public Ebx As UInteger
    Public Ecx As UInteger
    Public Edx As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_X64_CPUID_RESULT2
    Public Function As UInteger
    Public Index As UInteger
    Public VpIndex As UInteger
    Public Flags As Integer
    Public Output As WHV_CPUID_OUTPUT
    Public Mask As WHV_CPUID_OUTPUT
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_MSR_ACTION_ENTRY
    Public Index As UInteger
    Public ReadAction As Byte
    Public WriteAction As Byte
    Public Reserved As UShort
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_PROCESSOR_PERFMON_FEATURES
    Public Anonymous As _Anonymous_e__Struct
    Public AsUINT64 As ULong
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_PARTITION_PROPERTY
    Public ExtendedVmExits As WHV_EXTENDED_VM_EXITS
    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 ProcessorCount As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=1)> Public CpuidExitList() As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=1)> Public CpuidResultList() As WHV_X64_CPUID_RESULT
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=1)> Public CpuidResultList2() As WHV_X64_CPUID_RESULT2
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=1)> Public MsrActionList() As WHV_MSR_ACTION_ENTRY
    Public UnimplementedMsrAction As Integer
    Public ExceptionExitBitmap As ULong
    Public LocalApicEmulationMode As Integer
    <MarshalAs(UnmanagedType.Bool)> Public SeparateSecurityDomain As Boolean
    <MarshalAs(UnmanagedType.Bool)> Public NestedVirtualization As Boolean
    Public X64MsrExitBitmap As WHV_X64_MSR_EXIT_BITMAP
    Public ProcessorClockFrequency As ULong
    Public InterruptClockFrequency As ULong
    <MarshalAs(UnmanagedType.Bool)> Public ApicRemoteRead As Boolean
    Public ProcessorFeaturesBanks As WHV_PROCESSOR_FEATURES_BANKS
    Public ReferenceTime As ULong
    Public PrimaryNumaNode As UShort
    Public CpuReserve As UInteger
    Public CpuCap As UInteger
    Public CpuWeight As UInteger
    Public CpuGroupId As ULong
    Public ProcessorFrequencyCap As UInteger
    <MarshalAs(UnmanagedType.Bool)> Public AllowDeviceAssignment As Boolean
    Public ProcessorPerfmonFeatures As WHV_PROCESSOR_PERFMON_FEATURES
    <MarshalAs(UnmanagedType.Bool)> Public DisableSmt As Boolean
End Structure
import ctypes
from ctypes import wintypes

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_CPUID_RESULT(ctypes.Structure):
    _fields_ = [
        ("Function", wintypes.DWORD),
        ("Reserved", wintypes.DWORD * 3),
        ("Eax", wintypes.DWORD),
        ("Ebx", wintypes.DWORD),
        ("Ecx", wintypes.DWORD),
        ("Edx", wintypes.DWORD),
    ]

class WHV_CPUID_OUTPUT(ctypes.Structure):
    _fields_ = [
        ("Eax", wintypes.DWORD),
        ("Ebx", wintypes.DWORD),
        ("Ecx", wintypes.DWORD),
        ("Edx", wintypes.DWORD),
    ]

class WHV_X64_CPUID_RESULT2(ctypes.Structure):
    _fields_ = [
        ("Function", wintypes.DWORD),
        ("Index", wintypes.DWORD),
        ("VpIndex", wintypes.DWORD),
        ("Flags", ctypes.c_int),
        ("Output", WHV_CPUID_OUTPUT),
        ("Mask", WHV_CPUID_OUTPUT),
    ]

class WHV_MSR_ACTION_ENTRY(ctypes.Structure):
    _fields_ = [
        ("Index", wintypes.DWORD),
        ("ReadAction", ctypes.c_ubyte),
        ("WriteAction", ctypes.c_ubyte),
        ("Reserved", ctypes.c_ushort),
    ]

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_PROCESSOR_PERFMON_FEATURES(ctypes.Structure):
    _fields_ = [
        ("Anonymous", _Anonymous_e__Struct),
        ("AsUINT64", ctypes.c_ulonglong),
    ]

class WHV_PARTITION_PROPERTY(ctypes.Structure):
    _fields_ = [
        ("ExtendedVmExits", WHV_EXTENDED_VM_EXITS),
        ("ProcessorFeatures", WHV_PROCESSOR_FEATURES),
        ("SyntheticProcessorFeaturesBanks", WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS),
        ("ProcessorXsaveFeatures", WHV_PROCESSOR_XSAVE_FEATURES),
        ("ProcessorClFlushSize", ctypes.c_ubyte),
        ("ProcessorCount", wintypes.DWORD),
        ("CpuidExitList", wintypes.DWORD * 1),
        ("CpuidResultList", WHV_X64_CPUID_RESULT * 1),
        ("CpuidResultList2", WHV_X64_CPUID_RESULT2 * 1),
        ("MsrActionList", WHV_MSR_ACTION_ENTRY * 1),
        ("UnimplementedMsrAction", ctypes.c_int),
        ("ExceptionExitBitmap", ctypes.c_ulonglong),
        ("LocalApicEmulationMode", ctypes.c_int),
        ("SeparateSecurityDomain", wintypes.BOOL),
        ("NestedVirtualization", wintypes.BOOL),
        ("X64MsrExitBitmap", WHV_X64_MSR_EXIT_BITMAP),
        ("ProcessorClockFrequency", ctypes.c_ulonglong),
        ("InterruptClockFrequency", ctypes.c_ulonglong),
        ("ApicRemoteRead", wintypes.BOOL),
        ("ProcessorFeaturesBanks", WHV_PROCESSOR_FEATURES_BANKS),
        ("ReferenceTime", ctypes.c_ulonglong),
        ("PrimaryNumaNode", ctypes.c_ushort),
        ("CpuReserve", wintypes.DWORD),
        ("CpuCap", wintypes.DWORD),
        ("CpuWeight", wintypes.DWORD),
        ("CpuGroupId", ctypes.c_ulonglong),
        ("ProcessorFrequencyCap", wintypes.DWORD),
        ("AllowDeviceAssignment", wintypes.BOOL),
        ("ProcessorPerfmonFeatures", WHV_PROCESSOR_PERFMON_FEATURES),
        ("DisableSmt", wintypes.BOOL),
    ]
#[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_CPUID_RESULT {
    pub Function: u32,
    pub Reserved: [u32; 3],
    pub Eax: u32,
    pub Ebx: u32,
    pub Ecx: u32,
    pub Edx: u32,
}

#[repr(C)]
pub struct WHV_CPUID_OUTPUT {
    pub Eax: u32,
    pub Ebx: u32,
    pub Ecx: u32,
    pub Edx: u32,
}

#[repr(C)]
pub struct WHV_X64_CPUID_RESULT2 {
    pub Function: u32,
    pub Index: u32,
    pub VpIndex: u32,
    pub Flags: i32,
    pub Output: WHV_CPUID_OUTPUT,
    pub Mask: WHV_CPUID_OUTPUT,
}

#[repr(C)]
pub struct WHV_MSR_ACTION_ENTRY {
    pub Index: u32,
    pub ReadAction: u8,
    pub WriteAction: u8,
    pub Reserved: u16,
}

#[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_PROCESSOR_PERFMON_FEATURES {
    pub Anonymous: _Anonymous_e__Struct,
    pub AsUINT64: u64,
}

#[repr(C)]
pub struct WHV_PARTITION_PROPERTY {
    pub ExtendedVmExits: WHV_EXTENDED_VM_EXITS,
    pub ProcessorFeatures: WHV_PROCESSOR_FEATURES,
    pub SyntheticProcessorFeaturesBanks: WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS,
    pub ProcessorXsaveFeatures: WHV_PROCESSOR_XSAVE_FEATURES,
    pub ProcessorClFlushSize: u8,
    pub ProcessorCount: u32,
    pub CpuidExitList: [u32; 1],
    pub CpuidResultList: [WHV_X64_CPUID_RESULT; 1],
    pub CpuidResultList2: [WHV_X64_CPUID_RESULT2; 1],
    pub MsrActionList: [WHV_MSR_ACTION_ENTRY; 1],
    pub UnimplementedMsrAction: i32,
    pub ExceptionExitBitmap: u64,
    pub LocalApicEmulationMode: i32,
    pub SeparateSecurityDomain: i32,
    pub NestedVirtualization: i32,
    pub X64MsrExitBitmap: WHV_X64_MSR_EXIT_BITMAP,
    pub ProcessorClockFrequency: u64,
    pub InterruptClockFrequency: u64,
    pub ApicRemoteRead: i32,
    pub ProcessorFeaturesBanks: WHV_PROCESSOR_FEATURES_BANKS,
    pub ReferenceTime: u64,
    pub PrimaryNumaNode: u16,
    pub CpuReserve: u32,
    pub CpuCap: u32,
    pub CpuWeight: u32,
    pub CpuGroupId: u64,
    pub ProcessorFrequencyCap: u32,
    pub AllowDeviceAssignment: i32,
    pub ProcessorPerfmonFeatures: WHV_PROCESSOR_PERFMON_FEATURES,
    pub DisableSmt: i32,
}
import "golang.org/x/sys/windows"

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_CPUID_RESULT struct {
	Function uint32
	Reserved [3]uint32
	Eax uint32
	Ebx uint32
	Ecx uint32
	Edx uint32
}

type WHV_CPUID_OUTPUT struct {
	Eax uint32
	Ebx uint32
	Ecx uint32
	Edx uint32
}

type WHV_X64_CPUID_RESULT2 struct {
	Function uint32
	Index uint32
	VpIndex uint32
	Flags int32
	Output WHV_CPUID_OUTPUT
	Mask WHV_CPUID_OUTPUT
}

type WHV_MSR_ACTION_ENTRY struct {
	Index uint32
	ReadAction byte
	WriteAction byte
	Reserved uint16
}

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_PROCESSOR_PERFMON_FEATURES struct {
	Anonymous _Anonymous_e__Struct
	AsUINT64 uint64
}

type WHV_PARTITION_PROPERTY struct {
	ExtendedVmExits WHV_EXTENDED_VM_EXITS
	ProcessorFeatures WHV_PROCESSOR_FEATURES
	SyntheticProcessorFeaturesBanks WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS
	ProcessorXsaveFeatures WHV_PROCESSOR_XSAVE_FEATURES
	ProcessorClFlushSize byte
	ProcessorCount uint32
	CpuidExitList [1]uint32
	CpuidResultList [1]WHV_X64_CPUID_RESULT
	CpuidResultList2 [1]WHV_X64_CPUID_RESULT2
	MsrActionList [1]WHV_MSR_ACTION_ENTRY
	UnimplementedMsrAction int32
	ExceptionExitBitmap uint64
	LocalApicEmulationMode int32
	SeparateSecurityDomain int32
	NestedVirtualization int32
	X64MsrExitBitmap WHV_X64_MSR_EXIT_BITMAP
	ProcessorClockFrequency uint64
	InterruptClockFrequency uint64
	ApicRemoteRead int32
	ProcessorFeaturesBanks WHV_PROCESSOR_FEATURES_BANKS
	ReferenceTime uint64
	PrimaryNumaNode uint16
	CpuReserve uint32
	CpuCap uint32
	CpuWeight uint32
	CpuGroupId uint64
	ProcessorFrequencyCap uint32
	AllowDeviceAssignment int32
	ProcessorPerfmonFeatures WHV_PROCESSOR_PERFMON_FEATURES
	DisableSmt int32
}
type
  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_CPUID_RESULT = record
    Function: DWORD;
    Reserved: array[0..2] of DWORD;
    Eax: DWORD;
    Ebx: DWORD;
    Ecx: DWORD;
    Edx: DWORD;
  end;

  WHV_CPUID_OUTPUT = record
    Eax: DWORD;
    Ebx: DWORD;
    Ecx: DWORD;
    Edx: DWORD;
  end;

  WHV_X64_CPUID_RESULT2 = record
    Function: DWORD;
    Index: DWORD;
    VpIndex: DWORD;
    Flags: Integer;
    Output: WHV_CPUID_OUTPUT;
    Mask: WHV_CPUID_OUTPUT;
  end;

  WHV_MSR_ACTION_ENTRY = record
    Index: DWORD;
    ReadAction: Byte;
    WriteAction: Byte;
    Reserved: Word;
  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_PROCESSOR_PERFMON_FEATURES = record
    Anonymous: _Anonymous_e__Struct;
    AsUINT64: UInt64;
  end;

  WHV_PARTITION_PROPERTY = record
    ExtendedVmExits: WHV_EXTENDED_VM_EXITS;
    ProcessorFeatures: WHV_PROCESSOR_FEATURES;
    SyntheticProcessorFeaturesBanks: WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS;
    ProcessorXsaveFeatures: WHV_PROCESSOR_XSAVE_FEATURES;
    ProcessorClFlushSize: Byte;
    ProcessorCount: DWORD;
    CpuidExitList: array[0..0] of DWORD;
    CpuidResultList: array[0..0] of WHV_X64_CPUID_RESULT;
    CpuidResultList2: array[0..0] of WHV_X64_CPUID_RESULT2;
    MsrActionList: array[0..0] of WHV_MSR_ACTION_ENTRY;
    UnimplementedMsrAction: Integer;
    ExceptionExitBitmap: UInt64;
    LocalApicEmulationMode: Integer;
    SeparateSecurityDomain: BOOL;
    NestedVirtualization: BOOL;
    X64MsrExitBitmap: WHV_X64_MSR_EXIT_BITMAP;
    ProcessorClockFrequency: UInt64;
    InterruptClockFrequency: UInt64;
    ApicRemoteRead: BOOL;
    ProcessorFeaturesBanks: WHV_PROCESSOR_FEATURES_BANKS;
    ReferenceTime: UInt64;
    PrimaryNumaNode: Word;
    CpuReserve: DWORD;
    CpuCap: DWORD;
    CpuWeight: DWORD;
    CpuGroupId: UInt64;
    ProcessorFrequencyCap: DWORD;
    AllowDeviceAssignment: BOOL;
    ProcessorPerfmonFeatures: WHV_PROCESSOR_PERFMON_FEATURES;
    DisableSmt: BOOL;
  end;
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_CPUID_RESULT = extern struct {
    Function: u32,
    Reserved: [3]u32,
    Eax: u32,
    Ebx: u32,
    Ecx: u32,
    Edx: u32,
};

const WHV_CPUID_OUTPUT = extern struct {
    Eax: u32,
    Ebx: u32,
    Ecx: u32,
    Edx: u32,
};

const WHV_X64_CPUID_RESULT2 = extern struct {
    Function: u32,
    Index: u32,
    VpIndex: u32,
    Flags: i32,
    Output: WHV_CPUID_OUTPUT,
    Mask: WHV_CPUID_OUTPUT,
};

const WHV_MSR_ACTION_ENTRY = extern struct {
    Index: u32,
    ReadAction: u8,
    WriteAction: u8,
    Reserved: u16,
};

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_PROCESSOR_PERFMON_FEATURES = extern struct {
    Anonymous: _Anonymous_e__Struct,
    AsUINT64: u64,
};

const WHV_PARTITION_PROPERTY = extern struct {
    ExtendedVmExits: WHV_EXTENDED_VM_EXITS,
    ProcessorFeatures: WHV_PROCESSOR_FEATURES,
    SyntheticProcessorFeaturesBanks: WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS,
    ProcessorXsaveFeatures: WHV_PROCESSOR_XSAVE_FEATURES,
    ProcessorClFlushSize: u8,
    ProcessorCount: u32,
    CpuidExitList: [1]u32,
    CpuidResultList: [1]WHV_X64_CPUID_RESULT,
    CpuidResultList2: [1]WHV_X64_CPUID_RESULT2,
    MsrActionList: [1]WHV_MSR_ACTION_ENTRY,
    UnimplementedMsrAction: i32,
    ExceptionExitBitmap: u64,
    LocalApicEmulationMode: i32,
    SeparateSecurityDomain: i32,
    NestedVirtualization: i32,
    X64MsrExitBitmap: WHV_X64_MSR_EXIT_BITMAP,
    ProcessorClockFrequency: u64,
    InterruptClockFrequency: u64,
    ApicRemoteRead: i32,
    ProcessorFeaturesBanks: WHV_PROCESSOR_FEATURES_BANKS,
    ReferenceTime: u64,
    PrimaryNumaNode: u16,
    CpuReserve: u32,
    CpuCap: u32,
    CpuWeight: u32,
    CpuGroupId: u64,
    ProcessorFrequencyCap: u32,
    AllowDeviceAssignment: i32,
    ProcessorPerfmonFeatures: WHV_PROCESSOR_PERFMON_FEATURES,
    DisableSmt: i32,
};
type
  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_CPUID_RESULT {.bycopy.} = object
    Function: uint32
    Reserved: array[3, uint32]
    Eax: uint32
    Ebx: uint32
    Ecx: uint32
    Edx: uint32

  WHV_CPUID_OUTPUT {.bycopy.} = object
    Eax: uint32
    Ebx: uint32
    Ecx: uint32
    Edx: uint32

  WHV_X64_CPUID_RESULT2 {.bycopy.} = object
    Function: uint32
    Index: uint32
    VpIndex: uint32
    Flags: int32
    Output: WHV_CPUID_OUTPUT
    Mask: WHV_CPUID_OUTPUT

  WHV_MSR_ACTION_ENTRY {.bycopy.} = object
    Index: uint32
    ReadAction: uint8
    WriteAction: uint8
    Reserved: uint16

  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_PROCESSOR_PERFMON_FEATURES {.bycopy.} = object
    Anonymous: _Anonymous_e__Struct
    AsUINT64: uint64

  WHV_PARTITION_PROPERTY {.bycopy.} = object
    ExtendedVmExits: WHV_EXTENDED_VM_EXITS
    ProcessorFeatures: WHV_PROCESSOR_FEATURES
    SyntheticProcessorFeaturesBanks: WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS
    ProcessorXsaveFeatures: WHV_PROCESSOR_XSAVE_FEATURES
    ProcessorClFlushSize: uint8
    ProcessorCount: uint32
    CpuidExitList: array[1, uint32]
    CpuidResultList: array[1, WHV_X64_CPUID_RESULT]
    CpuidResultList2: array[1, WHV_X64_CPUID_RESULT2]
    MsrActionList: array[1, WHV_MSR_ACTION_ENTRY]
    UnimplementedMsrAction: int32
    ExceptionExitBitmap: uint64
    LocalApicEmulationMode: int32
    SeparateSecurityDomain: int32
    NestedVirtualization: int32
    X64MsrExitBitmap: WHV_X64_MSR_EXIT_BITMAP
    ProcessorClockFrequency: uint64
    InterruptClockFrequency: uint64
    ApicRemoteRead: int32
    ProcessorFeaturesBanks: WHV_PROCESSOR_FEATURES_BANKS
    ReferenceTime: uint64
    PrimaryNumaNode: uint16
    CpuReserve: uint32
    CpuCap: uint32
    CpuWeight: uint32
    CpuGroupId: uint64
    ProcessorFrequencyCap: uint32
    AllowDeviceAssignment: int32
    ProcessorPerfmonFeatures: WHV_PROCESSOR_PERFMON_FEATURES
    DisableSmt: int32
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_CPUID_RESULT
{
    uint Function;
    uint[3] Reserved;
    uint Eax;
    uint Ebx;
    uint Ecx;
    uint Edx;
}

struct WHV_CPUID_OUTPUT
{
    uint Eax;
    uint Ebx;
    uint Ecx;
    uint Edx;
}

struct WHV_X64_CPUID_RESULT2
{
    uint Function;
    uint Index;
    uint VpIndex;
    int Flags;
    WHV_CPUID_OUTPUT Output;
    WHV_CPUID_OUTPUT Mask;
}

struct WHV_MSR_ACTION_ENTRY
{
    uint Index;
    ubyte ReadAction;
    ubyte WriteAction;
    ushort Reserved;
}

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_PROCESSOR_PERFMON_FEATURES
{
    _Anonymous_e__Struct Anonymous;
    ulong AsUINT64;
}

struct WHV_PARTITION_PROPERTY
{
    WHV_EXTENDED_VM_EXITS ExtendedVmExits;
    WHV_PROCESSOR_FEATURES ProcessorFeatures;
    WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS SyntheticProcessorFeaturesBanks;
    WHV_PROCESSOR_XSAVE_FEATURES ProcessorXsaveFeatures;
    ubyte ProcessorClFlushSize;
    uint ProcessorCount;
    uint[1] CpuidExitList;
    WHV_X64_CPUID_RESULT[1] CpuidResultList;
    WHV_X64_CPUID_RESULT2[1] CpuidResultList2;
    WHV_MSR_ACTION_ENTRY[1] MsrActionList;
    int UnimplementedMsrAction;
    ulong ExceptionExitBitmap;
    int LocalApicEmulationMode;
    int SeparateSecurityDomain;
    int NestedVirtualization;
    WHV_X64_MSR_EXIT_BITMAP X64MsrExitBitmap;
    ulong ProcessorClockFrequency;
    ulong InterruptClockFrequency;
    int ApicRemoteRead;
    WHV_PROCESSOR_FEATURES_BANKS ProcessorFeaturesBanks;
    ulong ReferenceTime;
    ushort PrimaryNumaNode;
    uint CpuReserve;
    uint CpuCap;
    uint CpuWeight;
    ulong CpuGroupId;
    uint ProcessorFrequencyCap;
    int AllowDeviceAssignment;
    WHV_PROCESSOR_PERFMON_FEATURES ProcessorPerfmonFeatures;
    int DisableSmt;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WHV_PARTITION_PROPERTY サイズ: 48 バイト(x64)
dim st, 12    ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; ExtendedVmExits : WHV_EXTENDED_VM_EXITS (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; 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)
; ProcessorCount : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; CpuidExitList : DWORD (+0, 4byte)  varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; CpuidResultList : WHV_X64_CPUID_RESULT (+0, 32byte)  varptr(st)+0 を基点に操作(32byte:入れ子/配列)
; CpuidResultList2 : WHV_X64_CPUID_RESULT2 (+0, 48byte)  varptr(st)+0 を基点に操作(48byte:入れ子/配列)
; MsrActionList : WHV_MSR_ACTION_ENTRY (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; UnimplementedMsrAction : WHV_MSR_ACTION (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; ExceptionExitBitmap : ULONGLONG (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; LocalApicEmulationMode : WHV_X64_LOCAL_APIC_EMULATION_MODE (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; SeparateSecurityDomain : BOOL (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; NestedVirtualization : BOOL (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; 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,上位
; ApicRemoteRead : BOOL (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; ProcessorFeaturesBanks : WHV_PROCESSOR_FEATURES_BANKS (+0, 24byte)  varptr(st)+0 を基点に操作(24byte:入れ子/配列)
; ReferenceTime : ULONGLONG (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; PrimaryNumaNode : WORD (+0, 2byte)  wpoke st,0,値  /  値 = wpeek(st,0)
; CpuReserve : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; CpuCap : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; CpuWeight : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; CpuGroupId : ULONGLONG (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; ProcessorFrequencyCap : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; AllowDeviceAssignment : BOOL (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; ProcessorPerfmonFeatures : WHV_PROCESSOR_PERFMON_FEATURES (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; DisableSmt : BOOL (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; ※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_X64_CPUID_RESULT
    #field int Function
    #field int Reserved 3
    #field int Eax
    #field int Ebx
    #field int Ecx
    #field int Edx
#endstruct

#defstruct global WHV_CPUID_OUTPUT
    #field int Eax
    #field int Ebx
    #field int Ecx
    #field int Edx
#endstruct

#defstruct global WHV_X64_CPUID_RESULT2
    #field int Function
    #field int Index
    #field int VpIndex
    #field int Flags
    #field WHV_CPUID_OUTPUT Output
    #field WHV_CPUID_OUTPUT Mask
#endstruct

#defstruct global WHV_MSR_ACTION_ENTRY
    #field int Index
    #field byte ReadAction
    #field byte WriteAction
    #field short Reserved
#endstruct

#defstruct global WHV_PROCESSOR_FEATURES_BANKS
    #field int BanksCount
    #field int Reserved0
    #field byte Anonymous 16
#endstruct

#defstruct global WHV_PARTITION_PROPERTY
    #field byte ExtendedVmExits 8
    #field byte ProcessorFeatures 8
    #field WHV_SYNTHETIC_PROCESSOR_FEATURES_BANKS SyntheticProcessorFeaturesBanks
    #field byte ProcessorXsaveFeatures 8
    #field byte ProcessorClFlushSize
    #field int ProcessorCount
    #field int CpuidExitList 1
    #field WHV_X64_CPUID_RESULT CpuidResultList 1
    #field WHV_X64_CPUID_RESULT2 CpuidResultList2 1
    #field WHV_MSR_ACTION_ENTRY MsrActionList 1
    #field int UnimplementedMsrAction
    #field int64 ExceptionExitBitmap
    #field int LocalApicEmulationMode
    #field bool SeparateSecurityDomain
    #field bool NestedVirtualization
    #field byte X64MsrExitBitmap 8
    #field int64 ProcessorClockFrequency
    #field int64 InterruptClockFrequency
    #field bool ApicRemoteRead
    #field WHV_PROCESSOR_FEATURES_BANKS ProcessorFeaturesBanks
    #field int64 ReferenceTime
    #field short PrimaryNumaNode
    #field int CpuReserve
    #field int CpuCap
    #field int CpuWeight
    #field int64 CpuGroupId
    #field int ProcessorFrequencyCap
    #field bool AllowDeviceAssignment
    #field byte ProcessorPerfmonFeatures 8
    #field bool DisableSmt
#endstruct

stdim st, WHV_PARTITION_PROPERTY        ; NSTRUCT 変数を確保
st->ProcessorClFlushSize = 100
mes "ProcessorClFlushSize=" + st->ProcessorClFlushSize
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。