ホーム › System.Hypervisor › WHV_REGISTER_VALUE
WHV_REGISTER_VALUE
共用体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Reg128 | WHV_UINT128 | 16 | +0 | +0 | レジスタ値を128ビットとして保持するWHV_UINT128である。 |
| Reg64 | ULONGLONG | 8 | +0 | +0 | レジスタ値を64ビット整数として保持するULONGLONGである。 |
| Reg32 | DWORD | 4 | +0 | +0 | レジスタ値を32ビット整数として保持するDWORDである。 |
| Reg16 | WORD | 2 | +0 | +0 | レジスタ値を16ビット整数として保持するWORDである。 |
| Reg8 | BYTE | 1 | +0 | +0 | レジスタ値を8ビット整数として保持するBYTEである。 |
| Fp | WHV_X64_FP_REGISTER | 16 | +0 | +0 | x87浮動小数点レジスタ値を保持するWHV_X64_FP_REGISTERである。 |
| FpControlStatus | WHV_X64_FP_CONTROL_STATUS_REGISTER | 16 | +0 | +0 | FPU制御/状態レジスタ値を保持するWHV_X64_FP_CONTROL_STATUS_REGISTERである。 |
| XmmControlStatus | WHV_X64_XMM_CONTROL_STATUS_REGISTER | 16 | +0 | +0 | XMM制御/状態レジスタ値を保持するWHV_X64_XMM_CONTROL_STATUS_REGISTERである。 |
| Segment | WHV_X64_SEGMENT_REGISTER | 24 | +0 | +0 | セグメントレジスタ値を保持するWHV_X64_SEGMENT_REGISTERである。 |
| Table | WHV_X64_TABLE_REGISTER | 16 | +0 | +0 | ディスクリプタテーブルレジスタ値を保持するWHV_X64_TABLE_REGISTERである。 |
| InterruptState | WHV_X64_INTERRUPT_STATE_REGISTER | 8 | +0 | +0 | 割り込み状態レジスタ値を保持するWHV_X64_INTERRUPT_STATE_REGISTERである。 |
| PendingInterruption | WHV_X64_PENDING_INTERRUPTION_REGISTER | 8 | +0 | +0 | 保留中割り込みレジスタ値を保持するWHV_X64_PENDING_INTERRUPTION_REGISTERである。 |
| DeliverabilityNotifications | WHV_X64_DELIVERABILITY_NOTIFICATIONS_REGISTER | 8 | +0 | +0 | 配信可能通知レジスタ値を保持する構造体である。 |
| ExceptionEvent | WHV_X64_PENDING_EXCEPTION_EVENT | 16 | +0 | +0 | 保留中例外イベント値を保持するWHV_X64_PENDING_EXCEPTION_EVENTである。 |
| ExtIntEvent | WHV_X64_PENDING_EXT_INT_EVENT | 16 | +0 | +0 | 保留中外部割り込みイベント値を保持するWHV_X64_PENDING_EXT_INT_EVENTである。 |
| InternalActivity | WHV_INTERNAL_ACTIVITY_REGISTER | 8 | +0 | +0 | 内部活動状態レジスタ値を保持するWHV_INTERNAL_ACTIVITY_REGISTERである。 |
| PendingDebugException | WHV_X64_PENDING_DEBUG_EXCEPTION | 8 | +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 Structureimport 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_EXCEPTIONstruct 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 非対応)。必要に応じ手動でアクセス。