ホーム › System.Performance › PERF_OBJECT_TYPE
PERF_OBJECT_TYPE
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| TotalByteLength | DWORD | 4 | +0 | +0 | このオブジェクト定義とそれに続く全データの合計バイト長である。 |
| DefinitionLength | DWORD | 4 | +4 | +4 | オブジェクト定義部分(カウンタ定義含む)のバイト長である。 |
| HeaderLength | DWORD | 4 | +8 | +8 | この構造体ヘッダのバイト長である。 |
| ObjectNameTitleIndex | DWORD | 4 | +12 | +12 | オブジェクト名の文字列リソースインデックスである。 |
| ObjectNameTitle | LPWSTR | 8/4 | +16 | +16 | オブジェクト名文字列(DWORD予約または実行時設定のLPWSTR)である。 |
| ObjectHelpTitleIndex | DWORD | 4 | +24 | +20 | オブジェクトのヘルプ文字列リソースインデックスである。 |
| ObjectHelpTitle | LPWSTR | 8/4 | +32 | +24 | オブジェクトのヘルプ文字列(DWORD予約または実行時設定のLPWSTR)である。 |
| DetailLevel | DWORD | 4 | +40 | +28 | このオブジェクトの詳細レベル(PERF_DETAIL値)である。 |
| NumCounters | DWORD | 4 | +44 | +32 | このオブジェクトに含まれるカウンタ定義の個数である。 |
| DefaultCounter | INT | 4 | +48 | +36 | 既定で選択されるカウンタのインデックスである。-1で無し。 |
| NumInstances | INT | 4 | +52 | +40 | このオブジェクトのインスタンス数である。PERF_NO_INSTANCESで非インスタンス型。 |
| CodePage | DWORD | 4 | +56 | +44 | インスタンス名のコードページである。0でUnicode。 |
| PerfTime | LONGLONG | 8 | +64 | +48 | オブジェクトのパフォーマンス計測時刻(基準クロック)である。 |
| PerfFreq | LONGLONG | 8 | +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 Structureimport 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: int64struct 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