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

WHV_REGISTER_VALUE

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

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

フィールド

フィールドサイズx64x86説明
Reg128WHV_UINT12816+0+0レジスタ値を128ビットとして保持するWHV_UINT128である。
Reg64ULONGLONG8+0+0レジスタ値を64ビット整数として保持するULONGLONGである。
Reg32DWORD4+0+0レジスタ値を32ビット整数として保持するDWORDである。
Reg16WORD2+0+0レジスタ値を16ビット整数として保持するWORDである。
Reg8BYTE1+0+0レジスタ値を8ビット整数として保持するBYTEである。
FpWHV_X64_FP_REGISTER16+0+0x87浮動小数点レジスタ値を保持するWHV_X64_FP_REGISTERである。
FpControlStatusWHV_X64_FP_CONTROL_STATUS_REGISTER16+0+0FPU制御/状態レジスタ値を保持するWHV_X64_FP_CONTROL_STATUS_REGISTERである。
XmmControlStatusWHV_X64_XMM_CONTROL_STATUS_REGISTER16+0+0XMM制御/状態レジスタ値を保持するWHV_X64_XMM_CONTROL_STATUS_REGISTERである。
SegmentWHV_X64_SEGMENT_REGISTER24+0+0セグメントレジスタ値を保持するWHV_X64_SEGMENT_REGISTERである。
TableWHV_X64_TABLE_REGISTER16+0+0ディスクリプタテーブルレジスタ値を保持するWHV_X64_TABLE_REGISTERである。
InterruptStateWHV_X64_INTERRUPT_STATE_REGISTER8+0+0割り込み状態レジスタ値を保持するWHV_X64_INTERRUPT_STATE_REGISTERである。
PendingInterruptionWHV_X64_PENDING_INTERRUPTION_REGISTER8+0+0保留中割り込みレジスタ値を保持するWHV_X64_PENDING_INTERRUPTION_REGISTERである。
DeliverabilityNotificationsWHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER8+0+0配信可能通知レジスタ値を保持する構造体である。
ExceptionEventWHV_X64_PENDING_EXCEPTION_EVENT16+0+0保留中例外イベント値を保持するWHV_X64_PENDING_EXCEPTION_EVENTである。
ExtIntEventWHV_X64_PENDING_EXT_INT_EVENT16+0+0保留中外部割り込みイベント値を保持するWHV_X64_PENDING_EXT_INT_EVENTである。
InternalActivityWHV_INTERNAL_ACTIVITY_REGISTER8+0+0内部活動状態レジスタ値を保持するWHV_INTERNAL_ACTIVITY_REGISTERである。
PendingDebugExceptionWHV_X64_PENDING_DEBUG_EXCEPTION8+0+0保留中デバッグ例外値を保持するWHV_X64_PENDING_DEBUG_EXCEPTIONである。

各言語での定義

#include <windows.h>

// WHV_UINT128  (x64 16 / x86 16 バイト)
typedef struct WHV_UINT128 {
    _Anonymous_e__Struct Anonymous;
    DWORD Dword[4];
} WHV_UINT128;

// WHV_X64_FP_REGISTER  (x64 16 / x86 16 バイト)
typedef struct WHV_X64_FP_REGISTER {
    _Anonymous_e__Struct Anonymous;
    WHV_UINT128 AsUINT128;
} WHV_X64_FP_REGISTER;

// WHV_X64_FP_CONTROL_STATUS_REGISTER  (x64 16 / x86 16 バイト)
typedef struct WHV_X64_FP_CONTROL_STATUS_REGISTER {
    _Anonymous_e__Struct Anonymous;
    WHV_UINT128 AsUINT128;
} WHV_X64_FP_CONTROL_STATUS_REGISTER;

// WHV_X64_XMM_CONTROL_STATUS_REGISTER  (x64 16 / x86 16 バイト)
typedef struct WHV_X64_XMM_CONTROL_STATUS_REGISTER {
    _Anonymous_e__Struct Anonymous;
    WHV_UINT128 AsUINT128;
} WHV_X64_XMM_CONTROL_STATUS_REGISTER;

// WHV_X64_SEGMENT_REGISTER  (x64 24 / x86 24 バイト)
typedef struct WHV_X64_SEGMENT_REGISTER {
    ULONGLONG Base;
    DWORD Limit;
    WORD Selector;
    _Anonymous_e__Union Anonymous;
} WHV_X64_SEGMENT_REGISTER;

// WHV_X64_TABLE_REGISTER  (x64 16 / x86 16 バイト)
typedef struct WHV_X64_TABLE_REGISTER {
    WORD Pad[3];
    WORD Limit;
    ULONGLONG Base;
} WHV_X64_TABLE_REGISTER;

// WHV_X64_INTERRUPT_STATE_REGISTER  (x64 8 / x86 8 バイト)
typedef struct WHV_X64_INTERRUPT_STATE_REGISTER {
    _Anonymous_e__Struct Anonymous;
    ULONGLONG AsUINT64;
} WHV_X64_INTERRUPT_STATE_REGISTER;

// WHV_X64_PENDING_INTERRUPTION_REGISTER  (x64 8 / x86 8 バイト)
typedef struct WHV_X64_PENDING_INTERRUPTION_REGISTER {
    _Anonymous_e__Struct Anonymous;
    ULONGLONG AsUINT64;
} WHV_X64_PENDING_INTERRUPTION_REGISTER;

// WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER  (x64 8 / x86 8 バイト)
typedef struct WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER {
    _Anonymous_e__Struct Anonymous;
    ULONGLONG AsUINT64;
} WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER;

// WHV_X64_PENDING_EXCEPTION_EVENT  (x64 16 / x86 16 バイト)
typedef struct WHV_X64_PENDING_EXCEPTION_EVENT {
    _Anonymous_e__Struct Anonymous;
    WHV_UINT128 AsUINT128;
} WHV_X64_PENDING_EXCEPTION_EVENT;

// WHV_X64_PENDING_EXT_INT_EVENT  (x64 16 / x86 16 バイト)
typedef struct WHV_X64_PENDING_EXT_INT_EVENT {
    _Anonymous_e__Struct Anonymous;
    WHV_UINT128 AsUINT128;
} WHV_X64_PENDING_EXT_INT_EVENT;

// WHV_INTERNAL_ACTIVITY_REGISTER  (x64 8 / x86 8 バイト)
typedef struct WHV_INTERNAL_ACTIVITY_REGISTER {
    _Anonymous_e__Struct Anonymous;
    ULONGLONG AsUINT64;
} WHV_INTERNAL_ACTIVITY_REGISTER;

// WHV_X64_PENDING_DEBUG_EXCEPTION  (x64 8 / x86 8 バイト)
typedef struct WHV_X64_PENDING_DEBUG_EXCEPTION {
    ULONGLONG AsUINT64;
    _Anonymous_e__Struct Anonymous;
} WHV_X64_PENDING_DEBUG_EXCEPTION;

// WHV_REGISTER_VALUE  (x64 24 / x86 24 バイト)
typedef struct WHV_REGISTER_VALUE {
    WHV_UINT128 Reg128;
    ULONGLONG Reg64;
    DWORD Reg32;
    WORD Reg16;
    BYTE Reg8;
    WHV_X64_FP_REGISTER Fp;
    WHV_X64_FP_CONTROL_STATUS_REGISTER FpControlStatus;
    WHV_X64_XMM_CONTROL_STATUS_REGISTER XmmControlStatus;
    WHV_X64_SEGMENT_REGISTER Segment;
    WHV_X64_TABLE_REGISTER Table;
    WHV_X64_INTERRUPT_STATE_REGISTER InterruptState;
    WHV_X64_PENDING_INTERRUPTION_REGISTER PendingInterruption;
    WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER DeliverabilityNotifications;
    WHV_X64_PENDING_EXCEPTION_EVENT ExceptionEvent;
    WHV_X64_PENDING_EXT_INT_EVENT ExtIntEvent;
    WHV_INTERNAL_ACTIVITY_REGISTER InternalActivity;
    WHV_X64_PENDING_DEBUG_EXCEPTION PendingDebugException;
} WHV_REGISTER_VALUE;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_UINT128
{
    public _Anonymous_e__Struct Anonymous;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public uint[] Dword;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_X64_FP_REGISTER
{
    public _Anonymous_e__Struct Anonymous;
    public WHV_UINT128 AsUINT128;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_X64_FP_CONTROL_STATUS_REGISTER
{
    public _Anonymous_e__Struct Anonymous;
    public WHV_UINT128 AsUINT128;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_X64_XMM_CONTROL_STATUS_REGISTER
{
    public _Anonymous_e__Struct Anonymous;
    public WHV_UINT128 AsUINT128;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_X64_SEGMENT_REGISTER
{
    public ulong Base;
    public uint Limit;
    public ushort Selector;
    public _Anonymous_e__Union Anonymous;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_X64_TABLE_REGISTER
{
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public ushort[] Pad;
    public ushort Limit;
    public ulong Base;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_X64_INTERRUPT_STATE_REGISTER
{
    public _Anonymous_e__Struct Anonymous;
    public ulong AsUINT64;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_X64_PENDING_INTERRUPTION_REGISTER
{
    public _Anonymous_e__Struct Anonymous;
    public ulong AsUINT64;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER
{
    public _Anonymous_e__Struct Anonymous;
    public ulong AsUINT64;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_X64_PENDING_EXCEPTION_EVENT
{
    public _Anonymous_e__Struct Anonymous;
    public WHV_UINT128 AsUINT128;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_X64_PENDING_EXT_INT_EVENT
{
    public _Anonymous_e__Struct Anonymous;
    public WHV_UINT128 AsUINT128;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_INTERNAL_ACTIVITY_REGISTER
{
    public _Anonymous_e__Struct Anonymous;
    public ulong AsUINT64;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_X64_PENDING_DEBUG_EXCEPTION
{
    public ulong AsUINT64;
    public _Anonymous_e__Struct Anonymous;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_REGISTER_VALUE
{
    public WHV_UINT128 Reg128;
    public ulong Reg64;
    public uint Reg32;
    public ushort Reg16;
    public byte Reg8;
    public WHV_X64_FP_REGISTER Fp;
    public WHV_X64_FP_CONTROL_STATUS_REGISTER FpControlStatus;
    public WHV_X64_XMM_CONTROL_STATUS_REGISTER XmmControlStatus;
    public WHV_X64_SEGMENT_REGISTER Segment;
    public WHV_X64_TABLE_REGISTER Table;
    public WHV_X64_INTERRUPT_STATE_REGISTER InterruptState;
    public WHV_X64_PENDING_INTERRUPTION_REGISTER PendingInterruption;
    public WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER DeliverabilityNotifications;
    public WHV_X64_PENDING_EXCEPTION_EVENT ExceptionEvent;
    public WHV_X64_PENDING_EXT_INT_EVENT ExtIntEvent;
    public WHV_INTERNAL_ACTIVITY_REGISTER InternalActivity;
    public WHV_X64_PENDING_DEBUG_EXCEPTION PendingDebugException;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_UINT128
    Public Anonymous As _Anonymous_e__Struct
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Public Dword() As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_X64_FP_REGISTER
    Public Anonymous As _Anonymous_e__Struct
    Public AsUINT128 As WHV_UINT128
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_X64_FP_CONTROL_STATUS_REGISTER
    Public Anonymous As _Anonymous_e__Struct
    Public AsUINT128 As WHV_UINT128
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_X64_XMM_CONTROL_STATUS_REGISTER
    Public Anonymous As _Anonymous_e__Struct
    Public AsUINT128 As WHV_UINT128
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_X64_SEGMENT_REGISTER
    Public Base As ULong
    Public Limit As UInteger
    Public Selector As UShort
    Public Anonymous As _Anonymous_e__Union
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_X64_TABLE_REGISTER
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=3)> Public Pad() As UShort
    Public Limit As UShort
    Public Base As ULong
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_X64_INTERRUPT_STATE_REGISTER
    Public Anonymous As _Anonymous_e__Struct
    Public AsUINT64 As ULong
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_X64_PENDING_INTERRUPTION_REGISTER
    Public Anonymous As _Anonymous_e__Struct
    Public AsUINT64 As ULong
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER
    Public Anonymous As _Anonymous_e__Struct
    Public AsUINT64 As ULong
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_X64_PENDING_EXCEPTION_EVENT
    Public Anonymous As _Anonymous_e__Struct
    Public AsUINT128 As WHV_UINT128
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_X64_PENDING_EXT_INT_EVENT
    Public Anonymous As _Anonymous_e__Struct
    Public AsUINT128 As WHV_UINT128
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_INTERNAL_ACTIVITY_REGISTER
    Public Anonymous As _Anonymous_e__Struct
    Public AsUINT64 As ULong
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_X64_PENDING_DEBUG_EXCEPTION
    Public AsUINT64 As ULong
    Public Anonymous As _Anonymous_e__Struct
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_REGISTER_VALUE
    Public Reg128 As WHV_UINT128
    Public Reg64 As ULong
    Public Reg32 As UInteger
    Public Reg16 As UShort
    Public Reg8 As Byte
    Public Fp As WHV_X64_FP_REGISTER
    Public FpControlStatus As WHV_X64_FP_CONTROL_STATUS_REGISTER
    Public XmmControlStatus As WHV_X64_XMM_CONTROL_STATUS_REGISTER
    Public Segment As WHV_X64_SEGMENT_REGISTER
    Public Table As WHV_X64_TABLE_REGISTER
    Public InterruptState As WHV_X64_INTERRUPT_STATE_REGISTER
    Public PendingInterruption As WHV_X64_PENDING_INTERRUPTION_REGISTER
    Public DeliverabilityNotifications As WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER
    Public ExceptionEvent As WHV_X64_PENDING_EXCEPTION_EVENT
    Public ExtIntEvent As WHV_X64_PENDING_EXT_INT_EVENT
    Public InternalActivity As WHV_INTERNAL_ACTIVITY_REGISTER
    Public PendingDebugException As WHV_X64_PENDING_DEBUG_EXCEPTION
End Structure
import ctypes
from ctypes import wintypes

class WHV_UINT128(ctypes.Structure):
    _fields_ = [
        ("Anonymous", _Anonymous_e__Struct),
        ("Dword", wintypes.DWORD * 4),
    ]

class WHV_X64_FP_REGISTER(ctypes.Structure):
    _fields_ = [
        ("Anonymous", _Anonymous_e__Struct),
        ("AsUINT128", WHV_UINT128),
    ]

class WHV_X64_FP_CONTROL_STATUS_REGISTER(ctypes.Structure):
    _fields_ = [
        ("Anonymous", _Anonymous_e__Struct),
        ("AsUINT128", WHV_UINT128),
    ]

class WHV_X64_XMM_CONTROL_STATUS_REGISTER(ctypes.Structure):
    _fields_ = [
        ("Anonymous", _Anonymous_e__Struct),
        ("AsUINT128", WHV_UINT128),
    ]

class WHV_X64_SEGMENT_REGISTER(ctypes.Structure):
    _fields_ = [
        ("Base", ctypes.c_ulonglong),
        ("Limit", wintypes.DWORD),
        ("Selector", ctypes.c_ushort),
        ("Anonymous", _Anonymous_e__Union),
    ]

class WHV_X64_TABLE_REGISTER(ctypes.Structure):
    _fields_ = [
        ("Pad", ctypes.c_ushort * 3),
        ("Limit", ctypes.c_ushort),
        ("Base", ctypes.c_ulonglong),
    ]

class WHV_X64_INTERRUPT_STATE_REGISTER(ctypes.Structure):
    _fields_ = [
        ("Anonymous", _Anonymous_e__Struct),
        ("AsUINT64", ctypes.c_ulonglong),
    ]

class WHV_X64_PENDING_INTERRUPTION_REGISTER(ctypes.Structure):
    _fields_ = [
        ("Anonymous", _Anonymous_e__Struct),
        ("AsUINT64", ctypes.c_ulonglong),
    ]

class WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER(ctypes.Structure):
    _fields_ = [
        ("Anonymous", _Anonymous_e__Struct),
        ("AsUINT64", ctypes.c_ulonglong),
    ]

class WHV_X64_PENDING_EXCEPTION_EVENT(ctypes.Structure):
    _fields_ = [
        ("Anonymous", _Anonymous_e__Struct),
        ("AsUINT128", WHV_UINT128),
    ]

class WHV_X64_PENDING_EXT_INT_EVENT(ctypes.Structure):
    _fields_ = [
        ("Anonymous", _Anonymous_e__Struct),
        ("AsUINT128", WHV_UINT128),
    ]

class WHV_INTERNAL_ACTIVITY_REGISTER(ctypes.Structure):
    _fields_ = [
        ("Anonymous", _Anonymous_e__Struct),
        ("AsUINT64", ctypes.c_ulonglong),
    ]

class WHV_X64_PENDING_DEBUG_EXCEPTION(ctypes.Structure):
    _fields_ = [
        ("AsUINT64", ctypes.c_ulonglong),
        ("Anonymous", _Anonymous_e__Struct),
    ]

class WHV_REGISTER_VALUE(ctypes.Structure):
    _fields_ = [
        ("Reg128", WHV_UINT128),
        ("Reg64", ctypes.c_ulonglong),
        ("Reg32", wintypes.DWORD),
        ("Reg16", ctypes.c_ushort),
        ("Reg8", ctypes.c_ubyte),
        ("Fp", WHV_X64_FP_REGISTER),
        ("FpControlStatus", WHV_X64_FP_CONTROL_STATUS_REGISTER),
        ("XmmControlStatus", WHV_X64_XMM_CONTROL_STATUS_REGISTER),
        ("Segment", WHV_X64_SEGMENT_REGISTER),
        ("Table", WHV_X64_TABLE_REGISTER),
        ("InterruptState", WHV_X64_INTERRUPT_STATE_REGISTER),
        ("PendingInterruption", WHV_X64_PENDING_INTERRUPTION_REGISTER),
        ("DeliverabilityNotifications", WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER),
        ("ExceptionEvent", WHV_X64_PENDING_EXCEPTION_EVENT),
        ("ExtIntEvent", WHV_X64_PENDING_EXT_INT_EVENT),
        ("InternalActivity", WHV_INTERNAL_ACTIVITY_REGISTER),
        ("PendingDebugException", WHV_X64_PENDING_DEBUG_EXCEPTION),
    ]
#[repr(C)]
pub struct WHV_UINT128 {
    pub Anonymous: _Anonymous_e__Struct,
    pub Dword: [u32; 4],
}

#[repr(C)]
pub struct WHV_X64_FP_REGISTER {
    pub Anonymous: _Anonymous_e__Struct,
    pub AsUINT128: WHV_UINT128,
}

#[repr(C)]
pub struct WHV_X64_FP_CONTROL_STATUS_REGISTER {
    pub Anonymous: _Anonymous_e__Struct,
    pub AsUINT128: WHV_UINT128,
}

#[repr(C)]
pub struct WHV_X64_XMM_CONTROL_STATUS_REGISTER {
    pub Anonymous: _Anonymous_e__Struct,
    pub AsUINT128: WHV_UINT128,
}

#[repr(C)]
pub struct WHV_X64_SEGMENT_REGISTER {
    pub Base: u64,
    pub Limit: u32,
    pub Selector: u16,
    pub Anonymous: _Anonymous_e__Union,
}

#[repr(C)]
pub struct WHV_X64_TABLE_REGISTER {
    pub Pad: [u16; 3],
    pub Limit: u16,
    pub Base: u64,
}

#[repr(C)]
pub struct WHV_X64_INTERRUPT_STATE_REGISTER {
    pub Anonymous: _Anonymous_e__Struct,
    pub AsUINT64: u64,
}

#[repr(C)]
pub struct WHV_X64_PENDING_INTERRUPTION_REGISTER {
    pub Anonymous: _Anonymous_e__Struct,
    pub AsUINT64: u64,
}

#[repr(C)]
pub struct WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER {
    pub Anonymous: _Anonymous_e__Struct,
    pub AsUINT64: u64,
}

#[repr(C)]
pub struct WHV_X64_PENDING_EXCEPTION_EVENT {
    pub Anonymous: _Anonymous_e__Struct,
    pub AsUINT128: WHV_UINT128,
}

#[repr(C)]
pub struct WHV_X64_PENDING_EXT_INT_EVENT {
    pub Anonymous: _Anonymous_e__Struct,
    pub AsUINT128: WHV_UINT128,
}

#[repr(C)]
pub struct WHV_INTERNAL_ACTIVITY_REGISTER {
    pub Anonymous: _Anonymous_e__Struct,
    pub AsUINT64: u64,
}

#[repr(C)]
pub struct WHV_X64_PENDING_DEBUG_EXCEPTION {
    pub AsUINT64: u64,
    pub Anonymous: _Anonymous_e__Struct,
}

#[repr(C)]
pub struct WHV_REGISTER_VALUE {
    pub Reg128: WHV_UINT128,
    pub Reg64: u64,
    pub Reg32: u32,
    pub Reg16: u16,
    pub Reg8: u8,
    pub Fp: WHV_X64_FP_REGISTER,
    pub FpControlStatus: WHV_X64_FP_CONTROL_STATUS_REGISTER,
    pub XmmControlStatus: WHV_X64_XMM_CONTROL_STATUS_REGISTER,
    pub Segment: WHV_X64_SEGMENT_REGISTER,
    pub Table: WHV_X64_TABLE_REGISTER,
    pub InterruptState: WHV_X64_INTERRUPT_STATE_REGISTER,
    pub PendingInterruption: WHV_X64_PENDING_INTERRUPTION_REGISTER,
    pub DeliverabilityNotifications: WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER,
    pub ExceptionEvent: WHV_X64_PENDING_EXCEPTION_EVENT,
    pub ExtIntEvent: WHV_X64_PENDING_EXT_INT_EVENT,
    pub InternalActivity: WHV_INTERNAL_ACTIVITY_REGISTER,
    pub PendingDebugException: WHV_X64_PENDING_DEBUG_EXCEPTION,
}
import "golang.org/x/sys/windows"

type WHV_UINT128 struct {
	Anonymous _Anonymous_e__Struct
	Dword [4]uint32
}

type WHV_X64_FP_REGISTER struct {
	Anonymous _Anonymous_e__Struct
	AsUINT128 WHV_UINT128
}

type WHV_X64_FP_CONTROL_STATUS_REGISTER struct {
	Anonymous _Anonymous_e__Struct
	AsUINT128 WHV_UINT128
}

type WHV_X64_XMM_CONTROL_STATUS_REGISTER struct {
	Anonymous _Anonymous_e__Struct
	AsUINT128 WHV_UINT128
}

type WHV_X64_SEGMENT_REGISTER struct {
	Base uint64
	Limit uint32
	Selector uint16
	Anonymous _Anonymous_e__Union
}

type WHV_X64_TABLE_REGISTER struct {
	Pad [3]uint16
	Limit uint16
	Base uint64
}

type WHV_X64_INTERRUPT_STATE_REGISTER struct {
	Anonymous _Anonymous_e__Struct
	AsUINT64 uint64
}

type WHV_X64_PENDING_INTERRUPTION_REGISTER struct {
	Anonymous _Anonymous_e__Struct
	AsUINT64 uint64
}

type WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER struct {
	Anonymous _Anonymous_e__Struct
	AsUINT64 uint64
}

type WHV_X64_PENDING_EXCEPTION_EVENT struct {
	Anonymous _Anonymous_e__Struct
	AsUINT128 WHV_UINT128
}

type WHV_X64_PENDING_EXT_INT_EVENT struct {
	Anonymous _Anonymous_e__Struct
	AsUINT128 WHV_UINT128
}

type WHV_INTERNAL_ACTIVITY_REGISTER struct {
	Anonymous _Anonymous_e__Struct
	AsUINT64 uint64
}

type WHV_X64_PENDING_DEBUG_EXCEPTION struct {
	AsUINT64 uint64
	Anonymous _Anonymous_e__Struct
}

type WHV_REGISTER_VALUE struct {
	Reg128 WHV_UINT128
	Reg64 uint64
	Reg32 uint32
	Reg16 uint16
	Reg8 byte
	Fp WHV_X64_FP_REGISTER
	FpControlStatus WHV_X64_FP_CONTROL_STATUS_REGISTER
	XmmControlStatus WHV_X64_XMM_CONTROL_STATUS_REGISTER
	Segment WHV_X64_SEGMENT_REGISTER
	Table WHV_X64_TABLE_REGISTER
	InterruptState WHV_X64_INTERRUPT_STATE_REGISTER
	PendingInterruption WHV_X64_PENDING_INTERRUPTION_REGISTER
	DeliverabilityNotifications WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER
	ExceptionEvent WHV_X64_PENDING_EXCEPTION_EVENT
	ExtIntEvent WHV_X64_PENDING_EXT_INT_EVENT
	InternalActivity WHV_INTERNAL_ACTIVITY_REGISTER
	PendingDebugException WHV_X64_PENDING_DEBUG_EXCEPTION
}
type
  WHV_UINT128 = record
    Anonymous: _Anonymous_e__Struct;
    Dword: array[0..3] of DWORD;
  end;

  WHV_X64_FP_REGISTER = record
    Anonymous: _Anonymous_e__Struct;
    AsUINT128: WHV_UINT128;
  end;

  WHV_X64_FP_CONTROL_STATUS_REGISTER = record
    Anonymous: _Anonymous_e__Struct;
    AsUINT128: WHV_UINT128;
  end;

  WHV_X64_XMM_CONTROL_STATUS_REGISTER = record
    Anonymous: _Anonymous_e__Struct;
    AsUINT128: WHV_UINT128;
  end;

  WHV_X64_SEGMENT_REGISTER = record
    Base: UInt64;
    Limit: DWORD;
    Selector: Word;
    Anonymous: _Anonymous_e__Union;
  end;

  WHV_X64_TABLE_REGISTER = record
    Pad: array[0..2] of Word;
    Limit: Word;
    Base: UInt64;
  end;

  WHV_X64_INTERRUPT_STATE_REGISTER = record
    Anonymous: _Anonymous_e__Struct;
    AsUINT64: UInt64;
  end;

  WHV_X64_PENDING_INTERRUPTION_REGISTER = record
    Anonymous: _Anonymous_e__Struct;
    AsUINT64: UInt64;
  end;

  WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER = record
    Anonymous: _Anonymous_e__Struct;
    AsUINT64: UInt64;
  end;

  WHV_X64_PENDING_EXCEPTION_EVENT = record
    Anonymous: _Anonymous_e__Struct;
    AsUINT128: WHV_UINT128;
  end;

  WHV_X64_PENDING_EXT_INT_EVENT = record
    Anonymous: _Anonymous_e__Struct;
    AsUINT128: WHV_UINT128;
  end;

  WHV_INTERNAL_ACTIVITY_REGISTER = record
    Anonymous: _Anonymous_e__Struct;
    AsUINT64: UInt64;
  end;

  WHV_X64_PENDING_DEBUG_EXCEPTION = record
    AsUINT64: UInt64;
    Anonymous: _Anonymous_e__Struct;
  end;

  WHV_REGISTER_VALUE = record
    Reg128: WHV_UINT128;
    Reg64: UInt64;
    Reg32: DWORD;
    Reg16: Word;
    Reg8: Byte;
    Fp: WHV_X64_FP_REGISTER;
    FpControlStatus: WHV_X64_FP_CONTROL_STATUS_REGISTER;
    XmmControlStatus: WHV_X64_XMM_CONTROL_STATUS_REGISTER;
    Segment: WHV_X64_SEGMENT_REGISTER;
    Table: WHV_X64_TABLE_REGISTER;
    InterruptState: WHV_X64_INTERRUPT_STATE_REGISTER;
    PendingInterruption: WHV_X64_PENDING_INTERRUPTION_REGISTER;
    DeliverabilityNotifications: WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER;
    ExceptionEvent: WHV_X64_PENDING_EXCEPTION_EVENT;
    ExtIntEvent: WHV_X64_PENDING_EXT_INT_EVENT;
    InternalActivity: WHV_INTERNAL_ACTIVITY_REGISTER;
    PendingDebugException: WHV_X64_PENDING_DEBUG_EXCEPTION;
  end;
const WHV_UINT128 = extern struct {
    Anonymous: _Anonymous_e__Struct,
    Dword: [4]u32,
};

const WHV_X64_FP_REGISTER = extern struct {
    Anonymous: _Anonymous_e__Struct,
    AsUINT128: WHV_UINT128,
};

const WHV_X64_FP_CONTROL_STATUS_REGISTER = extern struct {
    Anonymous: _Anonymous_e__Struct,
    AsUINT128: WHV_UINT128,
};

const WHV_X64_XMM_CONTROL_STATUS_REGISTER = extern struct {
    Anonymous: _Anonymous_e__Struct,
    AsUINT128: WHV_UINT128,
};

const WHV_X64_SEGMENT_REGISTER = extern struct {
    Base: u64,
    Limit: u32,
    Selector: u16,
    Anonymous: _Anonymous_e__Union,
};

const WHV_X64_TABLE_REGISTER = extern struct {
    Pad: [3]u16,
    Limit: u16,
    Base: u64,
};

const WHV_X64_INTERRUPT_STATE_REGISTER = extern struct {
    Anonymous: _Anonymous_e__Struct,
    AsUINT64: u64,
};

const WHV_X64_PENDING_INTERRUPTION_REGISTER = extern struct {
    Anonymous: _Anonymous_e__Struct,
    AsUINT64: u64,
};

const WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER = extern struct {
    Anonymous: _Anonymous_e__Struct,
    AsUINT64: u64,
};

const WHV_X64_PENDING_EXCEPTION_EVENT = extern struct {
    Anonymous: _Anonymous_e__Struct,
    AsUINT128: WHV_UINT128,
};

const WHV_X64_PENDING_EXT_INT_EVENT = extern struct {
    Anonymous: _Anonymous_e__Struct,
    AsUINT128: WHV_UINT128,
};

const WHV_INTERNAL_ACTIVITY_REGISTER = extern struct {
    Anonymous: _Anonymous_e__Struct,
    AsUINT64: u64,
};

const WHV_X64_PENDING_DEBUG_EXCEPTION = extern struct {
    AsUINT64: u64,
    Anonymous: _Anonymous_e__Struct,
};

const WHV_REGISTER_VALUE = extern struct {
    Reg128: WHV_UINT128,
    Reg64: u64,
    Reg32: u32,
    Reg16: u16,
    Reg8: u8,
    Fp: WHV_X64_FP_REGISTER,
    FpControlStatus: WHV_X64_FP_CONTROL_STATUS_REGISTER,
    XmmControlStatus: WHV_X64_XMM_CONTROL_STATUS_REGISTER,
    Segment: WHV_X64_SEGMENT_REGISTER,
    Table: WHV_X64_TABLE_REGISTER,
    InterruptState: WHV_X64_INTERRUPT_STATE_REGISTER,
    PendingInterruption: WHV_X64_PENDING_INTERRUPTION_REGISTER,
    DeliverabilityNotifications: WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER,
    ExceptionEvent: WHV_X64_PENDING_EXCEPTION_EVENT,
    ExtIntEvent: WHV_X64_PENDING_EXT_INT_EVENT,
    InternalActivity: WHV_INTERNAL_ACTIVITY_REGISTER,
    PendingDebugException: WHV_X64_PENDING_DEBUG_EXCEPTION,
};
type
  WHV_UINT128 {.bycopy.} = object
    Anonymous: _Anonymous_e__Struct
    Dword: array[4, uint32]

  WHV_X64_FP_REGISTER {.bycopy.} = object
    Anonymous: _Anonymous_e__Struct
    AsUINT128: WHV_UINT128

  WHV_X64_FP_CONTROL_STATUS_REGISTER {.bycopy.} = object
    Anonymous: _Anonymous_e__Struct
    AsUINT128: WHV_UINT128

  WHV_X64_XMM_CONTROL_STATUS_REGISTER {.bycopy.} = object
    Anonymous: _Anonymous_e__Struct
    AsUINT128: WHV_UINT128

  WHV_X64_SEGMENT_REGISTER {.bycopy.} = object
    Base: uint64
    Limit: uint32
    Selector: uint16
    Anonymous: _Anonymous_e__Union

  WHV_X64_TABLE_REGISTER {.bycopy.} = object
    Pad: array[3, uint16]
    Limit: uint16
    Base: uint64

  WHV_X64_INTERRUPT_STATE_REGISTER {.bycopy.} = object
    Anonymous: _Anonymous_e__Struct
    AsUINT64: uint64

  WHV_X64_PENDING_INTERRUPTION_REGISTER {.bycopy.} = object
    Anonymous: _Anonymous_e__Struct
    AsUINT64: uint64

  WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER {.bycopy.} = object
    Anonymous: _Anonymous_e__Struct
    AsUINT64: uint64

  WHV_X64_PENDING_EXCEPTION_EVENT {.bycopy.} = object
    Anonymous: _Anonymous_e__Struct
    AsUINT128: WHV_UINT128

  WHV_X64_PENDING_EXT_INT_EVENT {.bycopy.} = object
    Anonymous: _Anonymous_e__Struct
    AsUINT128: WHV_UINT128

  WHV_INTERNAL_ACTIVITY_REGISTER {.bycopy.} = object
    Anonymous: _Anonymous_e__Struct
    AsUINT64: uint64

  WHV_X64_PENDING_DEBUG_EXCEPTION {.bycopy.} = object
    AsUINT64: uint64
    Anonymous: _Anonymous_e__Struct

  WHV_REGISTER_VALUE {.bycopy.} = object
    Reg128: WHV_UINT128
    Reg64: uint64
    Reg32: uint32
    Reg16: uint16
    Reg8: uint8
    Fp: WHV_X64_FP_REGISTER
    FpControlStatus: WHV_X64_FP_CONTROL_STATUS_REGISTER
    XmmControlStatus: WHV_X64_XMM_CONTROL_STATUS_REGISTER
    Segment: WHV_X64_SEGMENT_REGISTER
    Table: WHV_X64_TABLE_REGISTER
    InterruptState: WHV_X64_INTERRUPT_STATE_REGISTER
    PendingInterruption: WHV_X64_PENDING_INTERRUPTION_REGISTER
    DeliverabilityNotifications: WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER
    ExceptionEvent: WHV_X64_PENDING_EXCEPTION_EVENT
    ExtIntEvent: WHV_X64_PENDING_EXT_INT_EVENT
    InternalActivity: WHV_INTERNAL_ACTIVITY_REGISTER
    PendingDebugException: WHV_X64_PENDING_DEBUG_EXCEPTION
struct WHV_UINT128
{
    _Anonymous_e__Struct Anonymous;
    uint[4] Dword;
}

struct WHV_X64_FP_REGISTER
{
    _Anonymous_e__Struct Anonymous;
    WHV_UINT128 AsUINT128;
}

struct WHV_X64_FP_CONTROL_STATUS_REGISTER
{
    _Anonymous_e__Struct Anonymous;
    WHV_UINT128 AsUINT128;
}

struct WHV_X64_XMM_CONTROL_STATUS_REGISTER
{
    _Anonymous_e__Struct Anonymous;
    WHV_UINT128 AsUINT128;
}

struct WHV_X64_SEGMENT_REGISTER
{
    ulong Base;
    uint Limit;
    ushort Selector;
    _Anonymous_e__Union Anonymous;
}

struct WHV_X64_TABLE_REGISTER
{
    ushort[3] Pad;
    ushort Limit;
    ulong Base;
}

struct WHV_X64_INTERRUPT_STATE_REGISTER
{
    _Anonymous_e__Struct Anonymous;
    ulong AsUINT64;
}

struct WHV_X64_PENDING_INTERRUPTION_REGISTER
{
    _Anonymous_e__Struct Anonymous;
    ulong AsUINT64;
}

struct WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER
{
    _Anonymous_e__Struct Anonymous;
    ulong AsUINT64;
}

struct WHV_X64_PENDING_EXCEPTION_EVENT
{
    _Anonymous_e__Struct Anonymous;
    WHV_UINT128 AsUINT128;
}

struct WHV_X64_PENDING_EXT_INT_EVENT
{
    _Anonymous_e__Struct Anonymous;
    WHV_UINT128 AsUINT128;
}

struct WHV_INTERNAL_ACTIVITY_REGISTER
{
    _Anonymous_e__Struct Anonymous;
    ulong AsUINT64;
}

struct WHV_X64_PENDING_DEBUG_EXCEPTION
{
    ulong AsUINT64;
    _Anonymous_e__Struct Anonymous;
}

struct WHV_REGISTER_VALUE
{
    WHV_UINT128 Reg128;
    ulong Reg64;
    uint Reg32;
    ushort Reg16;
    ubyte Reg8;
    WHV_X64_FP_REGISTER Fp;
    WHV_X64_FP_CONTROL_STATUS_REGISTER FpControlStatus;
    WHV_X64_XMM_CONTROL_STATUS_REGISTER XmmControlStatus;
    WHV_X64_SEGMENT_REGISTER Segment;
    WHV_X64_TABLE_REGISTER Table;
    WHV_X64_INTERRUPT_STATE_REGISTER InterruptState;
    WHV_X64_PENDING_INTERRUPTION_REGISTER PendingInterruption;
    WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER DeliverabilityNotifications;
    WHV_X64_PENDING_EXCEPTION_EVENT ExceptionEvent;
    WHV_X64_PENDING_EXT_INT_EVENT ExtIntEvent;
    WHV_INTERNAL_ACTIVITY_REGISTER InternalActivity;
    WHV_X64_PENDING_DEBUG_EXCEPTION PendingDebugException;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WHV_REGISTER_VALUE サイズ: 24 バイト(x64)
dim st, 6    ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; Reg128 : WHV_UINT128 (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; Reg64 : ULONGLONG (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; Reg32 : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Reg16 : WORD (+0, 2byte)  wpoke st,0,値  /  値 = wpeek(st,0)
; Reg8 : BYTE (+0, 1byte)  poke st,0,値  /  値 = peek(st,0)
; Fp : WHV_X64_FP_REGISTER (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; FpControlStatus : WHV_X64_FP_CONTROL_STATUS_REGISTER (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; XmmControlStatus : WHV_X64_XMM_CONTROL_STATUS_REGISTER (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; Segment : WHV_X64_SEGMENT_REGISTER (+0, 24byte)  varptr(st)+0 を基点に操作(24byte:入れ子/配列)
; Table : WHV_X64_TABLE_REGISTER (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; InterruptState : WHV_X64_INTERRUPT_STATE_REGISTER (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; PendingInterruption : WHV_X64_PENDING_INTERRUPTION_REGISTER (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; DeliverabilityNotifications : WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; ExceptionEvent : WHV_X64_PENDING_EXCEPTION_EVENT (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; ExtIntEvent : WHV_X64_PENDING_EXT_INT_EVENT (+0, 16byte)  varptr(st)+0 を基点に操作(16byte:入れ子/配列)
; InternalActivity : WHV_INTERNAL_ACTIVITY_REGISTER (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; PendingDebugException : WHV_X64_PENDING_DEBUG_EXCEPTION (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global WHV_X64_SEGMENT_REGISTER
    #field int64 Base
    #field int Limit
    #field short Selector
    #field byte Anonymous 8
#endstruct

#defstruct global WHV_X64_TABLE_REGISTER
    #field short Pad 3
    #field short Limit
    #field int64 Base
#endstruct

#defstruct global WHV_REGISTER_VALUE
    #field byte Reg128 16
    #field int64 Reg64
    #field int Reg32
    #field short Reg16
    #field byte Reg8
    #field byte Fp 16
    #field byte FpControlStatus 16
    #field byte XmmControlStatus 16
    #field WHV_X64_SEGMENT_REGISTER Segment
    #field WHV_X64_TABLE_REGISTER Table
    #field byte InterruptState 8
    #field byte PendingInterruption 8
    #field byte DeliverabilityNotifications 8
    #field byte ExceptionEvent 16
    #field byte ExtIntEvent 16
    #field byte InternalActivity 8
    #field byte PendingDebugException 8
#endstruct

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