ホーム › System.RemoteDesktop › WTS_PROCESS_INFO_EXA
WTS_PROCESS_INFO_EXA
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| SessionId | DWORD | 4 | +0 | +0 | プロセスが属するセッションの識別子。 |
| ProcessId | DWORD | 4 | +4 | +4 | プロセスの識別子。 |
| pProcessName | LPSTR | 8/4 | +8 | +8 | プロセス名(ANSI)へのポインタ。 |
| pUserSid | PSID | 8/4 | +16 | +12 | プロセス所有者のセキュリティ識別子(SID)。 |
| NumberOfThreads | DWORD | 4 | +24 | +16 | プロセス内のスレッド数。 |
| HandleCount | DWORD | 4 | +28 | +20 | プロセスが開いているハンドルの数。 |
| PagefileUsage | DWORD | 4 | +32 | +24 | ページファイルにコミットされた使用量。バイト数。 |
| PeakPagefileUsage | DWORD | 4 | +36 | +28 | ページファイル使用量のピーク値。バイト数で表す。 |
| WorkingSetSize | DWORD | 4 | +40 | +32 | 現在のワーキングセットサイズ。バイト数で表す。 |
| PeakWorkingSetSize | DWORD | 4 | +44 | +36 | ワーキングセットサイズのピーク値。バイト数で表す。 |
| UserTime | LONGLONG | 8 | +48 | +40 | ユーザーモードでの累積実行時間。100ns単位で表す。 |
| KernelTime | LONGLONG | 8 | +56 | +48 | カーネルモードでの累積実行時間。100ns単位で表す。 |
各言語での定義
#include <windows.h>
// WTS_PROCESS_INFO_EXA (x64 64 / x86 56 バイト)
typedef struct WTS_PROCESS_INFO_EXA {
DWORD SessionId;
DWORD ProcessId;
LPSTR pProcessName;
PSID pUserSid;
DWORD NumberOfThreads;
DWORD HandleCount;
DWORD PagefileUsage;
DWORD PeakPagefileUsage;
DWORD WorkingSetSize;
DWORD PeakWorkingSetSize;
LONGLONG UserTime;
LONGLONG KernelTime;
} WTS_PROCESS_INFO_EXA;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WTS_PROCESS_INFO_EXA
{
public uint SessionId;
public uint ProcessId;
public IntPtr pProcessName;
public IntPtr pUserSid;
public uint NumberOfThreads;
public uint HandleCount;
public uint PagefileUsage;
public uint PeakPagefileUsage;
public uint WorkingSetSize;
public uint PeakWorkingSetSize;
public long UserTime;
public long KernelTime;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WTS_PROCESS_INFO_EXA
Public SessionId As UInteger
Public ProcessId As UInteger
Public pProcessName As IntPtr
Public pUserSid As IntPtr
Public NumberOfThreads As UInteger
Public HandleCount As UInteger
Public PagefileUsage As UInteger
Public PeakPagefileUsage As UInteger
Public WorkingSetSize As UInteger
Public PeakWorkingSetSize As UInteger
Public UserTime As Long
Public KernelTime As Long
End Structureimport ctypes
from ctypes import wintypes
class WTS_PROCESS_INFO_EXA(ctypes.Structure):
_fields_ = [
("SessionId", wintypes.DWORD),
("ProcessId", wintypes.DWORD),
("pProcessName", ctypes.c_void_p),
("pUserSid", ctypes.c_void_p),
("NumberOfThreads", wintypes.DWORD),
("HandleCount", wintypes.DWORD),
("PagefileUsage", wintypes.DWORD),
("PeakPagefileUsage", wintypes.DWORD),
("WorkingSetSize", wintypes.DWORD),
("PeakWorkingSetSize", wintypes.DWORD),
("UserTime", ctypes.c_longlong),
("KernelTime", ctypes.c_longlong),
]#[repr(C)]
pub struct WTS_PROCESS_INFO_EXA {
pub SessionId: u32,
pub ProcessId: u32,
pub pProcessName: *mut core::ffi::c_void,
pub pUserSid: *mut core::ffi::c_void,
pub NumberOfThreads: u32,
pub HandleCount: u32,
pub PagefileUsage: u32,
pub PeakPagefileUsage: u32,
pub WorkingSetSize: u32,
pub PeakWorkingSetSize: u32,
pub UserTime: i64,
pub KernelTime: i64,
}import "golang.org/x/sys/windows"
type WTS_PROCESS_INFO_EXA struct {
SessionId uint32
ProcessId uint32
pProcessName uintptr
pUserSid uintptr
NumberOfThreads uint32
HandleCount uint32
PagefileUsage uint32
PeakPagefileUsage uint32
WorkingSetSize uint32
PeakWorkingSetSize uint32
UserTime int64
KernelTime int64
}type
WTS_PROCESS_INFO_EXA = record
SessionId: DWORD;
ProcessId: DWORD;
pProcessName: Pointer;
pUserSid: Pointer;
NumberOfThreads: DWORD;
HandleCount: DWORD;
PagefileUsage: DWORD;
PeakPagefileUsage: DWORD;
WorkingSetSize: DWORD;
PeakWorkingSetSize: DWORD;
UserTime: Int64;
KernelTime: Int64;
end;const WTS_PROCESS_INFO_EXA = extern struct {
SessionId: u32,
ProcessId: u32,
pProcessName: ?*anyopaque,
pUserSid: ?*anyopaque,
NumberOfThreads: u32,
HandleCount: u32,
PagefileUsage: u32,
PeakPagefileUsage: u32,
WorkingSetSize: u32,
PeakWorkingSetSize: u32,
UserTime: i64,
KernelTime: i64,
};type
WTS_PROCESS_INFO_EXA {.bycopy.} = object
SessionId: uint32
ProcessId: uint32
pProcessName: pointer
pUserSid: pointer
NumberOfThreads: uint32
HandleCount: uint32
PagefileUsage: uint32
PeakPagefileUsage: uint32
WorkingSetSize: uint32
PeakWorkingSetSize: uint32
UserTime: int64
KernelTime: int64struct WTS_PROCESS_INFO_EXA
{
uint SessionId;
uint ProcessId;
void* pProcessName;
void* pUserSid;
uint NumberOfThreads;
uint HandleCount;
uint PagefileUsage;
uint PeakPagefileUsage;
uint WorkingSetSize;
uint PeakWorkingSetSize;
long UserTime;
long KernelTime;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WTS_PROCESS_INFO_EXA サイズ: 56 バイト(x86)
dim st, 14 ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; SessionId : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; ProcessId : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; pProcessName : LPSTR (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; pUserSid : PSID (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; NumberOfThreads : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; HandleCount : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; PagefileUsage : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; PeakPagefileUsage : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; WorkingSetSize : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; PeakWorkingSetSize : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; UserTime : LONGLONG (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; KernelTime : LONGLONG (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WTS_PROCESS_INFO_EXA サイズ: 64 バイト(x64)
dim st, 16 ; 4byte整数×16(構造体サイズ 64 / 4 切り上げ)
; SessionId : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; ProcessId : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; pProcessName : LPSTR (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; pUserSid : PSID (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; NumberOfThreads : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; HandleCount : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; PagefileUsage : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; PeakPagefileUsage : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; WorkingSetSize : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; PeakWorkingSetSize : DWORD (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; UserTime : LONGLONG (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; KernelTime : 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 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WTS_PROCESS_INFO_EXA
#field int SessionId
#field int ProcessId
#field intptr pProcessName
#field intptr pUserSid
#field int NumberOfThreads
#field int HandleCount
#field int PagefileUsage
#field int PeakPagefileUsage
#field int WorkingSetSize
#field int PeakWorkingSetSize
#field int64 UserTime
#field int64 KernelTime
#endstruct
stdim st, WTS_PROCESS_INFO_EXA ; NSTRUCT 変数を確保
st->SessionId = 100
mes "SessionId=" + st->SessionId