PERF_OBJECT_TYPE
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TotalByteLength | DWORD | 4 | +0 | +0 | オブジェクト固有のデータのサイズ (バイト単位)。このメンバーは、この構造体の先頭から、次の PERF_OBJECT_TYPE 構造体 (存在する場合) までのオフセットです。 | ||||||||||
| DefinitionLength | DWORD | 4 | +4 | +4 | この構造体のサイズと、すべての オブジェクトが複数インスタンスのオブジェクトである場合 (NumInstances メンバーが 0 でない場合)、このメンバーは、この構造体の先頭から最初の PERF_INSTANCE_DEFINITION 構造体までのオフセットです。それ以外の場合、この値は PERF_COUNTER_BLOCK までのオフセットです。 | ||||||||||
| HeaderLength | DWORD | 4 | +8 | +8 | この構造体のサイズ (バイト単位)。このメンバーは、この構造体の先頭から最初の PERF_COUNTER_DEFINITION 構造体までのオフセットです。 | ||||||||||
| ObjectNameTitleIndex | DWORD | 4 | +12 | +12 | タイトルデータベース内のオブジェクト名へのインデックスです。インデックスを使用してオブジェクト名を取得する方法の詳細については、Retrieving Counter Names and Help Text を参照してください。 プロバイダーは、初期化ファイルでインデックス値を指定します。詳細については、Adding Counter Names and Descriptions to the Registry を参照してください。 | ||||||||||
| ObjectNameTitle | LPWSTR | 8/4 | +16 | +16 | 予約済みです。 | ||||||||||
| ObjectHelpTitleIndex | DWORD | 4 | +24 | +20 | タイトルデータベース内のオブジェクトのヘルプテキストへのインデックスです。インデックスを使用してオブジェクトのヘルプテキストを取得する方法の詳細については、Retrieving Counter Names and Help Text を参照してください。 プロバイダーは、初期化ファイルでインデックス値を指定します。詳細については、Adding Counter Names and Descriptions to the Registry を参照してください。 | ||||||||||
| ObjectHelpTitle | LPWSTR | 8/4 | +32 | +24 | 予約済みです。 | ||||||||||
| DetailLevel | DWORD | 4 | +40 | +28 | 詳細レベルです。コンシューマーはこの値を使用して表示の複雑さを制御します。この値は、指定されたオブジェクトのすべてのカウンターにおける最小の詳細レベルです。このメンバーには、次のいずれかの値を指定できます。
| ||||||||||
| NumCounters | DWORD | 4 | +44 | +32 | オブジェクトが返す PERF_COUNTER_DEFINITION ブロックの数です。 | ||||||||||
| DefaultCounter | INT | 4 | +48 | +36 | パフォーマンスツールでこのオブジェクトが選択されたときに情報を表示する既定のカウンターについて、タイトルデータベース内のカウンター名へのインデックスです。既定のカウンターが存在しないことを示すために、このメンバーが –1 になる場合があります。 | ||||||||||
| NumInstances | INT | 4 | +52 | +40 | カウンターが提供されるオブジェクトインスタンスの数です。オブジェクトが 0 個以上のインスタンスを持ち得るものの、現時点で 1 つも存在しない場合、この値は 0 にする必要があります。オブジェクトが複数のインスタンスを持てない場合、この値は PERF_NO_INSTANCES にする必要があります。 | ||||||||||
| CodePage | DWORD | 4 | +56 | +44 | インスタンス文字列が Unicode 文字列である場合、このメンバーは 0 です。それ以外の場合、このメンバーはインスタンス名のコードページ識別子です。MultiByteToWideChar を呼び出して文字列を Unicode に変換する際に、このコードページの値を使用できます。 | ||||||||||
| PerfTime | LONGLONG | 8 | +64 | +48 | コンシューマーがカウンター値を計算するときに使用する、プロバイダーが生成したタイムスタンプです。たとえば、高分解能パフォーマンスカウンターの現在の値 (カウント単位) を指定できます。 カウンターのカウンター型に PERF_OBJECT_TIMER フラグが含まれる場合、プロバイダーはこの値を提供する必要があります。それ以外の場合、コンシューマーは PERF_DATA_BLOCK の PerfTime の値を使用します。 | ||||||||||
| PerfFreq | LONGLONG | 8 | +72 | +56 | コンシューマーがカウンター値を計算するときに使用する、プロバイダーが生成した周波数の値です。たとえば、高分解能パフォーマンスカウンターの現在の周波数 (1 秒あたりのカウント数) を指定できます。 カウンターのカウンター型に PERF_OBJECT_TIMER フラグが含まれる場合、プロバイダーはこの値を提供する必要があります。それ以外の場合、コンシューマーは PERF_DATA_BLOCK の PerfFreq の値を使用します。 |
公式ドキュメント
オブジェクトのインスタンス数やオブジェクトが定義するカウンターの数など、オブジェクト固有のパフォーマンス情報を記述します。
解説(Remarks)
プロバイダーは、サポートするオブジェクトのパフォーマンスデータを提供するためにこの構造体を使用します。コンシューマーは、クエリしたオブジェクトのパフォーマンスデータを取得するためにこの構造体を使用します。
この構造体の後には、パフォーマンスオブジェクトに対して定義された各カウンターにつき 1 つずつ、 PERF_COUNTER_DEFINITION 構造体のリストが続きます。 パフォーマンスデータブロックのレイアウトの詳細については、Performance Data Format を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#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