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

WSMAN_SHELL_STARTUP_INFO_V10

構造体
サイズx64: 40 バイト / x86: 20 バイト

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

フィールド

フィールドサイズx64x86説明
inputStreamSetWSMAN_STREAM_ID_SET*8/4+0+0シェルの入力ストリームのセットを指定する WSMAN_STREAM_ID_SET 構造体へのポインターです。フィルターに存在しないストリームは、シェルの実装によって無視されることがあります。 Windows の Cmd.exe シェルの場合、この値は L"stdin" にしてください。 値が NULL の場合、実装は既定値として L"stdin" を格納した配列を使用します。
outputStreamSetWSMAN_STREAM_ID_SET*8/4+8+4シェルの出力ストリームのセットを指定する WSMAN_STREAM_ID_SET 構造体へのポインターです。フィルターに存在しないストリームは、シェルの実装によって無視されることがあります。 Windows の cmd.exe シェルの場合、この値は L"stdout stderr" にしてください。 値が NULL の場合、実装は既定値として L"stdout" と L"stderr" を格納した配列を使用します。
idleTimeoutMsDWORD4+16+8クライアントからの要求がない状態でシェルが開いたままになる最大時間をミリ秒単位で指定します。この最大時間を超えると、シェルは自動的に削除されます。0 から 0xFFFFFFFF までの任意の値を設定できます。この時間の上限は、有効になっている場合はアイドル タイムアウトの GPO 設定によって、そうでない場合は IdleTimeout のローカル構成によって指定されます。GPO/ローカル構成における最大時間の既定値は 15 分ですが、システム管理者がこの値を変更することもできます。GPO/ローカル構成の最大値を使用するには、クライアントはこのフィールドに 0 (ゼロ) を指定します。0 から 0xFFFFFFFF の間の明示的な値を使用した場合は、API に指定した明示的な値と GPO/ローカル構成の値のうち、小さい方の値が使用されます。
workingDirectoryLPWSTR8/4+24+12シェルの開始ディレクトリを指定します。これはすべての実行コマンドで使用されます。このメンバーが NULL 値の場合、コマンドの実行時にリモート コンピューターで既定のディレクトリが使用されます。空の値は、基になるプロトコルでは値が省略されたものとして扱われます。
variableSetWSMAN_ENVIRONMENT_VARIABLE_SET*8/4+32+16

変数名と値のペアの配列を指定する WSMAN_ENVIRONMENT_VARIABLE_SET 構造体へのポインターです。これらのペアは、シェルの開始時の環境を表します。これらの要素の内容はシェルに固有であり、他の環境変数を用いて定義することもできます。NULL 値を渡した場合は、サーバー側で既定の環境が使用されます。

- name

シェルに関連付けるオプションのフレンドリ名を指定します。このパラメーターは、クライアントが WSManInitialize にフラグ WSMAN_FLAG_REQUESTED_API_VERSION_1_1 を渡した場合にのみ機能します。

公式ドキュメント

WSManCreateShell 関数で使用するシェルの起動パラメーターを定義します。この構造体はクライアントが割り当て、WSManCreateShell 関数に渡す必要があります。

WSManCreateShell 関数に渡す構成は、シェル内で実行されるコマンドの動作に直接影響することがあります。代表的な例は workingDirectory 引数で、各プロセスに関連付けられる作業ディレクトリを表します。オペレーティング システムは、相対パスで指定されたファイルを特定する際にこの値を使用します。

ストリーム名に関する固有の要件がない場合、クライアントとサービスは、入力ストリームには STDIN、既定の出力ストリームには STDOUT、エラーまたは状態の出力ストリームには STDERR を使用するようにしてください。

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

各言語での定義

#include <windows.h>

// WSMAN_SHELL_STARTUP_INFO_V10  (x64 40 / x86 20 バイト)
typedef struct WSMAN_SHELL_STARTUP_INFO_V10 {
    WSMAN_STREAM_ID_SET* inputStreamSet;
    WSMAN_STREAM_ID_SET* outputStreamSet;
    DWORD idleTimeoutMs;
    LPWSTR workingDirectory;
    WSMAN_ENVIRONMENT_VARIABLE_SET* variableSet;
} WSMAN_SHELL_STARTUP_INFO_V10;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WSMAN_SHELL_STARTUP_INFO_V10
{
    public IntPtr inputStreamSet;
    public IntPtr outputStreamSet;
    public uint idleTimeoutMs;
    public IntPtr workingDirectory;
    public IntPtr variableSet;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WSMAN_SHELL_STARTUP_INFO_V10
    Public inputStreamSet As IntPtr
    Public outputStreamSet As IntPtr
    Public idleTimeoutMs As UInteger
    Public workingDirectory As IntPtr
    Public variableSet As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class WSMAN_SHELL_STARTUP_INFO_V10(ctypes.Structure):
    _fields_ = [
        ("inputStreamSet", ctypes.c_void_p),
        ("outputStreamSet", ctypes.c_void_p),
        ("idleTimeoutMs", wintypes.DWORD),
        ("workingDirectory", ctypes.c_void_p),
        ("variableSet", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct WSMAN_SHELL_STARTUP_INFO_V10 {
    pub inputStreamSet: *mut core::ffi::c_void,
    pub outputStreamSet: *mut core::ffi::c_void,
    pub idleTimeoutMs: u32,
    pub workingDirectory: *mut core::ffi::c_void,
    pub variableSet: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type WSMAN_SHELL_STARTUP_INFO_V10 struct {
	inputStreamSet uintptr
	outputStreamSet uintptr
	idleTimeoutMs uint32
	workingDirectory uintptr
	variableSet uintptr
}
type
  WSMAN_SHELL_STARTUP_INFO_V10 = record
    inputStreamSet: Pointer;
    outputStreamSet: Pointer;
    idleTimeoutMs: DWORD;
    workingDirectory: Pointer;
    variableSet: Pointer;
  end;
const WSMAN_SHELL_STARTUP_INFO_V10 = extern struct {
    inputStreamSet: ?*anyopaque,
    outputStreamSet: ?*anyopaque,
    idleTimeoutMs: u32,
    workingDirectory: ?*anyopaque,
    variableSet: ?*anyopaque,
};
type
  WSMAN_SHELL_STARTUP_INFO_V10 {.bycopy.} = object
    inputStreamSet: pointer
    outputStreamSet: pointer
    idleTimeoutMs: uint32
    workingDirectory: pointer
    variableSet: pointer
struct WSMAN_SHELL_STARTUP_INFO_V10
{
    void* inputStreamSet;
    void* outputStreamSet;
    uint idleTimeoutMs;
    void* workingDirectory;
    void* variableSet;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; WSMAN_SHELL_STARTUP_INFO_V10 サイズ: 20 バイト(x86)
dim st, 5    ; 4byte整数×5(構造体サイズ 20 / 4 切り上げ)
; inputStreamSet : WSMAN_STREAM_ID_SET* (+0, 4byte)  varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; outputStreamSet : WSMAN_STREAM_ID_SET* (+4, 4byte)  varptr(st)+4 を基点に操作(4byte:入れ子/配列)
; idleTimeoutMs : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; workingDirectory : LPWSTR (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; variableSet : WSMAN_ENVIRONMENT_VARIABLE_SET* (+16, 4byte)  varptr(st)+16 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WSMAN_SHELL_STARTUP_INFO_V10 サイズ: 40 バイト(x64)
dim st, 10    ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; inputStreamSet : WSMAN_STREAM_ID_SET* (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; outputStreamSet : WSMAN_STREAM_ID_SET* (+8, 8byte)  varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; idleTimeoutMs : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; workingDirectory : LPWSTR (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; variableSet : WSMAN_ENVIRONMENT_VARIABLE_SET* (+32, 8byte)  varptr(st)+32 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WSMAN_SHELL_STARTUP_INFO_V10
    #field intptr inputStreamSet
    #field intptr outputStreamSet
    #field int idleTimeoutMs
    #field intptr workingDirectory
    #field intptr variableSet
#endstruct

stdim st, WSMAN_SHELL_STARTUP_INFO_V10        ; NSTRUCT 変数を確保
st->idleTimeoutMs = 100
mes "idleTimeoutMs=" + st->idleTimeoutMs