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

WTSSBX_MACHINE_INFO

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

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

フィールド

フィールドサイズx64x86説明
ClientConnectInfoWTSSBX_MACHINE_CONNECT_INFO888+0+0クライアント接続用のマシン接続情報。
wczFarmNameWCHAR514+888+888マシンが属するファーム名。
InternalIPAddressWTSSBX_IP_ADDRESS28+1404+1404マシンの内部IPアドレス。
dwMaxSessionsLimitDWORD4+1432+1432このマシンが許可する最大セッション数。
ServerWeightDWORD4+1436+1436負荷分散に用いるサーバーの重み値。
SingleSessionModeWTSSBX_MACHINE_SESSION_MODE4+1440+1440単一セッションモードかどうかを示す列挙値。
InDrainWTSSBX_MACHINE_DRAIN4+1444+1444ドレイン(新規接続停止)状態かを示す列挙値。
MachineStateWTSSBX_MACHINE_STATE4+1448+1448マシンの状態を示す列挙値。

各言語での定義

#include <windows.h>

// WTSSBX_IP_ADDRESS  (x64 28 / x86 28 バイト)
typedef struct WTSSBX_IP_ADDRESS {
    WTSSBX_ADDRESS_FAMILY AddressFamily;
    BYTE Address[16];
    WORD PortNumber;
    DWORD dwScope;
} WTSSBX_IP_ADDRESS;

// WTSSBX_MACHINE_CONNECT_INFO  (x64 888 / x86 888 バイト)
typedef struct WTSSBX_MACHINE_CONNECT_INFO {
    WCHAR wczMachineFQDN[257];
    WCHAR wczMachineNetBiosName[17];
    DWORD dwNumOfIPAddr;
    WTSSBX_IP_ADDRESS IPaddr[12];
} WTSSBX_MACHINE_CONNECT_INFO;

// WTSSBX_MACHINE_INFO  (x64 1452 / x86 1452 バイト)
typedef struct WTSSBX_MACHINE_INFO {
    WTSSBX_MACHINE_CONNECT_INFO ClientConnectInfo;
    WCHAR wczFarmName[257];
    WTSSBX_IP_ADDRESS InternalIPAddress;
    DWORD dwMaxSessionsLimit;
    DWORD ServerWeight;
    WTSSBX_MACHINE_SESSION_MODE SingleSessionMode;
    WTSSBX_MACHINE_DRAIN InDrain;
    WTSSBX_MACHINE_STATE MachineState;
} WTSSBX_MACHINE_INFO;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WTSSBX_IP_ADDRESS
{
    public int AddressFamily;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] Address;
    public ushort PortNumber;
    public uint dwScope;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WTSSBX_MACHINE_CONNECT_INFO
{
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 257)] public string wczMachineFQDN;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 17)] public string wczMachineNetBiosName;
    public uint dwNumOfIPAddr;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 12)] public WTSSBX_IP_ADDRESS[] IPaddr;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WTSSBX_MACHINE_INFO
{
    public WTSSBX_MACHINE_CONNECT_INFO ClientConnectInfo;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 257)] public string wczFarmName;
    public WTSSBX_IP_ADDRESS InternalIPAddress;
    public uint dwMaxSessionsLimit;
    public uint ServerWeight;
    public int SingleSessionMode;
    public int InDrain;
    public int MachineState;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WTSSBX_IP_ADDRESS
    Public AddressFamily As Integer
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=16)> Public Address() As Byte
    Public PortNumber As UShort
    Public dwScope As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WTSSBX_MACHINE_CONNECT_INFO
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=257)> Public wczMachineFQDN As String
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=17)> Public wczMachineNetBiosName As String
    Public dwNumOfIPAddr As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=12)> Public IPaddr() As WTSSBX_IP_ADDRESS
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WTSSBX_MACHINE_INFO
    Public ClientConnectInfo As WTSSBX_MACHINE_CONNECT_INFO
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=257)> Public wczFarmName As String
    Public InternalIPAddress As WTSSBX_IP_ADDRESS
    Public dwMaxSessionsLimit As UInteger
    Public ServerWeight As UInteger
    Public SingleSessionMode As Integer
    Public InDrain As Integer
    Public MachineState As Integer
End Structure
import ctypes
from ctypes import wintypes

class WTSSBX_IP_ADDRESS(ctypes.Structure):
    _fields_ = [
        ("AddressFamily", ctypes.c_int),
        ("Address", ctypes.c_ubyte * 16),
        ("PortNumber", ctypes.c_ushort),
        ("dwScope", wintypes.DWORD),
    ]

class WTSSBX_MACHINE_CONNECT_INFO(ctypes.Structure):
    _fields_ = [
        ("wczMachineFQDN", ctypes.c_wchar * 257),
        ("wczMachineNetBiosName", ctypes.c_wchar * 17),
        ("dwNumOfIPAddr", wintypes.DWORD),
        ("IPaddr", WTSSBX_IP_ADDRESS * 12),
    ]

class WTSSBX_MACHINE_INFO(ctypes.Structure):
    _fields_ = [
        ("ClientConnectInfo", WTSSBX_MACHINE_CONNECT_INFO),
        ("wczFarmName", ctypes.c_wchar * 257),
        ("InternalIPAddress", WTSSBX_IP_ADDRESS),
        ("dwMaxSessionsLimit", wintypes.DWORD),
        ("ServerWeight", wintypes.DWORD),
        ("SingleSessionMode", ctypes.c_int),
        ("InDrain", ctypes.c_int),
        ("MachineState", ctypes.c_int),
    ]
#[repr(C)]
pub struct WTSSBX_IP_ADDRESS {
    pub AddressFamily: i32,
    pub Address: [u8; 16],
    pub PortNumber: u16,
    pub dwScope: u32,
}

#[repr(C)]
pub struct WTSSBX_MACHINE_CONNECT_INFO {
    pub wczMachineFQDN: [u16; 257],
    pub wczMachineNetBiosName: [u16; 17],
    pub dwNumOfIPAddr: u32,
    pub IPaddr: [WTSSBX_IP_ADDRESS; 12],
}

#[repr(C)]
pub struct WTSSBX_MACHINE_INFO {
    pub ClientConnectInfo: WTSSBX_MACHINE_CONNECT_INFO,
    pub wczFarmName: [u16; 257],
    pub InternalIPAddress: WTSSBX_IP_ADDRESS,
    pub dwMaxSessionsLimit: u32,
    pub ServerWeight: u32,
    pub SingleSessionMode: i32,
    pub InDrain: i32,
    pub MachineState: i32,
}
import "golang.org/x/sys/windows"

type WTSSBX_IP_ADDRESS struct {
	AddressFamily int32
	Address [16]byte
	PortNumber uint16
	dwScope uint32
}

type WTSSBX_MACHINE_CONNECT_INFO struct {
	wczMachineFQDN [257]uint16
	wczMachineNetBiosName [17]uint16
	dwNumOfIPAddr uint32
	IPaddr [12]WTSSBX_IP_ADDRESS
}

type WTSSBX_MACHINE_INFO struct {
	ClientConnectInfo WTSSBX_MACHINE_CONNECT_INFO
	wczFarmName [257]uint16
	InternalIPAddress WTSSBX_IP_ADDRESS
	dwMaxSessionsLimit uint32
	ServerWeight uint32
	SingleSessionMode int32
	InDrain int32
	MachineState int32
}
type
  WTSSBX_IP_ADDRESS = record
    AddressFamily: Integer;
    Address: array[0..15] of Byte;
    PortNumber: Word;
    dwScope: DWORD;
  end;

  WTSSBX_MACHINE_CONNECT_INFO = record
    wczMachineFQDN: array[0..256] of WideChar;
    wczMachineNetBiosName: array[0..16] of WideChar;
    dwNumOfIPAddr: DWORD;
    IPaddr: array[0..11] of WTSSBX_IP_ADDRESS;
  end;

  WTSSBX_MACHINE_INFO = record
    ClientConnectInfo: WTSSBX_MACHINE_CONNECT_INFO;
    wczFarmName: array[0..256] of WideChar;
    InternalIPAddress: WTSSBX_IP_ADDRESS;
    dwMaxSessionsLimit: DWORD;
    ServerWeight: DWORD;
    SingleSessionMode: Integer;
    InDrain: Integer;
    MachineState: Integer;
  end;
const WTSSBX_IP_ADDRESS = extern struct {
    AddressFamily: i32,
    Address: [16]u8,
    PortNumber: u16,
    dwScope: u32,
};

const WTSSBX_MACHINE_CONNECT_INFO = extern struct {
    wczMachineFQDN: [257]u16,
    wczMachineNetBiosName: [17]u16,
    dwNumOfIPAddr: u32,
    IPaddr: [12]WTSSBX_IP_ADDRESS,
};

const WTSSBX_MACHINE_INFO = extern struct {
    ClientConnectInfo: WTSSBX_MACHINE_CONNECT_INFO,
    wczFarmName: [257]u16,
    InternalIPAddress: WTSSBX_IP_ADDRESS,
    dwMaxSessionsLimit: u32,
    ServerWeight: u32,
    SingleSessionMode: i32,
    InDrain: i32,
    MachineState: i32,
};
type
  WTSSBX_IP_ADDRESS {.bycopy.} = object
    AddressFamily: int32
    Address: array[16, uint8]
    PortNumber: uint16
    dwScope: uint32

  WTSSBX_MACHINE_CONNECT_INFO {.bycopy.} = object
    wczMachineFQDN: array[257, uint16]
    wczMachineNetBiosName: array[17, uint16]
    dwNumOfIPAddr: uint32
    IPaddr: array[12, WTSSBX_IP_ADDRESS]

  WTSSBX_MACHINE_INFO {.bycopy.} = object
    ClientConnectInfo: WTSSBX_MACHINE_CONNECT_INFO
    wczFarmName: array[257, uint16]
    InternalIPAddress: WTSSBX_IP_ADDRESS
    dwMaxSessionsLimit: uint32
    ServerWeight: uint32
    SingleSessionMode: int32
    InDrain: int32
    MachineState: int32
struct WTSSBX_IP_ADDRESS
{
    int AddressFamily;
    ubyte[16] Address;
    ushort PortNumber;
    uint dwScope;
}

struct WTSSBX_MACHINE_CONNECT_INFO
{
    wchar[257] wczMachineFQDN;
    wchar[17] wczMachineNetBiosName;
    uint dwNumOfIPAddr;
    WTSSBX_IP_ADDRESS[12] IPaddr;
}

struct WTSSBX_MACHINE_INFO
{
    WTSSBX_MACHINE_CONNECT_INFO ClientConnectInfo;
    wchar[257] wczFarmName;
    WTSSBX_IP_ADDRESS InternalIPAddress;
    uint dwMaxSessionsLimit;
    uint ServerWeight;
    int SingleSessionMode;
    int InDrain;
    int MachineState;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WTSSBX_MACHINE_INFO サイズ: 1452 バイト(x64)
dim st, 363    ; 4byte整数×363(構造体サイズ 1452 / 4 切り上げ)
; ClientConnectInfo : WTSSBX_MACHINE_CONNECT_INFO (+0, 888byte)  varptr(st)+0 を基点に操作(888byte:入れ子/配列)
; wczFarmName : WCHAR (+888, 514byte)  varptr(st)+888 を基点に操作(514byte:入れ子/配列)
; InternalIPAddress : WTSSBX_IP_ADDRESS (+1404, 28byte)  varptr(st)+1404 を基点に操作(28byte:入れ子/配列)
; dwMaxSessionsLimit : DWORD (+1432, 4byte)  st.358 = 値  /  値 = st.358   (lpoke/lpeek も可)
; ServerWeight : DWORD (+1436, 4byte)  st.359 = 値  /  値 = st.359   (lpoke/lpeek も可)
; SingleSessionMode : WTSSBX_MACHINE_SESSION_MODE (+1440, 4byte)  st.360 = 値  /  値 = st.360   (lpoke/lpeek も可)
; InDrain : WTSSBX_MACHINE_DRAIN (+1444, 4byte)  st.361 = 値  /  値 = st.361   (lpoke/lpeek も可)
; MachineState : WTSSBX_MACHINE_STATE (+1448, 4byte)  st.362 = 値  /  値 = st.362   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global WTSSBX_IP_ADDRESS
    #field int AddressFamily
    #field byte Address 16
    #field short PortNumber
    #field int dwScope
#endstruct

#defstruct global WTSSBX_MACHINE_CONNECT_INFO
    #field wchar wczMachineFQDN 257
    #field wchar wczMachineNetBiosName 17
    #field int dwNumOfIPAddr
    #field WTSSBX_IP_ADDRESS IPaddr 12
#endstruct

#defstruct global WTSSBX_MACHINE_INFO
    #field WTSSBX_MACHINE_CONNECT_INFO ClientConnectInfo
    #field wchar wczFarmName 257
    #field WTSSBX_IP_ADDRESS InternalIPAddress
    #field int dwMaxSessionsLimit
    #field int ServerWeight
    #field int SingleSessionMode
    #field int InDrain
    #field int MachineState
#endstruct

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