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

WIN32_MEMORY_PARTITION_INFORMATION

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

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

フィールド

フィールドサイズx64x86説明
FlagsDWORD4+0+0パーティションの状態や属性を示すフラグ。
NumaNodeDWORD4+4+4パーティションに関連付けられたNUMAノード番号。
ChannelDWORD4+8+8メモリチャネル識別子。
NumberOfNumaNodesDWORD4+12+12パーティションが跨るNUMAノード数。
ResidentAvailablePagesULONGLONG8+16+16常駐可能な利用可能ページ数。
CommittedPagesULONGLONG8+24+24コミット済みページ数。
CommitLimitULONGLONG8+32+32コミット可能ページ数の上限。
PeakCommitmentULONGLONG8+40+40コミット量のピーク値(ページ数)。
TotalNumberOfPagesULONGLONG8+48+48パーティションの総ページ数。
AvailablePagesULONGLONG8+56+56利用可能なページ数。
ZeroPagesULONGLONG8+64+64ゼロ化済みページ数。
FreePagesULONGLONG8+72+72空きページ数。
StandbyPagesULONGLONG8+80+80スタンバイページ数。
ReservedULONGLONG128+88+88将来の拡張用に予約された領域。
MaximumCommitLimitULONGLONG8+216+216コミット上限の最大値(ページ数)。
Reserved2ULONGLONG8+224+224将来の拡張用に予約された領域。
PartitionIdDWORD4+232+232メモリパーティションを識別するID。

各言語での定義

#include <windows.h>

// WIN32_MEMORY_PARTITION_INFORMATION  (x64 240 / x86 240 バイト)
typedef struct WIN32_MEMORY_PARTITION_INFORMATION {
    DWORD Flags;
    DWORD NumaNode;
    DWORD Channel;
    DWORD NumberOfNumaNodes;
    ULONGLONG ResidentAvailablePages;
    ULONGLONG CommittedPages;
    ULONGLONG CommitLimit;
    ULONGLONG PeakCommitment;
    ULONGLONG TotalNumberOfPages;
    ULONGLONG AvailablePages;
    ULONGLONG ZeroPages;
    ULONGLONG FreePages;
    ULONGLONG StandbyPages;
    ULONGLONG Reserved[16];
    ULONGLONG MaximumCommitLimit;
    ULONGLONG Reserved2;
    DWORD PartitionId;
} WIN32_MEMORY_PARTITION_INFORMATION;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WIN32_MEMORY_PARTITION_INFORMATION
{
    public uint Flags;
    public uint NumaNode;
    public uint Channel;
    public uint NumberOfNumaNodes;
    public ulong ResidentAvailablePages;
    public ulong CommittedPages;
    public ulong CommitLimit;
    public ulong PeakCommitment;
    public ulong TotalNumberOfPages;
    public ulong AvailablePages;
    public ulong ZeroPages;
    public ulong FreePages;
    public ulong StandbyPages;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public ulong[] Reserved;
    public ulong MaximumCommitLimit;
    public ulong Reserved2;
    public uint PartitionId;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WIN32_MEMORY_PARTITION_INFORMATION
    Public Flags As UInteger
    Public NumaNode As UInteger
    Public Channel As UInteger
    Public NumberOfNumaNodes As UInteger
    Public ResidentAvailablePages As ULong
    Public CommittedPages As ULong
    Public CommitLimit As ULong
    Public PeakCommitment As ULong
    Public TotalNumberOfPages As ULong
    Public AvailablePages As ULong
    Public ZeroPages As ULong
    Public FreePages As ULong
    Public StandbyPages As ULong
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public Reserved() As ULong
    Public MaximumCommitLimit As ULong
    Public Reserved2 As ULong
    Public PartitionId As UInteger
End Structure
import ctypes
from ctypes import wintypes

class WIN32_MEMORY_PARTITION_INFORMATION(ctypes.Structure):
    _fields_ = [
        ("Flags", wintypes.DWORD),
        ("NumaNode", wintypes.DWORD),
        ("Channel", wintypes.DWORD),
        ("NumberOfNumaNodes", wintypes.DWORD),
        ("ResidentAvailablePages", ctypes.c_ulonglong),
        ("CommittedPages", ctypes.c_ulonglong),
        ("CommitLimit", ctypes.c_ulonglong),
        ("PeakCommitment", ctypes.c_ulonglong),
        ("TotalNumberOfPages", ctypes.c_ulonglong),
        ("AvailablePages", ctypes.c_ulonglong),
        ("ZeroPages", ctypes.c_ulonglong),
        ("FreePages", ctypes.c_ulonglong),
        ("StandbyPages", ctypes.c_ulonglong),
        ("Reserved", ctypes.c_ulonglong * 16),
        ("MaximumCommitLimit", ctypes.c_ulonglong),
        ("Reserved2", ctypes.c_ulonglong),
        ("PartitionId", wintypes.DWORD),
    ]
#[repr(C)]
pub struct WIN32_MEMORY_PARTITION_INFORMATION {
    pub Flags: u32,
    pub NumaNode: u32,
    pub Channel: u32,
    pub NumberOfNumaNodes: u32,
    pub ResidentAvailablePages: u64,
    pub CommittedPages: u64,
    pub CommitLimit: u64,
    pub PeakCommitment: u64,
    pub TotalNumberOfPages: u64,
    pub AvailablePages: u64,
    pub ZeroPages: u64,
    pub FreePages: u64,
    pub StandbyPages: u64,
    pub Reserved: [u64; 16],
    pub MaximumCommitLimit: u64,
    pub Reserved2: u64,
    pub PartitionId: u32,
}
import "golang.org/x/sys/windows"

type WIN32_MEMORY_PARTITION_INFORMATION struct {
	Flags uint32
	NumaNode uint32
	Channel uint32
	NumberOfNumaNodes uint32
	ResidentAvailablePages uint64
	CommittedPages uint64
	CommitLimit uint64
	PeakCommitment uint64
	TotalNumberOfPages uint64
	AvailablePages uint64
	ZeroPages uint64
	FreePages uint64
	StandbyPages uint64
	Reserved [16]uint64
	MaximumCommitLimit uint64
	Reserved2 uint64
	PartitionId uint32
}
type
  WIN32_MEMORY_PARTITION_INFORMATION = record
    Flags: DWORD;
    NumaNode: DWORD;
    Channel: DWORD;
    NumberOfNumaNodes: DWORD;
    ResidentAvailablePages: UInt64;
    CommittedPages: UInt64;
    CommitLimit: UInt64;
    PeakCommitment: UInt64;
    TotalNumberOfPages: UInt64;
    AvailablePages: UInt64;
    ZeroPages: UInt64;
    FreePages: UInt64;
    StandbyPages: UInt64;
    Reserved: array[0..15] of UInt64;
    MaximumCommitLimit: UInt64;
    Reserved2: UInt64;
    PartitionId: DWORD;
  end;
const WIN32_MEMORY_PARTITION_INFORMATION = extern struct {
    Flags: u32,
    NumaNode: u32,
    Channel: u32,
    NumberOfNumaNodes: u32,
    ResidentAvailablePages: u64,
    CommittedPages: u64,
    CommitLimit: u64,
    PeakCommitment: u64,
    TotalNumberOfPages: u64,
    AvailablePages: u64,
    ZeroPages: u64,
    FreePages: u64,
    StandbyPages: u64,
    Reserved: [16]u64,
    MaximumCommitLimit: u64,
    Reserved2: u64,
    PartitionId: u32,
};
type
  WIN32_MEMORY_PARTITION_INFORMATION {.bycopy.} = object
    Flags: uint32
    NumaNode: uint32
    Channel: uint32
    NumberOfNumaNodes: uint32
    ResidentAvailablePages: uint64
    CommittedPages: uint64
    CommitLimit: uint64
    PeakCommitment: uint64
    TotalNumberOfPages: uint64
    AvailablePages: uint64
    ZeroPages: uint64
    FreePages: uint64
    StandbyPages: uint64
    Reserved: array[16, uint64]
    MaximumCommitLimit: uint64
    Reserved2: uint64
    PartitionId: uint32
struct WIN32_MEMORY_PARTITION_INFORMATION
{
    uint Flags;
    uint NumaNode;
    uint Channel;
    uint NumberOfNumaNodes;
    ulong ResidentAvailablePages;
    ulong CommittedPages;
    ulong CommitLimit;
    ulong PeakCommitment;
    ulong TotalNumberOfPages;
    ulong AvailablePages;
    ulong ZeroPages;
    ulong FreePages;
    ulong StandbyPages;
    ulong[16] Reserved;
    ulong MaximumCommitLimit;
    ulong Reserved2;
    uint PartitionId;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WIN32_MEMORY_PARTITION_INFORMATION サイズ: 240 バイト(x64)
dim st, 60    ; 4byte整数×60(構造体サイズ 240 / 4 切り上げ)
; Flags : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; NumaNode : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; Channel : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; NumberOfNumaNodes : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; ResidentAvailablePages : ULONGLONG (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; CommittedPages : ULONGLONG (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; CommitLimit : ULONGLONG (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; PeakCommitment : ULONGLONG (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; TotalNumberOfPages : ULONGLONG (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; AvailablePages : ULONGLONG (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; ZeroPages : ULONGLONG (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; FreePages : ULONGLONG (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; StandbyPages : ULONGLONG (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; Reserved : ULONGLONG (+88, 128byte)  varptr(st)+88 を基点に操作(128byte:入れ子/配列)
; MaximumCommitLimit : ULONGLONG (+216, 8byte)  qpoke st,216,値 / qpeek(st,216)  ※IronHSPのみ。3.7/3.8は lpoke st,216,下位 : lpoke st,220,上位
; Reserved2 : ULONGLONG (+224, 8byte)  qpoke st,224,値 / qpeek(st,224)  ※IronHSPのみ。3.7/3.8は lpoke st,224,下位 : lpoke st,228,上位
; PartitionId : DWORD (+232, 4byte)  st.58 = 値  /  値 = st.58   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WIN32_MEMORY_PARTITION_INFORMATION
    #field int Flags
    #field int NumaNode
    #field int Channel
    #field int NumberOfNumaNodes
    #field int64 ResidentAvailablePages
    #field int64 CommittedPages
    #field int64 CommitLimit
    #field int64 PeakCommitment
    #field int64 TotalNumberOfPages
    #field int64 AvailablePages
    #field int64 ZeroPages
    #field int64 FreePages
    #field int64 StandbyPages
    #field int64 Reserved 16
    #field int64 MaximumCommitLimit
    #field int64 Reserved2
    #field int PartitionId
#endstruct

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