ホーム › NetworkManagement.Rras › RASDIALEXTENSIONS
RASDIALEXTENSIONS
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwSize | DWORD | 4 | +0 | +0 | この構造体のバイト単位のサイズ。呼び出し前にsizeofを設定する。 |
| dwfOptions | DWORD | 4 | +4 | +4 | RasDialの動作を制御するRDEOPT_*フラグの組み合わせ。 |
| hwndParent | HWND | 8/4 | +8 | +8 | 認証ダイアログ等の親となるウィンドウのハンドル。NULL可。 |
| reserved | UINT_PTR | 8/4 | +16 | +12 | 予約済み。0を設定する必要がある。 |
| reserved1 | UINT_PTR | 8/4 | +24 | +16 | 予約済み。0を設定する必要がある。 |
| RasEapInfo | RASEAPINFO | 12/8 | +32 | +20 | EAP認証に渡す識別情報を保持するRASEAPINFO構造体。 |
| fSkipPppAuth | BOOL | 4 | +44 | +28 | TRUEならPPP認証フェーズをスキップする。 |
| RasDevSpecificInfo | RASDEVSPECIFICINFO | 12/8 | +48 | +32 | デバイス固有情報を保持するRASDEVSPECIFICINFO構造体。 |
各言語での定義
#include <windows.h>
// RASEAPINFO (x64 12 / x86 8 バイト)
#pragma pack(push, 4)
typedef struct RASEAPINFO {
DWORD dwSizeofEapInfo;
BYTE* pbEapInfo;
} RASEAPINFO;
#pragma pack(pop)
// RASDEVSPECIFICINFO (x64 12 / x86 8 バイト)
#pragma pack(push, 4)
typedef struct RASDEVSPECIFICINFO {
DWORD dwSize;
BYTE* pbDevSpecificInfo;
} RASDEVSPECIFICINFO;
#pragma pack(pop)
// RASDIALEXTENSIONS (x64 60 / x86 40 バイト)
#pragma pack(push, 4)
typedef struct RASDIALEXTENSIONS {
DWORD dwSize;
DWORD dwfOptions;
HWND hwndParent;
UINT_PTR reserved;
UINT_PTR reserved1;
RASEAPINFO RasEapInfo;
BOOL fSkipPppAuth;
RASDEVSPECIFICINFO RasDevSpecificInfo;
} RASDIALEXTENSIONS;
#pragma pack(pop)using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]
public struct RASEAPINFO
{
public uint dwSizeofEapInfo;
public IntPtr pbEapInfo;
}
[StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]
public struct RASDEVSPECIFICINFO
{
public uint dwSize;
public IntPtr pbDevSpecificInfo;
}
[StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]
public struct RASDIALEXTENSIONS
{
public uint dwSize;
public uint dwfOptions;
public IntPtr hwndParent;
public UIntPtr reserved;
public UIntPtr reserved1;
public RASEAPINFO RasEapInfo;
[MarshalAs(UnmanagedType.Bool)] public bool fSkipPppAuth;
public RASDEVSPECIFICINFO RasDevSpecificInfo;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, Pack:=4, CharSet:=CharSet.Unicode)>
Public Structure RASEAPINFO
Public dwSizeofEapInfo As UInteger
Public pbEapInfo As IntPtr
End Structure
<StructLayout(LayoutKind.Sequential, Pack:=4, CharSet:=CharSet.Unicode)>
Public Structure RASDEVSPECIFICINFO
Public dwSize As UInteger
Public pbDevSpecificInfo As IntPtr
End Structure
<StructLayout(LayoutKind.Sequential, Pack:=4, CharSet:=CharSet.Unicode)>
Public Structure RASDIALEXTENSIONS
Public dwSize As UInteger
Public dwfOptions As UInteger
Public hwndParent As IntPtr
Public reserved As UIntPtr
Public reserved1 As UIntPtr
Public RasEapInfo As RASEAPINFO
<MarshalAs(UnmanagedType.Bool)> Public fSkipPppAuth As Boolean
Public RasDevSpecificInfo As RASDEVSPECIFICINFO
End Structureimport ctypes
from ctypes import wintypes
class RASEAPINFO(ctypes.Structure):
_pack_ = 4
_fields_ = [
("dwSizeofEapInfo", wintypes.DWORD),
("pbEapInfo", ctypes.c_void_p),
]
class RASDEVSPECIFICINFO(ctypes.Structure):
_pack_ = 4
_fields_ = [
("dwSize", wintypes.DWORD),
("pbDevSpecificInfo", ctypes.c_void_p),
]
class RASDIALEXTENSIONS(ctypes.Structure):
_pack_ = 4
_fields_ = [
("dwSize", wintypes.DWORD),
("dwfOptions", wintypes.DWORD),
("hwndParent", ctypes.c_void_p),
("reserved", ctypes.c_size_t),
("reserved1", ctypes.c_size_t),
("RasEapInfo", RASEAPINFO),
("fSkipPppAuth", wintypes.BOOL),
("RasDevSpecificInfo", RASDEVSPECIFICINFO),
]#[repr(C, packed(4))]
pub struct RASEAPINFO {
pub dwSizeofEapInfo: u32,
pub pbEapInfo: *mut core::ffi::c_void,
}
#[repr(C, packed(4))]
pub struct RASDEVSPECIFICINFO {
pub dwSize: u32,
pub pbDevSpecificInfo: *mut core::ffi::c_void,
}
#[repr(C, packed(4))]
pub struct RASDIALEXTENSIONS {
pub dwSize: u32,
pub dwfOptions: u32,
pub hwndParent: *mut core::ffi::c_void,
pub reserved: usize,
pub reserved1: usize,
pub RasEapInfo: RASEAPINFO,
pub fSkipPppAuth: i32,
pub RasDevSpecificInfo: RASDEVSPECIFICINFO,
}import "golang.org/x/sys/windows"
type RASEAPINFO struct {
dwSizeofEapInfo uint32
pbEapInfo uintptr
}
type RASDEVSPECIFICINFO struct {
dwSize uint32
pbDevSpecificInfo uintptr
}
type RASDIALEXTENSIONS struct {
dwSize uint32
dwfOptions uint32
hwndParent uintptr
reserved uintptr
reserved1 uintptr
RasEapInfo RASEAPINFO
fSkipPppAuth int32
RasDevSpecificInfo RASDEVSPECIFICINFO
}type
RASEAPINFO = packed record
dwSizeofEapInfo: DWORD;
pbEapInfo: Pointer;
end;
RASDEVSPECIFICINFO = packed record
dwSize: DWORD;
pbDevSpecificInfo: Pointer;
end;
RASDIALEXTENSIONS = packed record
dwSize: DWORD;
dwfOptions: DWORD;
hwndParent: Pointer;
reserved: NativeUInt;
reserved1: NativeUInt;
RasEapInfo: RASEAPINFO;
fSkipPppAuth: BOOL;
RasDevSpecificInfo: RASDEVSPECIFICINFO;
end;const RASEAPINFO = extern struct {
dwSizeofEapInfo: u32,
pbEapInfo: ?*anyopaque,
};
const RASDEVSPECIFICINFO = extern struct {
dwSize: u32,
pbDevSpecificInfo: ?*anyopaque,
};
const RASDIALEXTENSIONS = extern struct {
dwSize: u32,
dwfOptions: u32,
hwndParent: ?*anyopaque,
reserved: usize,
reserved1: usize,
RasEapInfo: RASEAPINFO,
fSkipPppAuth: i32,
RasDevSpecificInfo: RASDEVSPECIFICINFO,
};type
RASEAPINFO {.packed.} = object
dwSizeofEapInfo: uint32
pbEapInfo: pointer
RASDEVSPECIFICINFO {.packed.} = object
dwSize: uint32
pbDevSpecificInfo: pointer
RASDIALEXTENSIONS {.packed.} = object
dwSize: uint32
dwfOptions: uint32
hwndParent: pointer
reserved: uint
reserved1: uint
RasEapInfo: RASEAPINFO
fSkipPppAuth: int32
RasDevSpecificInfo: RASDEVSPECIFICINFOalign(4)
struct RASEAPINFO
{
uint dwSizeofEapInfo;
void* pbEapInfo;
}
align(4)
struct RASDEVSPECIFICINFO
{
uint dwSize;
void* pbDevSpecificInfo;
}
align(4)
struct RASDIALEXTENSIONS
{
uint dwSize;
uint dwfOptions;
void* hwndParent;
size_t reserved;
size_t reserved1;
RASEAPINFO RasEapInfo;
int fSkipPppAuth;
RASDEVSPECIFICINFO RasDevSpecificInfo;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; RASDIALEXTENSIONS サイズ: 40 バイト(x86)
dim st, 10 ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwfOptions : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; hwndParent : HWND (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; reserved : UINT_PTR (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; reserved1 : UINT_PTR (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; RasEapInfo : RASEAPINFO (+20, 8byte) varptr(st)+20 を基点に操作(8byte:入れ子/配列)
; fSkipPppAuth : BOOL (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; RasDevSpecificInfo : RASDEVSPECIFICINFO (+32, 8byte) varptr(st)+32 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; RASDIALEXTENSIONS サイズ: 60 バイト(x64)
dim st, 15 ; 4byte整数×15(構造体サイズ 60 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwfOptions : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; hwndParent : HWND (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; reserved : UINT_PTR (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; reserved1 : UINT_PTR (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; RasEapInfo : RASEAPINFO (+32, 12byte) varptr(st)+32 を基点に操作(12byte:入れ子/配列)
; fSkipPppAuth : BOOL (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; RasDevSpecificInfo : RASDEVSPECIFICINFO (+48, 12byte) varptr(st)+48 を基点に操作(12byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global RASEAPINFO, pack=4
#field int dwSizeofEapInfo
#field intptr pbEapInfo
#endstruct
#defstruct global RASDEVSPECIFICINFO, pack=4
#field int dwSize
#field intptr pbDevSpecificInfo
#endstruct
#defstruct global RASDIALEXTENSIONS, pack=4
#field int dwSize
#field int dwfOptions
#field intptr hwndParent
#field intptr reserved
#field intptr reserved1
#field RASEAPINFO RasEapInfo
#field bool fSkipPppAuth
#field RASDEVSPECIFICINFO RasDevSpecificInfo
#endstruct
stdim st, RASDIALEXTENSIONS ; NSTRUCT 変数を確保
st->dwSize = 100
mes "dwSize=" + st->dwSize