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オブジェクト固有のデータのサイズ (バイト単位)。このメンバーは、この構造体の先頭から、次の PERF_OBJECT_TYPE 構造体 (存在する場合) までのオフセットです。
DefinitionLengthDWORD4+4+4

この構造体のサイズと、すべての
PERF_COUNTER_DEFINITION 構造体のサイズの合計です。

オブジェクトが複数インスタンスのオブジェクトである場合 (NumInstances メンバーが 0 でない場合)、このメンバーは、この構造体の先頭から最初の PERF_INSTANCE_DEFINITION 構造体までのオフセットです。それ以外の場合、この値は PERF_COUNTER_BLOCK までのオフセットです。

HeaderLengthDWORD4+8+8この構造体のサイズ (バイト単位)。このメンバーは、この構造体の先頭から最初の PERF_COUNTER_DEFINITION 構造体までのオフセットです。
ObjectNameTitleIndexDWORD4+12+12

タイトルデータベース内のオブジェクト名へのインデックスです。インデックスを使用してオブジェクト名を取得する方法の詳細については、Retrieving Counter Names and Help Text を参照してください。

プロバイダーは、初期化ファイルでインデックス値を指定します。詳細については、Adding Counter Names and Descriptions to the Registry を参照してください。

ObjectNameTitleLPWSTR8/4+16+16予約済みです。
ObjectHelpTitleIndexDWORD4+24+20

タイトルデータベース内のオブジェクトのヘルプテキストへのインデックスです。インデックスを使用してオブジェクトのヘルプテキストを取得する方法の詳細については、Retrieving Counter Names and Help Text を参照してください。

プロバイダーは、初期化ファイルでインデックス値を指定します。詳細については、Adding Counter Names and Descriptions to the Registry を参照してください。

ObjectHelpTitleLPWSTR8/4+32+24予約済みです。
DetailLevelDWORD4+40+28

詳細レベルです。コンシューマーはこの値を使用して表示の複雑さを制御します。この値は、指定されたオブジェクトのすべてのカウンターにおける最小の詳細レベルです。このメンバーには、次のいずれかの値を指定できます。

詳細レベル 意味
PERF_DETAIL_NOVICE
カウンターデータはすべてのユーザー向けに提供されます。
PERF_DETAIL_ADVANCED
カウンターデータは上級ユーザー向けに提供されます。
PERF_DETAIL_EXPERT
カウンターデータはエキスパートユーザー向けに提供されます。
PERF_DETAIL_WIZARD
カウンターデータはシステム設計者向けに提供されます。
NumCountersDWORD4+44+32オブジェクトが返す PERF_COUNTER_DEFINITION ブロックの数です。
DefaultCounterINT4+48+36パフォーマンスツールでこのオブジェクトが選択されたときに情報を表示する既定のカウンターについて、タイトルデータベース内のカウンター名へのインデックスです。既定のカウンターが存在しないことを示すために、このメンバーが –1 になる場合があります。
NumInstancesINT4+52+40カウンターが提供されるオブジェクトインスタンスの数です。オブジェクトが 0 個以上のインスタンスを持ち得るものの、現時点で 1 つも存在しない場合、この値は 0 にする必要があります。オブジェクトが複数のインスタンスを持てない場合、この値は PERF_NO_INSTANCES にする必要があります。
CodePageDWORD4+56+44インスタンス文字列が Unicode 文字列である場合、このメンバーは 0 です。それ以外の場合、このメンバーはインスタンス名のコードページ識別子です。MultiByteToWideChar を呼び出して文字列を Unicode に変換する際に、このコードページの値を使用できます。
PerfTimeLONGLONG8+64+48

コンシューマーがカウンター値を計算するときに使用する、プロバイダーが生成したタイムスタンプです。たとえば、高分解能パフォーマンスカウンターの現在の値 (カウント単位) を指定できます。

カウンターのカウンター型に PERF_OBJECT_TIMER フラグが含まれる場合、プロバイダーはこの値を提供する必要があります。それ以外の場合、コンシューマーは PERF_DATA_BLOCKPerfTime の値を使用します。

PerfFreqLONGLONG8+72+56

コンシューマーがカウンター値を計算するときに使用する、プロバイダーが生成した周波数の値です。たとえば、高分解能パフォーマンスカウンターの現在の周波数 (1 秒あたりのカウント数) を指定できます。

カウンターのカウンター型に PERF_OBJECT_TIMER フラグが含まれる場合、プロバイダーはこの値を提供する必要があります。それ以外の場合、コンシューマーは PERF_DATA_BLOCKPerfFreq の値を使用します。

公式ドキュメント

オブジェクトのインスタンス数やオブジェクトが定義するカウンターの数など、オブジェクト固有のパフォーマンス情報を記述します。

解説(Remarks)

プロバイダーは、サポートするオブジェクトのパフォーマンスデータを提供するためにこの構造体を使用します。コンシューマーは、クエリしたオブジェクトのパフォーマンスデータを取得するためにこの構造体を使用します。

この構造体の後には、パフォーマンスオブジェクトに対して定義された各カウンターにつき 1 つずつ、 PERF_COUNTER_DEFINITION 構造体のリストが続きます。 パフォーマンスデータブロックのレイアウトの詳細については、Performance Data Format を参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 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