ホーム › System.RemoteDesktop › WTS_PROCESS_INFO_EXW
WTS_PROCESS_INFO_EXW
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| SessionId | DWORD | 4 | +0 | +0 | プロセスが関連付けられているセッションのリモート デスクトップ サービス セッション識別子です。 |
| ProcessId | DWORD | 4 | +4 | +4 | RD セッション ホスト サーバー上でプロセスを一意に識別するプロセス識別子です。 |
| pProcessName | LPWSTR | 8/4 | +8 | +8 | プロセスに関連付けられている実行可能ファイルの名前を格納する、NULL で終わる文字列へのポインターです。 |
| pUserSid | PSID | 8/4 | +16 | +12 | プロセスのプライマリ アクセス トークン内のユーザー セキュリティ識別子 (SID) へのポインターです。SID とアクセス トークンの詳細については、 Access Control および Security Identifiers を参照してください。 |
| 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 | プロセスがユーザー モードで実行された時間 (ミリ秒単位) です。 |
| KernelTime | LONGLONG | 8 | +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)
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 Structureimport 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: int64struct 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