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

WTS_PROCESS_INFO_EXW

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

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

フィールド

フィールドサイズx64x86説明
SessionIdDWORD4+0+0プロセスが関連付けられているセッションのリモート デスクトップ サービス セッション識別子です。
ProcessIdDWORD4+4+4RD セッション ホスト サーバー上でプロセスを一意に識別するプロセス識別子です。
pProcessNameLPWSTR8/4+8+8プロセスに関連付けられている実行可能ファイルの名前を格納する、NULL で終わる文字列へのポインターです。
pUserSidPSID8/4+16+12プロセスのプライマリ アクセス トークン内のユーザー セキュリティ識別子 (SID) へのポインターです。SID とアクセス トークンの詳細については、 Access Control および Security Identifiers を参照してください。
NumberOfThreadsDWORD4+24+16プロセス内のスレッド数です。
HandleCountDWORD4+28+20プロセス内のハンドル数です。
PagefileUsageDWORD4+32+24プロセスのページ ファイル使用量 (バイト単位) です。
PeakPagefileUsageDWORD4+36+28プロセスのページ ファイル使用量のピーク値 (バイト単位) です。
WorkingSetSizeDWORD4+40+32プロセスのワーキング セット サイズ (バイト単位) です。
PeakWorkingSetSizeDWORD4+44+36プロセスのワーキング セット サイズのピーク値 (バイト単位) です。
UserTimeLONGLONG8+48+40プロセスがユーザー モードで実行された時間 (ミリ秒単位) です。
KernelTimeLONGLONG8+56+48プロセスがカーネル モードで実行された時間 (ミリ秒単位) です。

公式ドキュメント

リモート デスクトップ セッション ホスト (RD セッション ホスト) サーバー上で実行されているプロセスに関する拡張情報を格納します。この構造体は、pLevel パラメーターに 1 を設定したときに WTSEnumerateProcessesEx 関数から返されます。

解説(Remarks)

メモ

wtsapi32.h ヘッダーでは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI 版と Unicode 版を自動的に選択するエイリアスとして WTS_PROCESS_INFO_EX が定義されています。エンコードに依存しないエイリアスの使用と、エンコードに依存するコードを混在させると、不一致が生じ、コンパイル エラーや実行時エラーの原因となることがあります。詳細については、Conventions for Function Prototypes を参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// WTS_PROCESS_INFO_EXW  (x64 64 / x86 56 バイト)
typedef struct WTS_PROCESS_INFO_EXW {
    DWORD SessionId;
    DWORD ProcessId;
    LPWSTR pProcessName;
    PSID pUserSid;
    DWORD NumberOfThreads;
    DWORD HandleCount;
    DWORD PagefileUsage;
    DWORD PeakPagefileUsage;
    DWORD WorkingSetSize;
    DWORD PeakWorkingSetSize;
    LONGLONG UserTime;
    LONGLONG KernelTime;
} WTS_PROCESS_INFO_EXW;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WTS_PROCESS_INFO_EXW
{
    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_EXW
    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_EXW(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_EXW {
    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_EXW 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_EXW = 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_EXW = 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_EXW {.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_EXW
{
    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_EXW サイズ: 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 : LPWSTR (+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_EXW サイズ: 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 : LPWSTR (+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_EXW
    #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_EXW        ; NSTRUCT 変数を確保
st->SessionId = 100
mes "SessionId=" + st->SessionId