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

WTS_LICENSE_CAPABILITIES

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

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

フィールド

フィールドサイズx64x86説明
KeyExchangeAlgDWORD4+0+0鍵交換アルゴリズムの識別子。
ProtocolVerDWORD4+4+4ライセンスプロトコルのバージョン。
fAuthenticateServerBOOL4+8+8サーバー認証を行うかのフラグ。BOOL型。
CertTypeWTS_CERT_TYPE4+12+12証明書の種別。WTS_CERT_TYPE列挙で表す。
cbClientNameDWORD4+16+16クライアント名バッファのサイズをバイト単位で表す。
rgbClientNameBYTE42+20+20クライアント名を格納するバイト配列。

各言語での定義

#include <windows.h>

// WTS_LICENSE_CAPABILITIES  (x64 64 / x86 64 バイト)
typedef struct WTS_LICENSE_CAPABILITIES {
    DWORD KeyExchangeAlg;
    DWORD ProtocolVer;
    BOOL fAuthenticateServer;
    WTS_CERT_TYPE CertType;
    DWORD cbClientName;
    BYTE rgbClientName[42];
} WTS_LICENSE_CAPABILITIES;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct WTS_LICENSE_CAPABILITIES
{
    public uint KeyExchangeAlg;
    public uint ProtocolVer;
    [MarshalAs(UnmanagedType.Bool)] public bool fAuthenticateServer;
    public int CertType;
    public uint cbClientName;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 42)] public byte[] rgbClientName;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure WTS_LICENSE_CAPABILITIES
    Public KeyExchangeAlg As UInteger
    Public ProtocolVer As UInteger
    <MarshalAs(UnmanagedType.Bool)> Public fAuthenticateServer As Boolean
    Public CertType As Integer
    Public cbClientName As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=42)> Public rgbClientName() As Byte
End Structure
import ctypes
from ctypes import wintypes

class WTS_LICENSE_CAPABILITIES(ctypes.Structure):
    _fields_ = [
        ("KeyExchangeAlg", wintypes.DWORD),
        ("ProtocolVer", wintypes.DWORD),
        ("fAuthenticateServer", wintypes.BOOL),
        ("CertType", ctypes.c_int),
        ("cbClientName", wintypes.DWORD),
        ("rgbClientName", ctypes.c_ubyte * 42),
    ]
#[repr(C)]
pub struct WTS_LICENSE_CAPABILITIES {
    pub KeyExchangeAlg: u32,
    pub ProtocolVer: u32,
    pub fAuthenticateServer: i32,
    pub CertType: i32,
    pub cbClientName: u32,
    pub rgbClientName: [u8; 42],
}
import "golang.org/x/sys/windows"

type WTS_LICENSE_CAPABILITIES struct {
	KeyExchangeAlg uint32
	ProtocolVer uint32
	fAuthenticateServer int32
	CertType int32
	cbClientName uint32
	rgbClientName [42]byte
}
type
  WTS_LICENSE_CAPABILITIES = record
    KeyExchangeAlg: DWORD;
    ProtocolVer: DWORD;
    fAuthenticateServer: BOOL;
    CertType: Integer;
    cbClientName: DWORD;
    rgbClientName: array[0..41] of Byte;
  end;
const WTS_LICENSE_CAPABILITIES = extern struct {
    KeyExchangeAlg: u32,
    ProtocolVer: u32,
    fAuthenticateServer: i32,
    CertType: i32,
    cbClientName: u32,
    rgbClientName: [42]u8,
};
type
  WTS_LICENSE_CAPABILITIES {.bycopy.} = object
    KeyExchangeAlg: uint32
    ProtocolVer: uint32
    fAuthenticateServer: int32
    CertType: int32
    cbClientName: uint32
    rgbClientName: array[42, uint8]
struct WTS_LICENSE_CAPABILITIES
{
    uint KeyExchangeAlg;
    uint ProtocolVer;
    int fAuthenticateServer;
    int CertType;
    uint cbClientName;
    ubyte[42] rgbClientName;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; WTS_LICENSE_CAPABILITIES サイズ: 64 バイト(x64)
dim st, 16    ; 4byte整数×16(構造体サイズ 64 / 4 切り上げ)
; KeyExchangeAlg : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; ProtocolVer : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; fAuthenticateServer : BOOL (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; CertType : WTS_CERT_TYPE (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; cbClientName : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; rgbClientName : BYTE (+20, 42byte)  varptr(st)+20 を基点に操作(42byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global WTS_LICENSE_CAPABILITIES
    #field int KeyExchangeAlg
    #field int ProtocolVer
    #field bool fAuthenticateServer
    #field int CertType
    #field int cbClientName
    #field byte rgbClientName 42
#endstruct

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