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

WHV_PROCESSOR_APIC_COUNTERS

構造体
サイズx64: 40 バイト / x86: 40 バイト

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

フィールド

フィールドサイズx64x86説明
MmioAccessCountULONGLONG8+0+0APIC MMIOアクセスの累積回数を示すULONGLONGである。
EoiAccessCountULONGLONG8+8+8EOIアクセスの累積回数を示すULONGLONGである。
TprAccessCountULONGLONG8+16+16TPR(タスク優先度レジスタ)アクセスの累積回数を示すULONGLONGである。
SentIpiCountULONGLONG8+24+24送信されたプロセッサ間割り込み(IPI)の累積回数を示すULONGLONGである。
SelfIpiCountULONGLONG8+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 Structure
import 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: uint64
struct 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