ホーム › System.Hypervisor › WHV_PROCESSOR_APIC_COUNTERS
WHV_PROCESSOR_APIC_COUNTERS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| MmioAccessCount | ULONGLONG | 8 | +0 | +0 | APIC MMIOアクセスの累積回数を示すULONGLONGである。 |
| EoiAccessCount | ULONGLONG | 8 | +8 | +8 | EOIアクセスの累積回数を示すULONGLONGである。 |
| TprAccessCount | ULONGLONG | 8 | +16 | +16 | TPR(タスク優先度レジスタ)アクセスの累積回数を示すULONGLONGである。 |
| SentIpiCount | ULONGLONG | 8 | +24 | +24 | 送信されたプロセッサ間割り込み(IPI)の累積回数を示すULONGLONGである。 |
| SelfIpiCount | ULONGLONG | 8 | +32 | +32 | 自己宛IPIの累積回数を示すULONGLONGである。 |
各言語での定義
#include <windows.h>
// WHV_PROCESSOR_APIC_COUNTERS (x64 40 / x86 40 バイト)
typedef struct WHV_PROCESSOR_APIC_COUNTERS {
ULONGLONG MmioAccessCount;
ULONGLONG EoiAccessCount;
ULONGLONG TprAccessCount;
ULONGLONG SentIpiCount;
ULONGLONG SelfIpiCount;
} WHV_PROCESSOR_APIC_COUNTERS;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WHV_PROCESSOR_APIC_COUNTERS
{
public ulong MmioAccessCount;
public ulong EoiAccessCount;
public ulong TprAccessCount;
public ulong SentIpiCount;
public ulong SelfIpiCount;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WHV_PROCESSOR_APIC_COUNTERS
Public MmioAccessCount As ULong
Public EoiAccessCount As ULong
Public TprAccessCount As ULong
Public SentIpiCount As ULong
Public SelfIpiCount As ULong
End Structureimport ctypes
from ctypes import wintypes
class WHV_PROCESSOR_APIC_COUNTERS(ctypes.Structure):
_fields_ = [
("MmioAccessCount", ctypes.c_ulonglong),
("EoiAccessCount", ctypes.c_ulonglong),
("TprAccessCount", ctypes.c_ulonglong),
("SentIpiCount", ctypes.c_ulonglong),
("SelfIpiCount", ctypes.c_ulonglong),
]#[repr(C)]
pub struct WHV_PROCESSOR_APIC_COUNTERS {
pub MmioAccessCount: u64,
pub EoiAccessCount: u64,
pub TprAccessCount: u64,
pub SentIpiCount: u64,
pub SelfIpiCount: u64,
}import "golang.org/x/sys/windows"
type WHV_PROCESSOR_APIC_COUNTERS struct {
MmioAccessCount uint64
EoiAccessCount uint64
TprAccessCount uint64
SentIpiCount uint64
SelfIpiCount uint64
}type
WHV_PROCESSOR_APIC_COUNTERS = record
MmioAccessCount: UInt64;
EoiAccessCount: UInt64;
TprAccessCount: UInt64;
SentIpiCount: UInt64;
SelfIpiCount: UInt64;
end;const WHV_PROCESSOR_APIC_COUNTERS = extern struct {
MmioAccessCount: u64,
EoiAccessCount: u64,
TprAccessCount: u64,
SentIpiCount: u64,
SelfIpiCount: u64,
};type
WHV_PROCESSOR_APIC_COUNTERS {.bycopy.} = object
MmioAccessCount: uint64
EoiAccessCount: uint64
TprAccessCount: uint64
SentIpiCount: uint64
SelfIpiCount: uint64struct WHV_PROCESSOR_APIC_COUNTERS
{
ulong MmioAccessCount;
ulong EoiAccessCount;
ulong TprAccessCount;
ulong SentIpiCount;
ulong SelfIpiCount;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WHV_PROCESSOR_APIC_COUNTERS サイズ: 40 バイト(x64)
dim st, 10 ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; MmioAccessCount : ULONGLONG (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; EoiAccessCount : ULONGLONG (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; TprAccessCount : ULONGLONG (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; SentIpiCount : ULONGLONG (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; SelfIpiCount : ULONGLONG (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WHV_PROCESSOR_APIC_COUNTERS
#field int64 MmioAccessCount
#field int64 EoiAccessCount
#field int64 TprAccessCount
#field int64 SentIpiCount
#field int64 SelfIpiCount
#endstruct
stdim st, WHV_PROCESSOR_APIC_COUNTERS ; NSTRUCT 変数を確保
st->MmioAccessCount = 100
mes "MmioAccessCount=" + st->MmioAccessCount