Win32 API 日本語リファレンス
ホームNetworkManagement.Rras › RAS_CONNECTION_2

RAS_CONNECTION_2

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

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

フィールド

フィールドサイズx64x86説明
hConnectionHANDLE8/4+0+0接続を識別するハンドル。
wszUserNameWCHAR514+8+4接続したユーザーの名前(ワイド文字列)。
dwInterfaceTypeROUTER_INTERFACE_TYPE4+524+520インターフェイスの種別を表すROUTER_INTERFACE_TYPE列挙値。
guidGUID16+528+524接続を一意に識別するGUID。
PppInfo2PPP_INFO_2304+544+540接続のPPPプロジェクション情報(PPP_INFO_2)。

各言語での定義

#include <windows.h>

// PPP_NBFCP_INFO  (x64 40 / x86 40 バイト)
typedef struct PPP_NBFCP_INFO {
    DWORD dwError;
    WCHAR wszWksta[17];
} PPP_NBFCP_INFO;

// PPP_IPCP_INFO2  (x64 76 / x86 76 バイト)
typedef struct PPP_IPCP_INFO2 {
    DWORD dwError;
    WCHAR wszAddress[16];
    WCHAR wszRemoteAddress[16];
    DWORD dwOptions;
    DWORD dwRemoteOptions;
} PPP_IPCP_INFO2;

// PPP_IPXCP_INFO  (x64 52 / x86 52 バイト)
typedef struct PPP_IPXCP_INFO {
    DWORD dwError;
    WCHAR wszAddress[23];
} PPP_IPXCP_INFO;

// PPP_ATCP_INFO  (x64 72 / x86 72 バイト)
typedef struct PPP_ATCP_INFO {
    DWORD dwError;
    WCHAR wszAddress[33];
} PPP_ATCP_INFO;

// PPP_CCP_INFO  (x64 20 / x86 20 バイト)
typedef struct PPP_CCP_INFO {
    DWORD dwError;
    DWORD dwCompressionAlgorithm;
    DWORD dwOptions;
    DWORD dwRemoteCompressionAlgorithm;
    DWORD dwRemoteOptions;
} PPP_CCP_INFO;

// PPP_LCP_INFO  (x64 44 / x86 44 バイト)
typedef struct PPP_LCP_INFO {
    DWORD dwError;
    PPP_LCP dwAuthenticationProtocol;
    PPP_LCP_INFO_AUTH_DATA dwAuthenticationData;
    DWORD dwRemoteAuthenticationProtocol;
    DWORD dwRemoteAuthenticationData;
    DWORD dwTerminateReason;
    DWORD dwRemoteTerminateReason;
    DWORD dwOptions;
    DWORD dwRemoteOptions;
    DWORD dwEapTypeId;
    DWORD dwRemoteEapTypeId;
} PPP_LCP_INFO;

// PPP_INFO_2  (x64 304 / x86 304 バイト)
typedef struct PPP_INFO_2 {
    PPP_NBFCP_INFO nbf;
    PPP_IPCP_INFO2 ip;
    PPP_IPXCP_INFO ipx;
    PPP_ATCP_INFO at;
    PPP_CCP_INFO ccp;
    PPP_LCP_INFO lcp;
} PPP_INFO_2;

// RAS_CONNECTION_2  (x64 848 / x86 844 バイト)
typedef struct RAS_CONNECTION_2 {
    HANDLE hConnection;
    WCHAR wszUserName[257];
    ROUTER_INTERFACE_TYPE dwInterfaceType;
    GUID guid;
    PPP_INFO_2 PppInfo2;
} RAS_CONNECTION_2;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PPP_NBFCP_INFO
{
    public uint dwError;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 17)] public string wszWksta;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PPP_IPCP_INFO2
{
    public uint dwError;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)] public string wszAddress;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)] public string wszRemoteAddress;
    public uint dwOptions;
    public uint dwRemoteOptions;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PPP_IPXCP_INFO
{
    public uint dwError;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 23)] public string wszAddress;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PPP_ATCP_INFO
{
    public uint dwError;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 33)] public string wszAddress;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PPP_CCP_INFO
{
    public uint dwError;
    public uint dwCompressionAlgorithm;
    public uint dwOptions;
    public uint dwRemoteCompressionAlgorithm;
    public uint dwRemoteOptions;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PPP_LCP_INFO
{
    public uint dwError;
    public uint dwAuthenticationProtocol;
    public uint dwAuthenticationData;
    public uint dwRemoteAuthenticationProtocol;
    public uint dwRemoteAuthenticationData;
    public uint dwTerminateReason;
    public uint dwRemoteTerminateReason;
    public uint dwOptions;
    public uint dwRemoteOptions;
    public uint dwEapTypeId;
    public uint dwRemoteEapTypeId;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PPP_INFO_2
{
    public PPP_NBFCP_INFO nbf;
    public PPP_IPCP_INFO2 ip;
    public PPP_IPXCP_INFO ipx;
    public PPP_ATCP_INFO at;
    public PPP_CCP_INFO ccp;
    public PPP_LCP_INFO lcp;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct RAS_CONNECTION_2
{
    public IntPtr hConnection;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 257)] public string wszUserName;
    public int dwInterfaceType;
    public Guid guid;
    public PPP_INFO_2 PppInfo2;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PPP_NBFCP_INFO
    Public dwError As UInteger
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=17)> Public wszWksta As String
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PPP_IPCP_INFO2
    Public dwError As UInteger
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=16)> Public wszAddress As String
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=16)> Public wszRemoteAddress As String
    Public dwOptions As UInteger
    Public dwRemoteOptions As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PPP_IPXCP_INFO
    Public dwError As UInteger
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=23)> Public wszAddress As String
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PPP_ATCP_INFO
    Public dwError As UInteger
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=33)> Public wszAddress As String
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PPP_CCP_INFO
    Public dwError As UInteger
    Public dwCompressionAlgorithm As UInteger
    Public dwOptions As UInteger
    Public dwRemoteCompressionAlgorithm As UInteger
    Public dwRemoteOptions As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PPP_LCP_INFO
    Public dwError As UInteger
    Public dwAuthenticationProtocol As UInteger
    Public dwAuthenticationData As UInteger
    Public dwRemoteAuthenticationProtocol As UInteger
    Public dwRemoteAuthenticationData As UInteger
    Public dwTerminateReason As UInteger
    Public dwRemoteTerminateReason As UInteger
    Public dwOptions As UInteger
    Public dwRemoteOptions As UInteger
    Public dwEapTypeId As UInteger
    Public dwRemoteEapTypeId As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PPP_INFO_2
    Public nbf As PPP_NBFCP_INFO
    Public ip As PPP_IPCP_INFO2
    Public ipx As PPP_IPXCP_INFO
    Public at As PPP_ATCP_INFO
    Public ccp As PPP_CCP_INFO
    Public lcp As PPP_LCP_INFO
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure RAS_CONNECTION_2
    Public hConnection As IntPtr
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=257)> Public wszUserName As String
    Public dwInterfaceType As Integer
    Public guid As Guid
    Public PppInfo2 As PPP_INFO_2
End Structure
import ctypes
from ctypes import wintypes

class PPP_NBFCP_INFO(ctypes.Structure):
    _fields_ = [
        ("dwError", wintypes.DWORD),
        ("wszWksta", ctypes.c_wchar * 17),
    ]

class PPP_IPCP_INFO2(ctypes.Structure):
    _fields_ = [
        ("dwError", wintypes.DWORD),
        ("wszAddress", ctypes.c_wchar * 16),
        ("wszRemoteAddress", ctypes.c_wchar * 16),
        ("dwOptions", wintypes.DWORD),
        ("dwRemoteOptions", wintypes.DWORD),
    ]

class PPP_IPXCP_INFO(ctypes.Structure):
    _fields_ = [
        ("dwError", wintypes.DWORD),
        ("wszAddress", ctypes.c_wchar * 23),
    ]

class PPP_ATCP_INFO(ctypes.Structure):
    _fields_ = [
        ("dwError", wintypes.DWORD),
        ("wszAddress", ctypes.c_wchar * 33),
    ]

class PPP_CCP_INFO(ctypes.Structure):
    _fields_ = [
        ("dwError", wintypes.DWORD),
        ("dwCompressionAlgorithm", wintypes.DWORD),
        ("dwOptions", wintypes.DWORD),
        ("dwRemoteCompressionAlgorithm", wintypes.DWORD),
        ("dwRemoteOptions", wintypes.DWORD),
    ]

class PPP_LCP_INFO(ctypes.Structure):
    _fields_ = [
        ("dwError", wintypes.DWORD),
        ("dwAuthenticationProtocol", wintypes.DWORD),
        ("dwAuthenticationData", wintypes.DWORD),
        ("dwRemoteAuthenticationProtocol", wintypes.DWORD),
        ("dwRemoteAuthenticationData", wintypes.DWORD),
        ("dwTerminateReason", wintypes.DWORD),
        ("dwRemoteTerminateReason", wintypes.DWORD),
        ("dwOptions", wintypes.DWORD),
        ("dwRemoteOptions", wintypes.DWORD),
        ("dwEapTypeId", wintypes.DWORD),
        ("dwRemoteEapTypeId", wintypes.DWORD),
    ]

class PPP_INFO_2(ctypes.Structure):
    _fields_ = [
        ("nbf", PPP_NBFCP_INFO),
        ("ip", PPP_IPCP_INFO2),
        ("ipx", PPP_IPXCP_INFO),
        ("at", PPP_ATCP_INFO),
        ("ccp", PPP_CCP_INFO),
        ("lcp", PPP_LCP_INFO),
    ]

class RAS_CONNECTION_2(ctypes.Structure):
    _fields_ = [
        ("hConnection", ctypes.c_void_p),
        ("wszUserName", ctypes.c_wchar * 257),
        ("dwInterfaceType", ctypes.c_int),
        ("guid", GUID),
        ("PppInfo2", PPP_INFO_2),
    ]
#[repr(C)]
pub struct PPP_NBFCP_INFO {
    pub dwError: u32,
    pub wszWksta: [u16; 17],
}

#[repr(C)]
pub struct PPP_IPCP_INFO2 {
    pub dwError: u32,
    pub wszAddress: [u16; 16],
    pub wszRemoteAddress: [u16; 16],
    pub dwOptions: u32,
    pub dwRemoteOptions: u32,
}

#[repr(C)]
pub struct PPP_IPXCP_INFO {
    pub dwError: u32,
    pub wszAddress: [u16; 23],
}

#[repr(C)]
pub struct PPP_ATCP_INFO {
    pub dwError: u32,
    pub wszAddress: [u16; 33],
}

#[repr(C)]
pub struct PPP_CCP_INFO {
    pub dwError: u32,
    pub dwCompressionAlgorithm: u32,
    pub dwOptions: u32,
    pub dwRemoteCompressionAlgorithm: u32,
    pub dwRemoteOptions: u32,
}

#[repr(C)]
pub struct PPP_LCP_INFO {
    pub dwError: u32,
    pub dwAuthenticationProtocol: u32,
    pub dwAuthenticationData: u32,
    pub dwRemoteAuthenticationProtocol: u32,
    pub dwRemoteAuthenticationData: u32,
    pub dwTerminateReason: u32,
    pub dwRemoteTerminateReason: u32,
    pub dwOptions: u32,
    pub dwRemoteOptions: u32,
    pub dwEapTypeId: u32,
    pub dwRemoteEapTypeId: u32,
}

#[repr(C)]
pub struct PPP_INFO_2 {
    pub nbf: PPP_NBFCP_INFO,
    pub ip: PPP_IPCP_INFO2,
    pub ipx: PPP_IPXCP_INFO,
    pub at: PPP_ATCP_INFO,
    pub ccp: PPP_CCP_INFO,
    pub lcp: PPP_LCP_INFO,
}

#[repr(C)]
pub struct RAS_CONNECTION_2 {
    pub hConnection: *mut core::ffi::c_void,
    pub wszUserName: [u16; 257],
    pub dwInterfaceType: i32,
    pub guid: GUID,
    pub PppInfo2: PPP_INFO_2,
}
import "golang.org/x/sys/windows"

type PPP_NBFCP_INFO struct {
	dwError uint32
	wszWksta [17]uint16
}

type PPP_IPCP_INFO2 struct {
	dwError uint32
	wszAddress [16]uint16
	wszRemoteAddress [16]uint16
	dwOptions uint32
	dwRemoteOptions uint32
}

type PPP_IPXCP_INFO struct {
	dwError uint32
	wszAddress [23]uint16
}

type PPP_ATCP_INFO struct {
	dwError uint32
	wszAddress [33]uint16
}

type PPP_CCP_INFO struct {
	dwError uint32
	dwCompressionAlgorithm uint32
	dwOptions uint32
	dwRemoteCompressionAlgorithm uint32
	dwRemoteOptions uint32
}

type PPP_LCP_INFO struct {
	dwError uint32
	dwAuthenticationProtocol uint32
	dwAuthenticationData uint32
	dwRemoteAuthenticationProtocol uint32
	dwRemoteAuthenticationData uint32
	dwTerminateReason uint32
	dwRemoteTerminateReason uint32
	dwOptions uint32
	dwRemoteOptions uint32
	dwEapTypeId uint32
	dwRemoteEapTypeId uint32
}

type PPP_INFO_2 struct {
	nbf PPP_NBFCP_INFO
	ip PPP_IPCP_INFO2
	ipx PPP_IPXCP_INFO
	at PPP_ATCP_INFO
	ccp PPP_CCP_INFO
	lcp PPP_LCP_INFO
}

type RAS_CONNECTION_2 struct {
	hConnection uintptr
	wszUserName [257]uint16
	dwInterfaceType int32
	guid windows.GUID
	PppInfo2 PPP_INFO_2
}
type
  PPP_NBFCP_INFO = record
    dwError: DWORD;
    wszWksta: array[0..16] of WideChar;
  end;

  PPP_IPCP_INFO2 = record
    dwError: DWORD;
    wszAddress: array[0..15] of WideChar;
    wszRemoteAddress: array[0..15] of WideChar;
    dwOptions: DWORD;
    dwRemoteOptions: DWORD;
  end;

  PPP_IPXCP_INFO = record
    dwError: DWORD;
    wszAddress: array[0..22] of WideChar;
  end;

  PPP_ATCP_INFO = record
    dwError: DWORD;
    wszAddress: array[0..32] of WideChar;
  end;

  PPP_CCP_INFO = record
    dwError: DWORD;
    dwCompressionAlgorithm: DWORD;
    dwOptions: DWORD;
    dwRemoteCompressionAlgorithm: DWORD;
    dwRemoteOptions: DWORD;
  end;

  PPP_LCP_INFO = record
    dwError: DWORD;
    dwAuthenticationProtocol: DWORD;
    dwAuthenticationData: DWORD;
    dwRemoteAuthenticationProtocol: DWORD;
    dwRemoteAuthenticationData: DWORD;
    dwTerminateReason: DWORD;
    dwRemoteTerminateReason: DWORD;
    dwOptions: DWORD;
    dwRemoteOptions: DWORD;
    dwEapTypeId: DWORD;
    dwRemoteEapTypeId: DWORD;
  end;

  PPP_INFO_2 = record
    nbf: PPP_NBFCP_INFO;
    ip: PPP_IPCP_INFO2;
    ipx: PPP_IPXCP_INFO;
    at: PPP_ATCP_INFO;
    ccp: PPP_CCP_INFO;
    lcp: PPP_LCP_INFO;
  end;

  RAS_CONNECTION_2 = record
    hConnection: Pointer;
    wszUserName: array[0..256] of WideChar;
    dwInterfaceType: Integer;
    guid: TGUID;
    PppInfo2: PPP_INFO_2;
  end;
const PPP_NBFCP_INFO = extern struct {
    dwError: u32,
    wszWksta: [17]u16,
};

const PPP_IPCP_INFO2 = extern struct {
    dwError: u32,
    wszAddress: [16]u16,
    wszRemoteAddress: [16]u16,
    dwOptions: u32,
    dwRemoteOptions: u32,
};

const PPP_IPXCP_INFO = extern struct {
    dwError: u32,
    wszAddress: [23]u16,
};

const PPP_ATCP_INFO = extern struct {
    dwError: u32,
    wszAddress: [33]u16,
};

const PPP_CCP_INFO = extern struct {
    dwError: u32,
    dwCompressionAlgorithm: u32,
    dwOptions: u32,
    dwRemoteCompressionAlgorithm: u32,
    dwRemoteOptions: u32,
};

const PPP_LCP_INFO = extern struct {
    dwError: u32,
    dwAuthenticationProtocol: u32,
    dwAuthenticationData: u32,
    dwRemoteAuthenticationProtocol: u32,
    dwRemoteAuthenticationData: u32,
    dwTerminateReason: u32,
    dwRemoteTerminateReason: u32,
    dwOptions: u32,
    dwRemoteOptions: u32,
    dwEapTypeId: u32,
    dwRemoteEapTypeId: u32,
};

const PPP_INFO_2 = extern struct {
    nbf: PPP_NBFCP_INFO,
    ip: PPP_IPCP_INFO2,
    ipx: PPP_IPXCP_INFO,
    at: PPP_ATCP_INFO,
    ccp: PPP_CCP_INFO,
    lcp: PPP_LCP_INFO,
};

const RAS_CONNECTION_2 = extern struct {
    hConnection: ?*anyopaque,
    wszUserName: [257]u16,
    dwInterfaceType: i32,
    guid: GUID,
    PppInfo2: PPP_INFO_2,
};
type
  PPP_NBFCP_INFO {.bycopy.} = object
    dwError: uint32
    wszWksta: array[17, uint16]

  PPP_IPCP_INFO2 {.bycopy.} = object
    dwError: uint32
    wszAddress: array[16, uint16]
    wszRemoteAddress: array[16, uint16]
    dwOptions: uint32
    dwRemoteOptions: uint32

  PPP_IPXCP_INFO {.bycopy.} = object
    dwError: uint32
    wszAddress: array[23, uint16]

  PPP_ATCP_INFO {.bycopy.} = object
    dwError: uint32
    wszAddress: array[33, uint16]

  PPP_CCP_INFO {.bycopy.} = object
    dwError: uint32
    dwCompressionAlgorithm: uint32
    dwOptions: uint32
    dwRemoteCompressionAlgorithm: uint32
    dwRemoteOptions: uint32

  PPP_LCP_INFO {.bycopy.} = object
    dwError: uint32
    dwAuthenticationProtocol: uint32
    dwAuthenticationData: uint32
    dwRemoteAuthenticationProtocol: uint32
    dwRemoteAuthenticationData: uint32
    dwTerminateReason: uint32
    dwRemoteTerminateReason: uint32
    dwOptions: uint32
    dwRemoteOptions: uint32
    dwEapTypeId: uint32
    dwRemoteEapTypeId: uint32

  PPP_INFO_2 {.bycopy.} = object
    nbf: PPP_NBFCP_INFO
    ip: PPP_IPCP_INFO2
    ipx: PPP_IPXCP_INFO
    at: PPP_ATCP_INFO
    ccp: PPP_CCP_INFO
    lcp: PPP_LCP_INFO

  RAS_CONNECTION_2 {.bycopy.} = object
    hConnection: pointer
    wszUserName: array[257, uint16]
    dwInterfaceType: int32
    guid: GUID
    PppInfo2: PPP_INFO_2
struct PPP_NBFCP_INFO
{
    uint dwError;
    wchar[17] wszWksta;
}

struct PPP_IPCP_INFO2
{
    uint dwError;
    wchar[16] wszAddress;
    wchar[16] wszRemoteAddress;
    uint dwOptions;
    uint dwRemoteOptions;
}

struct PPP_IPXCP_INFO
{
    uint dwError;
    wchar[23] wszAddress;
}

struct PPP_ATCP_INFO
{
    uint dwError;
    wchar[33] wszAddress;
}

struct PPP_CCP_INFO
{
    uint dwError;
    uint dwCompressionAlgorithm;
    uint dwOptions;
    uint dwRemoteCompressionAlgorithm;
    uint dwRemoteOptions;
}

struct PPP_LCP_INFO
{
    uint dwError;
    uint dwAuthenticationProtocol;
    uint dwAuthenticationData;
    uint dwRemoteAuthenticationProtocol;
    uint dwRemoteAuthenticationData;
    uint dwTerminateReason;
    uint dwRemoteTerminateReason;
    uint dwOptions;
    uint dwRemoteOptions;
    uint dwEapTypeId;
    uint dwRemoteEapTypeId;
}

struct PPP_INFO_2
{
    PPP_NBFCP_INFO nbf;
    PPP_IPCP_INFO2 ip;
    PPP_IPXCP_INFO ipx;
    PPP_ATCP_INFO at;
    PPP_CCP_INFO ccp;
    PPP_LCP_INFO lcp;
}

struct RAS_CONNECTION_2
{
    void* hConnection;
    wchar[257] wszUserName;
    int dwInterfaceType;
    GUID guid;
    PPP_INFO_2 PppInfo2;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; RAS_CONNECTION_2 サイズ: 844 バイト(x86)
dim st, 211    ; 4byte整数×211(構造体サイズ 844 / 4 切り上げ)
; hConnection : HANDLE (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; wszUserName : WCHAR (+4, 514byte)  varptr(st)+4 を基点に操作(514byte:入れ子/配列)
; dwInterfaceType : ROUTER_INTERFACE_TYPE (+520, 4byte)  st.130 = 値  /  値 = st.130   (lpoke/lpeek も可)
; guid : GUID (+524, 16byte)  varptr(st)+524 を基点に操作(16byte:入れ子/配列)
; PppInfo2 : PPP_INFO_2 (+540, 304byte)  varptr(st)+540 を基点に操作(304byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; RAS_CONNECTION_2 サイズ: 848 バイト(x64)
dim st, 212    ; 4byte整数×212(構造体サイズ 848 / 4 切り上げ)
; hConnection : HANDLE (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; wszUserName : WCHAR (+8, 514byte)  varptr(st)+8 を基点に操作(514byte:入れ子/配列)
; dwInterfaceType : ROUTER_INTERFACE_TYPE (+524, 4byte)  st.131 = 値  /  値 = st.131   (lpoke/lpeek も可)
; guid : GUID (+528, 16byte)  varptr(st)+528 を基点に操作(16byte:入れ子/配列)
; PppInfo2 : PPP_INFO_2 (+544, 304byte)  varptr(st)+544 を基点に操作(304byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
    #field int Data1
    #field short Data2
    #field short Data3
    #field byte Data4 8
#endstruct

#defstruct global PPP_NBFCP_INFO
    #field int dwError
    #field wchar wszWksta 17
#endstruct

#defstruct global PPP_IPCP_INFO2
    #field int dwError
    #field wchar wszAddress 16
    #field wchar wszRemoteAddress 16
    #field int dwOptions
    #field int dwRemoteOptions
#endstruct

#defstruct global PPP_IPXCP_INFO
    #field int dwError
    #field wchar wszAddress 23
#endstruct

#defstruct global PPP_ATCP_INFO
    #field int dwError
    #field wchar wszAddress 33
#endstruct

#defstruct global PPP_CCP_INFO
    #field int dwError
    #field int dwCompressionAlgorithm
    #field int dwOptions
    #field int dwRemoteCompressionAlgorithm
    #field int dwRemoteOptions
#endstruct

#defstruct global PPP_LCP_INFO
    #field int dwError
    #field int dwAuthenticationProtocol
    #field int dwAuthenticationData
    #field int dwRemoteAuthenticationProtocol
    #field int dwRemoteAuthenticationData
    #field int dwTerminateReason
    #field int dwRemoteTerminateReason
    #field int dwOptions
    #field int dwRemoteOptions
    #field int dwEapTypeId
    #field int dwRemoteEapTypeId
#endstruct

#defstruct global PPP_INFO_2
    #field PPP_NBFCP_INFO nbf
    #field PPP_IPCP_INFO2 ip
    #field PPP_IPXCP_INFO ipx
    #field PPP_ATCP_INFO at
    #field PPP_CCP_INFO ccp
    #field PPP_LCP_INFO lcp
#endstruct

#defstruct global RAS_CONNECTION_2
    #field intptr hConnection
    #field wchar wszUserName 257
    #field int dwInterfaceType
    #field GUID guid
    #field PPP_INFO_2 PppInfo2
#endstruct

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