ホーム › System.Hypervisor › WHV_X64_CPUID_ACCESS_CONTEXT
WHV_X64_CPUID_ACCESS_CONTEXT
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Rax | ULONGLONG | 8 | +0 | +0 | CPUID実行時のRAXレジスタ値(入力リーフ)である。 |
| Rcx | ULONGLONG | 8 | +8 | +8 | CPUID実行時のRCXレジスタ値(入力サブリーフ)である。 |
| Rdx | ULONGLONG | 8 | +16 | +16 | CPUID実行時のRDXレジスタ値である。 |
| Rbx | ULONGLONG | 8 | +24 | +24 | CPUID実行時のRBXレジスタ値である。 |
| DefaultResultRax | ULONGLONG | 8 | +32 | +32 | ハイパーバイザが算出した既定のRAX出力値である。上書き可能。 |
| DefaultResultRcx | ULONGLONG | 8 | +40 | +40 | ハイパーバイザが算出した既定のRCX出力値である。上書き可能。 |
| DefaultResultRdx | ULONGLONG | 8 | +48 | +48 | ハイパーバイザが算出した既定のRDX出力値である。上書き可能。 |
| DefaultResultRbx | ULONGLONG | 8 | +56 | +56 | ハイパーバイザが算出した既定のRBX出力値である。上書き可能。 |
各言語での定義
#include <windows.h>
// WHV_X64_CPUID_ACCESS_CONTEXT (x64 64 / x86 64 バイト)
typedef struct WHV_X64_CPUID_ACCESS_CONTEXT {
ULONGLONG Rax;
ULONGLONG Rcx;
ULONGLONG Rdx;
ULONGLONG Rbx;
ULONGLONG DefaultResultRax;
ULONGLONG DefaultResultRcx;
ULONGLONG DefaultResultRdx;
ULONGLONG DefaultResultRbx;
} WHV_X64_CPUID_ACCESS_CONTEXT;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_X64_CPUID_ACCESS_CONTEXT
{
public ulong Rax;
public ulong Rcx;
public ulong Rdx;
public ulong Rbx;
public ulong DefaultResultRax;
public ulong DefaultResultRcx;
public ulong DefaultResultRdx;
public ulong DefaultResultRbx;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_X64_CPUID_ACCESS_CONTEXT
Public Rax As ULong
Public Rcx As ULong
Public Rdx As ULong
Public Rbx As ULong
Public DefaultResultRax As ULong
Public DefaultResultRcx As ULong
Public DefaultResultRdx As ULong
Public DefaultResultRbx As ULong
End Structureimport ctypes
from ctypes import wintypes
class WHV_X64_CPUID_ACCESS_CONTEXT(ctypes.Structure):
_fields_ = [
("Rax", ctypes.c_ulonglong),
("Rcx", ctypes.c_ulonglong),
("Rdx", ctypes.c_ulonglong),
("Rbx", ctypes.c_ulonglong),
("DefaultResultRax", ctypes.c_ulonglong),
("DefaultResultRcx", ctypes.c_ulonglong),
("DefaultResultRdx", ctypes.c_ulonglong),
("DefaultResultRbx", ctypes.c_ulonglong),
]#[repr(C)]
pub struct WHV_X64_CPUID_ACCESS_CONTEXT {
pub Rax: u64,
pub Rcx: u64,
pub Rdx: u64,
pub Rbx: u64,
pub DefaultResultRax: u64,
pub DefaultResultRcx: u64,
pub DefaultResultRdx: u64,
pub DefaultResultRbx: u64,
}import "golang.org/x/sys/windows"
type WHV_X64_CPUID_ACCESS_CONTEXT struct {
Rax uint64
Rcx uint64
Rdx uint64
Rbx uint64
DefaultResultRax uint64
DefaultResultRcx uint64
DefaultResultRdx uint64
DefaultResultRbx uint64
}type
WHV_X64_CPUID_ACCESS_CONTEXT = record
Rax: UInt64;
Rcx: UInt64;
Rdx: UInt64;
Rbx: UInt64;
DefaultResultRax: UInt64;
DefaultResultRcx: UInt64;
DefaultResultRdx: UInt64;
DefaultResultRbx: UInt64;
end;const WHV_X64_CPUID_ACCESS_CONTEXT = extern struct {
Rax: u64,
Rcx: u64,
Rdx: u64,
Rbx: u64,
DefaultResultRax: u64,
DefaultResultRcx: u64,
DefaultResultRdx: u64,
DefaultResultRbx: u64,
};type
WHV_X64_CPUID_ACCESS_CONTEXT {.bycopy.} = object
Rax: uint64
Rcx: uint64
Rdx: uint64
Rbx: uint64
DefaultResultRax: uint64
DefaultResultRcx: uint64
DefaultResultRdx: uint64
DefaultResultRbx: uint64struct WHV_X64_CPUID_ACCESS_CONTEXT
{
ulong Rax;
ulong Rcx;
ulong Rdx;
ulong Rbx;
ulong DefaultResultRax;
ulong DefaultResultRcx;
ulong DefaultResultRdx;
ulong DefaultResultRbx;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WHV_X64_CPUID_ACCESS_CONTEXT サイズ: 64 バイト(x64)
dim st, 16 ; 4byte整数×16(構造体サイズ 64 / 4 切り上げ)
; Rax : ULONGLONG (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; Rcx : ULONGLONG (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; Rdx : ULONGLONG (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; Rbx : ULONGLONG (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; DefaultResultRax : ULONGLONG (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; DefaultResultRcx : ULONGLONG (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; DefaultResultRdx : ULONGLONG (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; DefaultResultRbx : ULONGLONG (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WHV_X64_CPUID_ACCESS_CONTEXT
#field int64 Rax
#field int64 Rcx
#field int64 Rdx
#field int64 Rbx
#field int64 DefaultResultRax
#field int64 DefaultResultRcx
#field int64 DefaultResultRdx
#field int64 DefaultResultRbx
#endstruct
stdim st, WHV_X64_CPUID_ACCESS_CONTEXT ; NSTRUCT 変数を確保
st->Rax = 100
mes "Rax=" + st->Rax