ホーム › System.Hypervisor › WHV_PARTITION_PROPERTY
WHV_PARTITION_PROPERTY
共用体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| ExtendedVmExits | WHV_EXTENDED_VM_EXITS | 8 | +0 | +0 | パーティションで有効にする拡張VM終了種別を示す。 |
| ProcessorFeatures | WHV_PROCESSOR_FEATURES | 8 | +0 | +0 | 仮想プロセッサに公開するプロセッサ機能を示す。 |
| 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である。 |
| ProcessorCount | DWORD | 4 | +0 | +0 | パーティションの仮想プロセッサ数を示すDWORDである。 |
| CpuidExitList | DWORD | 4 | +0 | +0 | VM終了を発生させるCPUIDリーフ番号のリスト要素である。 |
| CpuidResultList | WHV_X64_CPUID_RESULT | 32 | +0 | +0 | CPUID結果を上書き設定するWHV_X64_CPUID_RESULTのリスト要素である。 |
| CpuidResultList2 | WHV_X64_CPUID_RESULT2 | 48 | +0 | +0 | 拡張形式のCPUID結果設定WHV_X64_CPUID_RESULT2のリスト要素である。 |
| MsrActionList | WHV_MSR_ACTION_ENTRY | 8 | +0 | +0 | MSRアクセス動作を定義するWHV_MSR_ACTION_ENTRYのリスト要素である。 |
| UnimplementedMsrAction | WHV_MSR_ACTION | 4 | +0 | +0 | 未実装MSRへのアクセス時に取る既定動作を示すWHV_MSR_ACTIONである。 |
| ExceptionExitBitmap | ULONGLONG | 8 | +0 | +0 | VM終了を発生させる例外ベクタのビットマップを示すULONGLONGである。 |
| LocalApicEmulationMode | WHV_X64_LOCAL_APIC_EMULATION_MODE | 4 | +0 | +0 | ローカルAPICのエミュレーションモードを示すWHV_X64_LOCAL_APIC_EMULATION_MODEである。 |
| SeparateSecurityDomain | BOOL | 4 | +0 | +0 | パーティションを独立したセキュリティドメインにするかを示すBOOLである。 |
| NestedVirtualization | BOOL | 4 | +0 | +0 | ネステッド仮想化を有効にするかを示すBOOLである。 |
| 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である。 |
| ApicRemoteRead | BOOL | 4 | +0 | +0 | APICレジスタのリモート読み取りを許可するかを示すBOOLである。 |
| ProcessorFeaturesBanks | WHV_PROCESSOR_FEATURES_BANKS | 24 | +0 | +0 | 仮想プロセッサに公開するプロセッサ機能をバンク形式で示す。 |
| ReferenceTime | ULONGLONG | 8 | +0 | +0 | パーティションの基準時間(100ns単位)を示すULONGLONGである。 |
| PrimaryNumaNode | WORD | 2 | +0 | +0 | パーティションの主NUMAノード番号を示すWORDである。 |
| CpuReserve | DWORD | 4 | +0 | +0 | CPU予約割合を示すDWORD。最低限保証する処理能力を表す。 |
| CpuCap | DWORD | 4 | +0 | +0 | CPU使用率の上限を示すDWORDである。 |
| CpuWeight | DWORD | 4 | +0 | +0 | 他パーティションに対する相対的なCPU割り当て重みを示すDWORDである。 |
| CpuGroupId | ULONGLONG | 8 | +0 | +0 | パーティションが所属するCPUグループのIDを示すULONGLONGである。 |
| ProcessorFrequencyCap | DWORD | 4 | +0 | +0 | プロセッサ周波数の上限をMHz単位で示すDWORDである。 |
| AllowDeviceAssignment | BOOL | 4 | +0 | +0 | 物理デバイスの割り当て(DDA)を許可するかを示すBOOLである。 |
| ProcessorPerfmonFeatures | WHV_PROCESSOR_PERFMON_FEATURES | 8 | +0 | +0 | 仮想プロセッサに公開するパフォーマンスモニタリング機能を示す。 |
| DisableSmt | BOOL | 4 | +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 Structureimport 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: int32struct 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 非対応)。必要に応じ手動でアクセス。