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

WTS_PROCESS_INFO_EXA

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

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

フィールド

フィールドサイズx64x86説明
SessionIdDWORD4+0+0プロセスが属するセッションの識別子。
ProcessIdDWORD4+4+4プロセスの識別子。
pProcessNameLPSTR8/4+8+8プロセス名(ANSI)へのポインタ。
pUserSidPSID8/4+16+12プロセス所有者のセキュリティ識別子(SID)。
NumberOfThreadsDWORD4+24+16プロセス内のスレッド数。
HandleCountDWORD4+28+20プロセスが開いているハンドルの数。
PagefileUsageDWORD4+32+24ページファイルにコミットされた使用量。バイト数。
PeakPagefileUsageDWORD4+36+28ページファイル使用量のピーク値。バイト数で表す。
WorkingSetSizeDWORD4+40+32現在のワーキングセットサイズ。バイト数で表す。
PeakWorkingSetSizeDWORD4+44+36ワーキングセットサイズのピーク値。バイト数で表す。
UserTimeLONGLONG8+48+40ユーザーモードでの累積実行時間。100ns単位で表す。
KernelTimeLONGLONG8+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 Structure
import 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: int64
struct 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