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

WSManCreateSession

関数
リモート管理用のWS-Manセッションを作成する。
DLLWsmSvc.dll呼出規約winapi対応OSWindows 7 以降

シグネチャ

// WsmSvc.dll
#include <windows.h>

DWORD WSManCreateSession(
    WSMAN_API_HANDLE apiHandle,
    LPCWSTR connection,   // optional
    DWORD flags,
    WSMAN_AUTHENTICATION_CREDENTIALS* serverAuthenticationCredentials,   // optional
    WSMAN_PROXY_INFO* proxyInfo,   // optional
    WSMAN_SESSION_HANDLE* session
);

パラメーター

名前方向
apiHandleWSMAN_API_HANDLEin
connectionLPCWSTRinoptional
flagsDWORDin
serverAuthenticationCredentialsWSMAN_AUTHENTICATION_CREDENTIALS*inoptional
proxyInfoWSMAN_PROXY_INFO*inoptional
sessionWSMAN_SESSION_HANDLE*out

戻り値の型: DWORD

各言語での呼び出し定義

// WsmSvc.dll
#include <windows.h>

DWORD WSManCreateSession(
    WSMAN_API_HANDLE apiHandle,
    LPCWSTR connection,   // optional
    DWORD flags,
    WSMAN_AUTHENTICATION_CREDENTIALS* serverAuthenticationCredentials,   // optional
    WSMAN_PROXY_INFO* proxyInfo,   // optional
    WSMAN_SESSION_HANDLE* session
);
[DllImport("WsmSvc.dll", ExactSpelling = true)]
static extern uint WSManCreateSession(
    IntPtr apiHandle,   // WSMAN_API_HANDLE
    [MarshalAs(UnmanagedType.LPWStr)] string connection,   // LPCWSTR optional
    uint flags,   // DWORD
    IntPtr serverAuthenticationCredentials,   // WSMAN_AUTHENTICATION_CREDENTIALS* optional
    IntPtr proxyInfo,   // WSMAN_PROXY_INFO* optional
    out IntPtr session   // WSMAN_SESSION_HANDLE* out
);
<DllImport("WsmSvc.dll", ExactSpelling:=True)>
Public Shared Function WSManCreateSession(
    apiHandle As IntPtr,   ' WSMAN_API_HANDLE
    <MarshalAs(UnmanagedType.LPWStr)> connection As String,   ' LPCWSTR optional
    flags As UInteger,   ' DWORD
    serverAuthenticationCredentials As IntPtr,   ' WSMAN_AUTHENTICATION_CREDENTIALS* optional
    proxyInfo As IntPtr,   ' WSMAN_PROXY_INFO* optional
    <Out> ByRef session As IntPtr   ' WSMAN_SESSION_HANDLE* out
) As UInteger
End Function
' apiHandle : WSMAN_API_HANDLE
' connection : LPCWSTR optional
' flags : DWORD
' serverAuthenticationCredentials : WSMAN_AUTHENTICATION_CREDENTIALS* optional
' proxyInfo : WSMAN_PROXY_INFO* optional
' session : WSMAN_SESSION_HANDLE* out
Declare PtrSafe Function WSManCreateSession Lib "wsmsvc" ( _
    ByVal apiHandle As LongPtr, _
    ByVal connection As LongPtr, _
    ByVal flags As Long, _
    ByVal serverAuthenticationCredentials As LongPtr, _
    ByVal proxyInfo As LongPtr, _
    ByRef session As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

WSManCreateSession = ctypes.windll.wsmsvc.WSManCreateSession
WSManCreateSession.restype = wintypes.DWORD
WSManCreateSession.argtypes = [
    ctypes.c_ssize_t,  # apiHandle : WSMAN_API_HANDLE
    wintypes.LPCWSTR,  # connection : LPCWSTR optional
    wintypes.DWORD,  # flags : DWORD
    ctypes.c_void_p,  # serverAuthenticationCredentials : WSMAN_AUTHENTICATION_CREDENTIALS* optional
    ctypes.c_void_p,  # proxyInfo : WSMAN_PROXY_INFO* optional
    ctypes.c_void_p,  # session : WSMAN_SESSION_HANDLE* out
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('WsmSvc.dll')
WSManCreateSession = Fiddle::Function.new(
  lib['WSManCreateSession'],
  [
    Fiddle::TYPE_INTPTR_T,  # apiHandle : WSMAN_API_HANDLE
    Fiddle::TYPE_VOIDP,  # connection : LPCWSTR optional
    -Fiddle::TYPE_INT,  # flags : DWORD
    Fiddle::TYPE_VOIDP,  # serverAuthenticationCredentials : WSMAN_AUTHENTICATION_CREDENTIALS* optional
    Fiddle::TYPE_VOIDP,  # proxyInfo : WSMAN_PROXY_INFO* optional
    Fiddle::TYPE_VOIDP,  # session : WSMAN_SESSION_HANDLE* out
  ],
  -Fiddle::TYPE_INT)
#[link(name = "wsmsvc")]
extern "system" {
    fn WSManCreateSession(
        apiHandle: isize,  // WSMAN_API_HANDLE
        connection: *const u16,  // LPCWSTR optional
        flags: u32,  // DWORD
        serverAuthenticationCredentials: *mut WSMAN_AUTHENTICATION_CREDENTIALS,  // WSMAN_AUTHENTICATION_CREDENTIALS* optional
        proxyInfo: *mut WSMAN_PROXY_INFO,  // WSMAN_PROXY_INFO* optional
        session: *mut isize  // WSMAN_SESSION_HANDLE* out
    ) -> u32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("WsmSvc.dll")]
public static extern uint WSManCreateSession(IntPtr apiHandle, [MarshalAs(UnmanagedType.LPWStr)] string connection, uint flags, IntPtr serverAuthenticationCredentials, IntPtr proxyInfo, out IntPtr session);
"@
$api = Add-Type -MemberDefinition $sig -Name 'WsmSvc_WSManCreateSession' -Namespace Win32 -PassThru
# $api::WSManCreateSession(apiHandle, connection, flags, serverAuthenticationCredentials, proxyInfo, session)
#uselib "WsmSvc.dll"
#func global WSManCreateSession "WSManCreateSession" sptr, sptr, sptr, sptr, sptr, sptr
; WSManCreateSession apiHandle, connection, flags, varptr(serverAuthenticationCredentials), varptr(proxyInfo), session   ; 戻り値は stat
; apiHandle : WSMAN_API_HANDLE -> "sptr"
; connection : LPCWSTR optional -> "sptr"
; flags : DWORD -> "sptr"
; serverAuthenticationCredentials : WSMAN_AUTHENTICATION_CREDENTIALS* optional -> "sptr"
; proxyInfo : WSMAN_PROXY_INFO* optional -> "sptr"
; session : WSMAN_SESSION_HANDLE* out -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "WsmSvc.dll"
#cfunc global WSManCreateSession "WSManCreateSession" sptr, wstr, int, var, var, int
; res = WSManCreateSession(apiHandle, connection, flags, serverAuthenticationCredentials, proxyInfo, session)
; apiHandle : WSMAN_API_HANDLE -> "sptr"
; connection : LPCWSTR optional -> "wstr"
; flags : DWORD -> "int"
; serverAuthenticationCredentials : WSMAN_AUTHENTICATION_CREDENTIALS* optional -> "var"
; proxyInfo : WSMAN_PROXY_INFO* optional -> "var"
; session : WSMAN_SESSION_HANDLE* out -> "int"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; DWORD WSManCreateSession(WSMAN_API_HANDLE apiHandle, LPCWSTR connection, DWORD flags, WSMAN_AUTHENTICATION_CREDENTIALS* serverAuthenticationCredentials, WSMAN_PROXY_INFO* proxyInfo, WSMAN_SESSION_HANDLE* session)
#uselib "WsmSvc.dll"
#cfunc global WSManCreateSession "WSManCreateSession" intptr, wstr, int, var, var, int
; res = WSManCreateSession(apiHandle, connection, flags, serverAuthenticationCredentials, proxyInfo, session)
; apiHandle : WSMAN_API_HANDLE -> "intptr"
; connection : LPCWSTR optional -> "wstr"
; flags : DWORD -> "int"
; serverAuthenticationCredentials : WSMAN_AUTHENTICATION_CREDENTIALS* optional -> "var"
; proxyInfo : WSMAN_PROXY_INFO* optional -> "var"
; session : WSMAN_SESSION_HANDLE* out -> "int"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	wsmsvc = windows.NewLazySystemDLL("WsmSvc.dll")
	procWSManCreateSession = wsmsvc.NewProc("WSManCreateSession")
)

// apiHandle (WSMAN_API_HANDLE), connection (LPCWSTR optional), flags (DWORD), serverAuthenticationCredentials (WSMAN_AUTHENTICATION_CREDENTIALS* optional), proxyInfo (WSMAN_PROXY_INFO* optional), session (WSMAN_SESSION_HANDLE* out)
r1, _, err := procWSManCreateSession.Call(
	uintptr(apiHandle),
	uintptr(unsafe.Pointer(windows.StringToUTF16Ptr(connection))),
	uintptr(flags),
	uintptr(serverAuthenticationCredentials),
	uintptr(proxyInfo),
	uintptr(session),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // DWORD
function WSManCreateSession(
  apiHandle: NativeInt;   // WSMAN_API_HANDLE
  connection: PWideChar;   // LPCWSTR optional
  flags: DWORD;   // DWORD
  serverAuthenticationCredentials: Pointer;   // WSMAN_AUTHENTICATION_CREDENTIALS* optional
  proxyInfo: Pointer;   // WSMAN_PROXY_INFO* optional
  session: Pointer   // WSMAN_SESSION_HANDLE* out
): DWORD; stdcall;
  external 'WsmSvc.dll' name 'WSManCreateSession';
result := DllCall("WsmSvc\WSManCreateSession"
    , "Ptr", apiHandle   ; WSMAN_API_HANDLE
    , "WStr", connection   ; LPCWSTR optional
    , "UInt", flags   ; DWORD
    , "Ptr", serverAuthenticationCredentials   ; WSMAN_AUTHENTICATION_CREDENTIALS* optional
    , "Ptr", proxyInfo   ; WSMAN_PROXY_INFO* optional
    , "Ptr", session   ; WSMAN_SESSION_HANDLE* out
    , "UInt")   ; return: DWORD
●WSManCreateSession(apiHandle, connection, flags, serverAuthenticationCredentials, proxyInfo, session) = DLL("WsmSvc.dll", "dword WSManCreateSession(int, char*, dword, void*, void*, void*)")
# 呼び出し: WSManCreateSession(apiHandle, connection, flags, serverAuthenticationCredentials, proxyInfo, session)
# apiHandle : WSMAN_API_HANDLE -> "int"
# connection : LPCWSTR optional -> "char*"
# flags : DWORD -> "dword"
# serverAuthenticationCredentials : WSMAN_AUTHENTICATION_CREDENTIALS* optional -> "void*"
# proxyInfo : WSMAN_PROXY_INFO* optional -> "void*"
# session : WSMAN_SESSION_HANDLE* out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。