ホーム › System.Diagnostics.ProcessSnapshotting › PSS_PROCESS_INFORMATION
PSS_PROCESS_INFORMATION
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| ExitStatus | DWORD | 4 | +0 | +0 | プロセスの終了コード。実行中はSTILL_ACTIVE。 |
| PebBaseAddress | void* | 8/4 | +8 | +4 | プロセス環境ブロック(PEB)のベースアドレス。 |
| AffinityMask | UINT_PTR | 8/4 | +16 | +8 | プロセスのプロセッサアフィニティマスク。 |
| BasePriority | INT | 4 | +24 | +12 | プロセスの基本優先度。 |
| ProcessId | DWORD | 4 | +28 | +16 | 対象プロセスのID。 |
| ParentProcessId | DWORD | 4 | +32 | +20 | 親プロセスのID。 |
| Flags | PSS_PROCESS_FLAGS | 4 | +36 | +24 | スナップショットのプロセスフラグ(PSS_PROCESS_FLAGS)。 |
| CreateTime | FILETIME | 8 | +40 | +28 | プロセスの作成時刻(FILETIME)。 |
| ExitTime | FILETIME | 8 | +48 | +36 | プロセスの終了時刻。実行中は0。 |
| KernelTime | FILETIME | 8 | +56 | +44 | カーネルモードで費やした累積時間。 |
| UserTime | FILETIME | 8 | +64 | +52 | ユーザーモードで費やした累積時間。 |
| PriorityClass | DWORD | 4 | +72 | +60 | プロセスの優先度クラス。 |
| PeakVirtualSize | UINT_PTR | 8/4 | +80 | +64 | 仮想メモリ使用量のピーク値。単位はバイト。 |
| VirtualSize | UINT_PTR | 8/4 | +88 | +68 | 現在の仮想メモリ使用量。単位はバイト。 |
| PageFaultCount | DWORD | 4 | +96 | +72 | 発生したページフォルト数。 |
| PeakWorkingSetSize | UINT_PTR | 8/4 | +104 | +76 | ワーキングセットサイズのピーク値。単位はバイト。 |
| WorkingSetSize | UINT_PTR | 8/4 | +112 | +80 | 現在のワーキングセットサイズ。単位はバイト。 |
| QuotaPeakPagedPoolUsage | UINT_PTR | 8/4 | +120 | +84 | ページプール使用量のピーク値。 |
| QuotaPagedPoolUsage | UINT_PTR | 8/4 | +128 | +88 | 現在のページプール使用量。 |
| QuotaPeakNonPagedPoolUsage | UINT_PTR | 8/4 | +136 | +92 | 非ページプール使用量のピーク値。 |
| QuotaNonPagedPoolUsage | UINT_PTR | 8/4 | +144 | +96 | 現在の非ページプール使用量。 |
| PagefileUsage | UINT_PTR | 8/4 | +152 | +100 | 現在のページファイル使用量。単位はバイト。 |
| PeakPagefileUsage | UINT_PTR | 8/4 | +160 | +104 | ページファイル使用量のピーク値。単位はバイト。 |
| PrivateUsage | UINT_PTR | 8/4 | +168 | +108 | プライベートコミット量。単位はバイト。 |
| ExecuteFlags | DWORD | 4 | +176 | +112 | プロセスのDEP等の実行フラグ。 |
| ImageFileName | WCHAR | 520 | +180 | +116 | 実行イメージのファイル名(ワイド文字列)。 |
各言語での定義
#include <windows.h>
// FILETIME (x64 8 / x86 8 バイト)
typedef struct FILETIME {
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME;
// PSS_PROCESS_INFORMATION (x64 704 / x86 636 バイト)
typedef struct PSS_PROCESS_INFORMATION {
DWORD ExitStatus;
void* PebBaseAddress;
UINT_PTR AffinityMask;
INT BasePriority;
DWORD ProcessId;
DWORD ParentProcessId;
PSS_PROCESS_FLAGS Flags;
FILETIME CreateTime;
FILETIME ExitTime;
FILETIME KernelTime;
FILETIME UserTime;
DWORD PriorityClass;
UINT_PTR PeakVirtualSize;
UINT_PTR VirtualSize;
DWORD PageFaultCount;
UINT_PTR PeakWorkingSetSize;
UINT_PTR WorkingSetSize;
UINT_PTR QuotaPeakPagedPoolUsage;
UINT_PTR QuotaPagedPoolUsage;
UINT_PTR QuotaPeakNonPagedPoolUsage;
UINT_PTR QuotaNonPagedPoolUsage;
UINT_PTR PagefileUsage;
UINT_PTR PeakPagefileUsage;
UINT_PTR PrivateUsage;
DWORD ExecuteFlags;
WCHAR ImageFileName[260];
} PSS_PROCESS_INFORMATION;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FILETIME
{
public uint dwLowDateTime;
public uint dwHighDateTime;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PSS_PROCESS_INFORMATION
{
public uint ExitStatus;
public IntPtr PebBaseAddress;
public UIntPtr AffinityMask;
public int BasePriority;
public uint ProcessId;
public uint ParentProcessId;
public int Flags;
public FILETIME CreateTime;
public FILETIME ExitTime;
public FILETIME KernelTime;
public FILETIME UserTime;
public uint PriorityClass;
public UIntPtr PeakVirtualSize;
public UIntPtr VirtualSize;
public uint PageFaultCount;
public UIntPtr PeakWorkingSetSize;
public UIntPtr WorkingSetSize;
public UIntPtr QuotaPeakPagedPoolUsage;
public UIntPtr QuotaPagedPoolUsage;
public UIntPtr QuotaPeakNonPagedPoolUsage;
public UIntPtr QuotaNonPagedPoolUsage;
public UIntPtr PagefileUsage;
public UIntPtr PeakPagefileUsage;
public UIntPtr PrivateUsage;
public uint ExecuteFlags;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string ImageFileName;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FILETIME
Public dwLowDateTime As UInteger
Public dwHighDateTime As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PSS_PROCESS_INFORMATION
Public ExitStatus As UInteger
Public PebBaseAddress As IntPtr
Public AffinityMask As UIntPtr
Public BasePriority As Integer
Public ProcessId As UInteger
Public ParentProcessId As UInteger
Public Flags As Integer
Public CreateTime As FILETIME
Public ExitTime As FILETIME
Public KernelTime As FILETIME
Public UserTime As FILETIME
Public PriorityClass As UInteger
Public PeakVirtualSize As UIntPtr
Public VirtualSize As UIntPtr
Public PageFaultCount As UInteger
Public PeakWorkingSetSize As UIntPtr
Public WorkingSetSize As UIntPtr
Public QuotaPeakPagedPoolUsage As UIntPtr
Public QuotaPagedPoolUsage As UIntPtr
Public QuotaPeakNonPagedPoolUsage As UIntPtr
Public QuotaNonPagedPoolUsage As UIntPtr
Public PagefileUsage As UIntPtr
Public PeakPagefileUsage As UIntPtr
Public PrivateUsage As UIntPtr
Public ExecuteFlags As UInteger
<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)> Public ImageFileName As String
End Structureimport ctypes
from ctypes import wintypes
class FILETIME(ctypes.Structure):
_fields_ = [
("dwLowDateTime", wintypes.DWORD),
("dwHighDateTime", wintypes.DWORD),
]
class PSS_PROCESS_INFORMATION(ctypes.Structure):
_fields_ = [
("ExitStatus", wintypes.DWORD),
("PebBaseAddress", ctypes.c_void_p),
("AffinityMask", ctypes.c_size_t),
("BasePriority", ctypes.c_int),
("ProcessId", wintypes.DWORD),
("ParentProcessId", wintypes.DWORD),
("Flags", ctypes.c_int),
("CreateTime", FILETIME),
("ExitTime", FILETIME),
("KernelTime", FILETIME),
("UserTime", FILETIME),
("PriorityClass", wintypes.DWORD),
("PeakVirtualSize", ctypes.c_size_t),
("VirtualSize", ctypes.c_size_t),
("PageFaultCount", wintypes.DWORD),
("PeakWorkingSetSize", ctypes.c_size_t),
("WorkingSetSize", ctypes.c_size_t),
("QuotaPeakPagedPoolUsage", ctypes.c_size_t),
("QuotaPagedPoolUsage", ctypes.c_size_t),
("QuotaPeakNonPagedPoolUsage", ctypes.c_size_t),
("QuotaNonPagedPoolUsage", ctypes.c_size_t),
("PagefileUsage", ctypes.c_size_t),
("PeakPagefileUsage", ctypes.c_size_t),
("PrivateUsage", ctypes.c_size_t),
("ExecuteFlags", wintypes.DWORD),
("ImageFileName", ctypes.c_wchar * 260),
]#[repr(C)]
pub struct FILETIME {
pub dwLowDateTime: u32,
pub dwHighDateTime: u32,
}
#[repr(C)]
pub struct PSS_PROCESS_INFORMATION {
pub ExitStatus: u32,
pub PebBaseAddress: *mut core::ffi::c_void,
pub AffinityMask: usize,
pub BasePriority: i32,
pub ProcessId: u32,
pub ParentProcessId: u32,
pub Flags: i32,
pub CreateTime: FILETIME,
pub ExitTime: FILETIME,
pub KernelTime: FILETIME,
pub UserTime: FILETIME,
pub PriorityClass: u32,
pub PeakVirtualSize: usize,
pub VirtualSize: usize,
pub PageFaultCount: u32,
pub PeakWorkingSetSize: usize,
pub WorkingSetSize: usize,
pub QuotaPeakPagedPoolUsage: usize,
pub QuotaPagedPoolUsage: usize,
pub QuotaPeakNonPagedPoolUsage: usize,
pub QuotaNonPagedPoolUsage: usize,
pub PagefileUsage: usize,
pub PeakPagefileUsage: usize,
pub PrivateUsage: usize,
pub ExecuteFlags: u32,
pub ImageFileName: [u16; 260],
}import "golang.org/x/sys/windows"
type FILETIME struct {
dwLowDateTime uint32
dwHighDateTime uint32
}
type PSS_PROCESS_INFORMATION struct {
ExitStatus uint32
PebBaseAddress uintptr
AffinityMask uintptr
BasePriority int32
ProcessId uint32
ParentProcessId uint32
Flags int32
CreateTime FILETIME
ExitTime FILETIME
KernelTime FILETIME
UserTime FILETIME
PriorityClass uint32
PeakVirtualSize uintptr
VirtualSize uintptr
PageFaultCount uint32
PeakWorkingSetSize uintptr
WorkingSetSize uintptr
QuotaPeakPagedPoolUsage uintptr
QuotaPagedPoolUsage uintptr
QuotaPeakNonPagedPoolUsage uintptr
QuotaNonPagedPoolUsage uintptr
PagefileUsage uintptr
PeakPagefileUsage uintptr
PrivateUsage uintptr
ExecuteFlags uint32
ImageFileName [260]uint16
}type
FILETIME = record
dwLowDateTime: DWORD;
dwHighDateTime: DWORD;
end;
PSS_PROCESS_INFORMATION = record
ExitStatus: DWORD;
PebBaseAddress: Pointer;
AffinityMask: NativeUInt;
BasePriority: Integer;
ProcessId: DWORD;
ParentProcessId: DWORD;
Flags: Integer;
CreateTime: FILETIME;
ExitTime: FILETIME;
KernelTime: FILETIME;
UserTime: FILETIME;
PriorityClass: DWORD;
PeakVirtualSize: NativeUInt;
VirtualSize: NativeUInt;
PageFaultCount: DWORD;
PeakWorkingSetSize: NativeUInt;
WorkingSetSize: NativeUInt;
QuotaPeakPagedPoolUsage: NativeUInt;
QuotaPagedPoolUsage: NativeUInt;
QuotaPeakNonPagedPoolUsage: NativeUInt;
QuotaNonPagedPoolUsage: NativeUInt;
PagefileUsage: NativeUInt;
PeakPagefileUsage: NativeUInt;
PrivateUsage: NativeUInt;
ExecuteFlags: DWORD;
ImageFileName: array[0..259] of WideChar;
end;const FILETIME = extern struct {
dwLowDateTime: u32,
dwHighDateTime: u32,
};
const PSS_PROCESS_INFORMATION = extern struct {
ExitStatus: u32,
PebBaseAddress: ?*anyopaque,
AffinityMask: usize,
BasePriority: i32,
ProcessId: u32,
ParentProcessId: u32,
Flags: i32,
CreateTime: FILETIME,
ExitTime: FILETIME,
KernelTime: FILETIME,
UserTime: FILETIME,
PriorityClass: u32,
PeakVirtualSize: usize,
VirtualSize: usize,
PageFaultCount: u32,
PeakWorkingSetSize: usize,
WorkingSetSize: usize,
QuotaPeakPagedPoolUsage: usize,
QuotaPagedPoolUsage: usize,
QuotaPeakNonPagedPoolUsage: usize,
QuotaNonPagedPoolUsage: usize,
PagefileUsage: usize,
PeakPagefileUsage: usize,
PrivateUsage: usize,
ExecuteFlags: u32,
ImageFileName: [260]u16,
};type
FILETIME {.bycopy.} = object
dwLowDateTime: uint32
dwHighDateTime: uint32
PSS_PROCESS_INFORMATION {.bycopy.} = object
ExitStatus: uint32
PebBaseAddress: pointer
AffinityMask: uint
BasePriority: int32
ProcessId: uint32
ParentProcessId: uint32
Flags: int32
CreateTime: FILETIME
ExitTime: FILETIME
KernelTime: FILETIME
UserTime: FILETIME
PriorityClass: uint32
PeakVirtualSize: uint
VirtualSize: uint
PageFaultCount: uint32
PeakWorkingSetSize: uint
WorkingSetSize: uint
QuotaPeakPagedPoolUsage: uint
QuotaPagedPoolUsage: uint
QuotaPeakNonPagedPoolUsage: uint
QuotaNonPagedPoolUsage: uint
PagefileUsage: uint
PeakPagefileUsage: uint
PrivateUsage: uint
ExecuteFlags: uint32
ImageFileName: array[260, uint16]struct FILETIME
{
uint dwLowDateTime;
uint dwHighDateTime;
}
struct PSS_PROCESS_INFORMATION
{
uint ExitStatus;
void* PebBaseAddress;
size_t AffinityMask;
int BasePriority;
uint ProcessId;
uint ParentProcessId;
int Flags;
FILETIME CreateTime;
FILETIME ExitTime;
FILETIME KernelTime;
FILETIME UserTime;
uint PriorityClass;
size_t PeakVirtualSize;
size_t VirtualSize;
uint PageFaultCount;
size_t PeakWorkingSetSize;
size_t WorkingSetSize;
size_t QuotaPeakPagedPoolUsage;
size_t QuotaPagedPoolUsage;
size_t QuotaPeakNonPagedPoolUsage;
size_t QuotaNonPagedPoolUsage;
size_t PagefileUsage;
size_t PeakPagefileUsage;
size_t PrivateUsage;
uint ExecuteFlags;
wchar[260] ImageFileName;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; PSS_PROCESS_INFORMATION サイズ: 636 バイト(x86)
dim st, 159 ; 4byte整数×159(構造体サイズ 636 / 4 切り上げ)
; ExitStatus : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; PebBaseAddress : void* (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; AffinityMask : UINT_PTR (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; BasePriority : INT (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; ProcessId : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; ParentProcessId : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; Flags : PSS_PROCESS_FLAGS (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; CreateTime : FILETIME (+28, 8byte) varptr(st)+28 を基点に操作(8byte:入れ子/配列)
; ExitTime : FILETIME (+36, 8byte) varptr(st)+36 を基点に操作(8byte:入れ子/配列)
; KernelTime : FILETIME (+44, 8byte) varptr(st)+44 を基点に操作(8byte:入れ子/配列)
; UserTime : FILETIME (+52, 8byte) varptr(st)+52 を基点に操作(8byte:入れ子/配列)
; PriorityClass : DWORD (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; PeakVirtualSize : UINT_PTR (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; VirtualSize : UINT_PTR (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; PageFaultCount : DWORD (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; PeakWorkingSetSize : UINT_PTR (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; WorkingSetSize : UINT_PTR (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; QuotaPeakPagedPoolUsage : UINT_PTR (+84, 4byte) st.21 = 値 / 値 = st.21 (lpoke/lpeek も可)
; QuotaPagedPoolUsage : UINT_PTR (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; QuotaPeakNonPagedPoolUsage : UINT_PTR (+92, 4byte) st.23 = 値 / 値 = st.23 (lpoke/lpeek も可)
; QuotaNonPagedPoolUsage : UINT_PTR (+96, 4byte) st.24 = 値 / 値 = st.24 (lpoke/lpeek も可)
; PagefileUsage : UINT_PTR (+100, 4byte) st.25 = 値 / 値 = st.25 (lpoke/lpeek も可)
; PeakPagefileUsage : UINT_PTR (+104, 4byte) st.26 = 値 / 値 = st.26 (lpoke/lpeek も可)
; PrivateUsage : UINT_PTR (+108, 4byte) st.27 = 値 / 値 = st.27 (lpoke/lpeek も可)
; ExecuteFlags : DWORD (+112, 4byte) st.28 = 値 / 値 = st.28 (lpoke/lpeek も可)
; ImageFileName : WCHAR (+116, 520byte) varptr(st)+116 を基点に操作(520byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; PSS_PROCESS_INFORMATION サイズ: 704 バイト(x64)
dim st, 176 ; 4byte整数×176(構造体サイズ 704 / 4 切り上げ)
; ExitStatus : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; PebBaseAddress : void* (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; AffinityMask : UINT_PTR (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; BasePriority : INT (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; ProcessId : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; ParentProcessId : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; Flags : PSS_PROCESS_FLAGS (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; CreateTime : FILETIME (+40, 8byte) varptr(st)+40 を基点に操作(8byte:入れ子/配列)
; ExitTime : FILETIME (+48, 8byte) varptr(st)+48 を基点に操作(8byte:入れ子/配列)
; KernelTime : FILETIME (+56, 8byte) varptr(st)+56 を基点に操作(8byte:入れ子/配列)
; UserTime : FILETIME (+64, 8byte) varptr(st)+64 を基点に操作(8byte:入れ子/配列)
; PriorityClass : DWORD (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; PeakVirtualSize : UINT_PTR (+80, 8byte) qpoke st,80,値 / qpeek(st,80) ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; VirtualSize : UINT_PTR (+88, 8byte) qpoke st,88,値 / qpeek(st,88) ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; PageFaultCount : DWORD (+96, 4byte) st.24 = 値 / 値 = st.24 (lpoke/lpeek も可)
; PeakWorkingSetSize : UINT_PTR (+104, 8byte) qpoke st,104,値 / qpeek(st,104) ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; WorkingSetSize : UINT_PTR (+112, 8byte) qpoke st,112,値 / qpeek(st,112) ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; QuotaPeakPagedPoolUsage : UINT_PTR (+120, 8byte) qpoke st,120,値 / qpeek(st,120) ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; QuotaPagedPoolUsage : UINT_PTR (+128, 8byte) qpoke st,128,値 / qpeek(st,128) ※IronHSPのみ。3.7/3.8は lpoke st,128,下位 : lpoke st,132,上位
; QuotaPeakNonPagedPoolUsage : UINT_PTR (+136, 8byte) qpoke st,136,値 / qpeek(st,136) ※IronHSPのみ。3.7/3.8は lpoke st,136,下位 : lpoke st,140,上位
; QuotaNonPagedPoolUsage : UINT_PTR (+144, 8byte) qpoke st,144,値 / qpeek(st,144) ※IronHSPのみ。3.7/3.8は lpoke st,144,下位 : lpoke st,148,上位
; PagefileUsage : UINT_PTR (+152, 8byte) qpoke st,152,値 / qpeek(st,152) ※IronHSPのみ。3.7/3.8は lpoke st,152,下位 : lpoke st,156,上位
; PeakPagefileUsage : UINT_PTR (+160, 8byte) qpoke st,160,値 / qpeek(st,160) ※IronHSPのみ。3.7/3.8は lpoke st,160,下位 : lpoke st,164,上位
; PrivateUsage : UINT_PTR (+168, 8byte) qpoke st,168,値 / qpeek(st,168) ※IronHSPのみ。3.7/3.8は lpoke st,168,下位 : lpoke st,172,上位
; ExecuteFlags : DWORD (+176, 4byte) st.44 = 値 / 値 = st.44 (lpoke/lpeek も可)
; ImageFileName : WCHAR (+180, 520byte) varptr(st)+180 を基点に操作(520byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global FILETIME
#field int dwLowDateTime
#field int dwHighDateTime
#endstruct
#defstruct global PSS_PROCESS_INFORMATION
#field int ExitStatus
#field intptr PebBaseAddress
#field intptr AffinityMask
#field int BasePriority
#field int ProcessId
#field int ParentProcessId
#field int Flags
#field FILETIME CreateTime
#field FILETIME ExitTime
#field FILETIME KernelTime
#field FILETIME UserTime
#field int PriorityClass
#field intptr PeakVirtualSize
#field intptr VirtualSize
#field int PageFaultCount
#field intptr PeakWorkingSetSize
#field intptr WorkingSetSize
#field intptr QuotaPeakPagedPoolUsage
#field intptr QuotaPagedPoolUsage
#field intptr QuotaPeakNonPagedPoolUsage
#field intptr QuotaNonPagedPoolUsage
#field intptr PagefileUsage
#field intptr PeakPagefileUsage
#field intptr PrivateUsage
#field int ExecuteFlags
#field wchar ImageFileName 260
#endstruct
stdim st, PSS_PROCESS_INFORMATION ; NSTRUCT 変数を確保
st->ExitStatus = 100
mes "ExitStatus=" + st->ExitStatus