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

PERF_OBJECT_TYPE

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

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

フィールド

フィールドサイズx64x86説明
TotalByteLengthDWORD4+0+0このオブジェクト定義とそれに続く全データの合計バイト長である。
DefinitionLengthDWORD4+4+4オブジェクト定義部分(カウンタ定義含む)のバイト長である。
HeaderLengthDWORD4+8+8この構造体ヘッダのバイト長である。
ObjectNameTitleIndexDWORD4+12+12オブジェクト名の文字列リソースインデックスである。
ObjectNameTitleLPWSTR8/4+16+16オブジェクト名文字列(DWORD予約または実行時設定のLPWSTR)である。
ObjectHelpTitleIndexDWORD4+24+20オブジェクトのヘルプ文字列リソースインデックスである。
ObjectHelpTitleLPWSTR8/4+32+24オブジェクトのヘルプ文字列(DWORD予約または実行時設定のLPWSTR)である。
DetailLevelDWORD4+40+28このオブジェクトの詳細レベル(PERF_DETAIL値)である。
NumCountersDWORD4+44+32このオブジェクトに含まれるカウンタ定義の個数である。
DefaultCounterINT4+48+36既定で選択されるカウンタのインデックスである。-1で無し。
NumInstancesINT4+52+40このオブジェクトのインスタンス数である。PERF_NO_INSTANCESで非インスタンス型。
CodePageDWORD4+56+44インスタンス名のコードページである。0でUnicode。
PerfTimeLONGLONG8+64+48オブジェクトのパフォーマンス計測時刻(基準クロック)である。
PerfFreqLONGLONG8+72+56パフォーマンスカウンタの周波数(1秒あたりカウント)である。

各言語での定義

#include <windows.h>

// PERF_OBJECT_TYPE  (x64 80 / x86 64 バイト)
typedef struct PERF_OBJECT_TYPE {
    DWORD TotalByteLength;
    DWORD DefinitionLength;
    DWORD HeaderLength;
    DWORD ObjectNameTitleIndex;
    LPWSTR ObjectNameTitle;
    DWORD ObjectHelpTitleIndex;
    LPWSTR ObjectHelpTitle;
    DWORD DetailLevel;
    DWORD NumCounters;
    INT DefaultCounter;
    INT NumInstances;
    DWORD CodePage;
    LONGLONG PerfTime;
    LONGLONG PerfFreq;
} PERF_OBJECT_TYPE;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PERF_OBJECT_TYPE
{
    public uint TotalByteLength;
    public uint DefinitionLength;
    public uint HeaderLength;
    public uint ObjectNameTitleIndex;
    public IntPtr ObjectNameTitle;
    public uint ObjectHelpTitleIndex;
    public IntPtr ObjectHelpTitle;
    public uint DetailLevel;
    public uint NumCounters;
    public int DefaultCounter;
    public int NumInstances;
    public uint CodePage;
    public long PerfTime;
    public long PerfFreq;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PERF_OBJECT_TYPE
    Public TotalByteLength As UInteger
    Public DefinitionLength As UInteger
    Public HeaderLength As UInteger
    Public ObjectNameTitleIndex As UInteger
    Public ObjectNameTitle As IntPtr
    Public ObjectHelpTitleIndex As UInteger
    Public ObjectHelpTitle As IntPtr
    Public DetailLevel As UInteger
    Public NumCounters As UInteger
    Public DefaultCounter As Integer
    Public NumInstances As Integer
    Public CodePage As UInteger
    Public PerfTime As Long
    Public PerfFreq As Long
End Structure
import ctypes
from ctypes import wintypes

class PERF_OBJECT_TYPE(ctypes.Structure):
    _fields_ = [
        ("TotalByteLength", wintypes.DWORD),
        ("DefinitionLength", wintypes.DWORD),
        ("HeaderLength", wintypes.DWORD),
        ("ObjectNameTitleIndex", wintypes.DWORD),
        ("ObjectNameTitle", ctypes.c_void_p),
        ("ObjectHelpTitleIndex", wintypes.DWORD),
        ("ObjectHelpTitle", ctypes.c_void_p),
        ("DetailLevel", wintypes.DWORD),
        ("NumCounters", wintypes.DWORD),
        ("DefaultCounter", ctypes.c_int),
        ("NumInstances", ctypes.c_int),
        ("CodePage", wintypes.DWORD),
        ("PerfTime", ctypes.c_longlong),
        ("PerfFreq", ctypes.c_longlong),
    ]
#[repr(C)]
pub struct PERF_OBJECT_TYPE {
    pub TotalByteLength: u32,
    pub DefinitionLength: u32,
    pub HeaderLength: u32,
    pub ObjectNameTitleIndex: u32,
    pub ObjectNameTitle: *mut core::ffi::c_void,
    pub ObjectHelpTitleIndex: u32,
    pub ObjectHelpTitle: *mut core::ffi::c_void,
    pub DetailLevel: u32,
    pub NumCounters: u32,
    pub DefaultCounter: i32,
    pub NumInstances: i32,
    pub CodePage: u32,
    pub PerfTime: i64,
    pub PerfFreq: i64,
}
import "golang.org/x/sys/windows"

type PERF_OBJECT_TYPE struct {
	TotalByteLength uint32
	DefinitionLength uint32
	HeaderLength uint32
	ObjectNameTitleIndex uint32
	ObjectNameTitle uintptr
	ObjectHelpTitleIndex uint32
	ObjectHelpTitle uintptr
	DetailLevel uint32
	NumCounters uint32
	DefaultCounter int32
	NumInstances int32
	CodePage uint32
	PerfTime int64
	PerfFreq int64
}
type
  PERF_OBJECT_TYPE = record
    TotalByteLength: DWORD;
    DefinitionLength: DWORD;
    HeaderLength: DWORD;
    ObjectNameTitleIndex: DWORD;
    ObjectNameTitle: Pointer;
    ObjectHelpTitleIndex: DWORD;
    ObjectHelpTitle: Pointer;
    DetailLevel: DWORD;
    NumCounters: DWORD;
    DefaultCounter: Integer;
    NumInstances: Integer;
    CodePage: DWORD;
    PerfTime: Int64;
    PerfFreq: Int64;
  end;
const PERF_OBJECT_TYPE = extern struct {
    TotalByteLength: u32,
    DefinitionLength: u32,
    HeaderLength: u32,
    ObjectNameTitleIndex: u32,
    ObjectNameTitle: ?*anyopaque,
    ObjectHelpTitleIndex: u32,
    ObjectHelpTitle: ?*anyopaque,
    DetailLevel: u32,
    NumCounters: u32,
    DefaultCounter: i32,
    NumInstances: i32,
    CodePage: u32,
    PerfTime: i64,
    PerfFreq: i64,
};
type
  PERF_OBJECT_TYPE {.bycopy.} = object
    TotalByteLength: uint32
    DefinitionLength: uint32
    HeaderLength: uint32
    ObjectNameTitleIndex: uint32
    ObjectNameTitle: pointer
    ObjectHelpTitleIndex: uint32
    ObjectHelpTitle: pointer
    DetailLevel: uint32
    NumCounters: uint32
    DefaultCounter: int32
    NumInstances: int32
    CodePage: uint32
    PerfTime: int64
    PerfFreq: int64
struct PERF_OBJECT_TYPE
{
    uint TotalByteLength;
    uint DefinitionLength;
    uint HeaderLength;
    uint ObjectNameTitleIndex;
    void* ObjectNameTitle;
    uint ObjectHelpTitleIndex;
    void* ObjectHelpTitle;
    uint DetailLevel;
    uint NumCounters;
    int DefaultCounter;
    int NumInstances;
    uint CodePage;
    long PerfTime;
    long PerfFreq;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; PERF_OBJECT_TYPE サイズ: 64 バイト(x86)
dim st, 16    ; 4byte整数×16(構造体サイズ 64 / 4 切り上げ)
; TotalByteLength : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; DefinitionLength : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; HeaderLength : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; ObjectNameTitleIndex : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; ObjectNameTitle : LPWSTR (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; ObjectHelpTitleIndex : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; ObjectHelpTitle : LPWSTR (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; DetailLevel : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; NumCounters : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; DefaultCounter : INT (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; NumInstances : INT (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; CodePage : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; PerfTime : LONGLONG (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; PerfFreq : LONGLONG (+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 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; PERF_OBJECT_TYPE サイズ: 80 バイト(x64)
dim st, 20    ; 4byte整数×20(構造体サイズ 80 / 4 切り上げ)
; TotalByteLength : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; DefinitionLength : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; HeaderLength : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; ObjectNameTitleIndex : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; ObjectNameTitle : LPWSTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; ObjectHelpTitleIndex : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; ObjectHelpTitle : LPWSTR (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; DetailLevel : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; NumCounters : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; DefaultCounter : INT (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; NumInstances : INT (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; CodePage : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; PerfTime : LONGLONG (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; PerfFreq : LONGLONG (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global PERF_OBJECT_TYPE
    #field int TotalByteLength
    #field int DefinitionLength
    #field int HeaderLength
    #field int ObjectNameTitleIndex
    #field intptr ObjectNameTitle
    #field int ObjectHelpTitleIndex
    #field intptr ObjectHelpTitle
    #field int DetailLevel
    #field int NumCounters
    #field int DefaultCounter
    #field int NumInstances
    #field int CodePage
    #field int64 PerfTime
    #field int64 PerfFreq
#endstruct

stdim st, PERF_OBJECT_TYPE        ; NSTRUCT 変数を確保
st->TotalByteLength = 100
mes "TotalByteLength=" + st->TotalByteLength