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

PERFORMANCE_INFORMATION

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

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

フィールド

フィールドサイズx64x86説明
cbDWORD4+0+0この構造体のサイズ。バイト数で呼び出し前に設定する。
CommitTotalUINT_PTR8/4+8+4現在コミットされているページ総数。ページ数で表す。
CommitLimitUINT_PTR8/4+16+8コミット可能なページの上限。ページ数で表す。
CommitPeakUINT_PTR8/4+24+12コミットページ数のピーク値。ページ数で表す。
PhysicalTotalUINT_PTR8/4+32+16物理メモリの総量。ページ数で表す。
PhysicalAvailableUINT_PTR8/4+40+20利用可能な物理メモリ量。ページ数で表す。
SystemCacheUINT_PTR8/4+48+24システムキャッシュのサイズ。ページ数で表す。
KernelTotalUINT_PTR8/4+56+28カーネルプールの総サイズ。ページ数で表す。
KernelPagedUINT_PTR8/4+64+32ページ可能なカーネルプールのサイズ。ページ数で表す。
KernelNonpagedUINT_PTR8/4+72+36非ページのカーネルプールのサイズ。ページ数で表す。
PageSizeUINT_PTR8/4+80+401ページのサイズ。バイト数で表す。
HandleCountDWORD4+88+44システム全体で開かれているハンドルの総数。
ProcessCountDWORD4+92+48現在実行中のプロセス総数。
ThreadCountDWORD4+96+52現在実行中のスレッド総数。

各言語での定義

#include <windows.h>

// PERFORMANCE_INFORMATION  (x64 104 / x86 56 バイト)
typedef struct PERFORMANCE_INFORMATION {
    DWORD cb;
    UINT_PTR CommitTotal;
    UINT_PTR CommitLimit;
    UINT_PTR CommitPeak;
    UINT_PTR PhysicalTotal;
    UINT_PTR PhysicalAvailable;
    UINT_PTR SystemCache;
    UINT_PTR KernelTotal;
    UINT_PTR KernelPaged;
    UINT_PTR KernelNonpaged;
    UINT_PTR PageSize;
    DWORD HandleCount;
    DWORD ProcessCount;
    DWORD ThreadCount;
} PERFORMANCE_INFORMATION;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PERFORMANCE_INFORMATION
{
    public uint cb;
    public UIntPtr CommitTotal;
    public UIntPtr CommitLimit;
    public UIntPtr CommitPeak;
    public UIntPtr PhysicalTotal;
    public UIntPtr PhysicalAvailable;
    public UIntPtr SystemCache;
    public UIntPtr KernelTotal;
    public UIntPtr KernelPaged;
    public UIntPtr KernelNonpaged;
    public UIntPtr PageSize;
    public uint HandleCount;
    public uint ProcessCount;
    public uint ThreadCount;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PERFORMANCE_INFORMATION
    Public cb As UInteger
    Public CommitTotal As UIntPtr
    Public CommitLimit As UIntPtr
    Public CommitPeak As UIntPtr
    Public PhysicalTotal As UIntPtr
    Public PhysicalAvailable As UIntPtr
    Public SystemCache As UIntPtr
    Public KernelTotal As UIntPtr
    Public KernelPaged As UIntPtr
    Public KernelNonpaged As UIntPtr
    Public PageSize As UIntPtr
    Public HandleCount As UInteger
    Public ProcessCount As UInteger
    Public ThreadCount As UInteger
End Structure
import ctypes
from ctypes import wintypes

class PERFORMANCE_INFORMATION(ctypes.Structure):
    _fields_ = [
        ("cb", wintypes.DWORD),
        ("CommitTotal", ctypes.c_size_t),
        ("CommitLimit", ctypes.c_size_t),
        ("CommitPeak", ctypes.c_size_t),
        ("PhysicalTotal", ctypes.c_size_t),
        ("PhysicalAvailable", ctypes.c_size_t),
        ("SystemCache", ctypes.c_size_t),
        ("KernelTotal", ctypes.c_size_t),
        ("KernelPaged", ctypes.c_size_t),
        ("KernelNonpaged", ctypes.c_size_t),
        ("PageSize", ctypes.c_size_t),
        ("HandleCount", wintypes.DWORD),
        ("ProcessCount", wintypes.DWORD),
        ("ThreadCount", wintypes.DWORD),
    ]
#[repr(C)]
pub struct PERFORMANCE_INFORMATION {
    pub cb: u32,
    pub CommitTotal: usize,
    pub CommitLimit: usize,
    pub CommitPeak: usize,
    pub PhysicalTotal: usize,
    pub PhysicalAvailable: usize,
    pub SystemCache: usize,
    pub KernelTotal: usize,
    pub KernelPaged: usize,
    pub KernelNonpaged: usize,
    pub PageSize: usize,
    pub HandleCount: u32,
    pub ProcessCount: u32,
    pub ThreadCount: u32,
}
import "golang.org/x/sys/windows"

type PERFORMANCE_INFORMATION struct {
	cb uint32
	CommitTotal uintptr
	CommitLimit uintptr
	CommitPeak uintptr
	PhysicalTotal uintptr
	PhysicalAvailable uintptr
	SystemCache uintptr
	KernelTotal uintptr
	KernelPaged uintptr
	KernelNonpaged uintptr
	PageSize uintptr
	HandleCount uint32
	ProcessCount uint32
	ThreadCount uint32
}
type
  PERFORMANCE_INFORMATION = record
    cb: DWORD;
    CommitTotal: NativeUInt;
    CommitLimit: NativeUInt;
    CommitPeak: NativeUInt;
    PhysicalTotal: NativeUInt;
    PhysicalAvailable: NativeUInt;
    SystemCache: NativeUInt;
    KernelTotal: NativeUInt;
    KernelPaged: NativeUInt;
    KernelNonpaged: NativeUInt;
    PageSize: NativeUInt;
    HandleCount: DWORD;
    ProcessCount: DWORD;
    ThreadCount: DWORD;
  end;
const PERFORMANCE_INFORMATION = extern struct {
    cb: u32,
    CommitTotal: usize,
    CommitLimit: usize,
    CommitPeak: usize,
    PhysicalTotal: usize,
    PhysicalAvailable: usize,
    SystemCache: usize,
    KernelTotal: usize,
    KernelPaged: usize,
    KernelNonpaged: usize,
    PageSize: usize,
    HandleCount: u32,
    ProcessCount: u32,
    ThreadCount: u32,
};
type
  PERFORMANCE_INFORMATION {.bycopy.} = object
    cb: uint32
    CommitTotal: uint
    CommitLimit: uint
    CommitPeak: uint
    PhysicalTotal: uint
    PhysicalAvailable: uint
    SystemCache: uint
    KernelTotal: uint
    KernelPaged: uint
    KernelNonpaged: uint
    PageSize: uint
    HandleCount: uint32
    ProcessCount: uint32
    ThreadCount: uint32
struct PERFORMANCE_INFORMATION
{
    uint cb;
    size_t CommitTotal;
    size_t CommitLimit;
    size_t CommitPeak;
    size_t PhysicalTotal;
    size_t PhysicalAvailable;
    size_t SystemCache;
    size_t KernelTotal;
    size_t KernelPaged;
    size_t KernelNonpaged;
    size_t PageSize;
    uint HandleCount;
    uint ProcessCount;
    uint ThreadCount;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; PERFORMANCE_INFORMATION サイズ: 56 バイト(x86)
dim st, 14    ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; cb : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; CommitTotal : UINT_PTR (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; CommitLimit : UINT_PTR (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; CommitPeak : UINT_PTR (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; PhysicalTotal : UINT_PTR (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; PhysicalAvailable : UINT_PTR (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; SystemCache : UINT_PTR (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; KernelTotal : UINT_PTR (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; KernelPaged : UINT_PTR (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; KernelNonpaged : UINT_PTR (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; PageSize : UINT_PTR (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; HandleCount : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; ProcessCount : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; ThreadCount : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; PERFORMANCE_INFORMATION サイズ: 104 バイト(x64)
dim st, 26    ; 4byte整数×26(構造体サイズ 104 / 4 切り上げ)
; cb : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; CommitTotal : UINT_PTR (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; CommitLimit : UINT_PTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; CommitPeak : UINT_PTR (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; PhysicalTotal : UINT_PTR (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; PhysicalAvailable : UINT_PTR (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; SystemCache : UINT_PTR (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; KernelTotal : UINT_PTR (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; KernelPaged : UINT_PTR (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; KernelNonpaged : UINT_PTR (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; PageSize : UINT_PTR (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; HandleCount : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; ProcessCount : DWORD (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; ThreadCount : DWORD (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global PERFORMANCE_INFORMATION
    #field int cb
    #field intptr CommitTotal
    #field intptr CommitLimit
    #field intptr CommitPeak
    #field intptr PhysicalTotal
    #field intptr PhysicalAvailable
    #field intptr SystemCache
    #field intptr KernelTotal
    #field intptr KernelPaged
    #field intptr KernelNonpaged
    #field intptr PageSize
    #field int HandleCount
    #field int ProcessCount
    #field int ThreadCount
#endstruct

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