ホーム › Security.ExtensibleAuthenticationProtocol › PPP_EAP_OUTPUT
PPP_EAP_OUTPUT
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwSizeInBytes | DWORD | 4 | +0 | +0 | この構造体のバイト数。 |
| Action | PPP_EAP_ACTION | 4 | +4 | +4 | EAPエンジンが次に取るべきアクションを示す列挙値。 |
| dwAuthResultCode | DWORD | 4 | +8 | +8 | 認証結果コード。Win32エラーコードで表す。 |
| pUserAttributes | RAS_AUTH_ATTRIBUTE* | 8/4 | +16 | +12 | 応答に含めるRAS認証属性配列へのポインタ。 |
| fInvokeInteractiveUI | BOOL | 4 | +24 | +16 | 対話型UIを呼び出す必要があるかを示す真偽値。 |
| pUIContextData | BYTE* | 8/4 | +32 | +20 | 対話型UIへ渡すコンテキストデータへのポインタ。 |
| dwSizeOfUIContextData | DWORD | 4 | +40 | +24 | pUIContextDataのバイト数。 |
| fSaveConnectionData | BOOL | 4 | +44 | +28 | 接続データを保存すべきかを示す真偽値。 |
| pConnectionData | BYTE* | 8/4 | +48 | +32 | 保存対象の接続構成データへのポインタ。 |
| dwSizeOfConnectionData | DWORD | 4 | +56 | +36 | pConnectionDataのバイト数。 |
| fSaveUserData | BOOL | 4 | +60 | +40 | ユーザーデータを保存すべきかを示す真偽値。 |
| pUserData | BYTE* | 8/4 | +64 | +44 | 保存対象のユーザー構成データへのポインタ。 |
| dwSizeOfUserData | DWORD | 4 | +72 | +48 | pUserDataのバイト数。 |
| pNgcKerbTicket | NgcTicketContext* | 8/4 | +80 | +52 | 発行されたNGC Kerberosチケットコンテキストへのポインタ。NULL可。 |
| fSaveToCredMan | BOOL | 4 | +88 | +56 | 資格情報を資格情報マネージャに保存するかを示す真偽値。 |
各言語での定義
#include <windows.h>
// PPP_EAP_OUTPUT (x64 96 / x86 60 バイト)
typedef struct PPP_EAP_OUTPUT {
DWORD dwSizeInBytes;
PPP_EAP_ACTION Action;
DWORD dwAuthResultCode;
RAS_AUTH_ATTRIBUTE* pUserAttributes;
BOOL fInvokeInteractiveUI;
BYTE* pUIContextData;
DWORD dwSizeOfUIContextData;
BOOL fSaveConnectionData;
BYTE* pConnectionData;
DWORD dwSizeOfConnectionData;
BOOL fSaveUserData;
BYTE* pUserData;
DWORD dwSizeOfUserData;
NgcTicketContext* pNgcKerbTicket;
BOOL fSaveToCredMan;
} PPP_EAP_OUTPUT;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PPP_EAP_OUTPUT
{
public uint dwSizeInBytes;
public int Action;
public uint dwAuthResultCode;
public IntPtr pUserAttributes;
[MarshalAs(UnmanagedType.Bool)] public bool fInvokeInteractiveUI;
public IntPtr pUIContextData;
public uint dwSizeOfUIContextData;
[MarshalAs(UnmanagedType.Bool)] public bool fSaveConnectionData;
public IntPtr pConnectionData;
public uint dwSizeOfConnectionData;
[MarshalAs(UnmanagedType.Bool)] public bool fSaveUserData;
public IntPtr pUserData;
public uint dwSizeOfUserData;
public IntPtr pNgcKerbTicket;
[MarshalAs(UnmanagedType.Bool)] public bool fSaveToCredMan;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PPP_EAP_OUTPUT
Public dwSizeInBytes As UInteger
Public Action As Integer
Public dwAuthResultCode As UInteger
Public pUserAttributes As IntPtr
<MarshalAs(UnmanagedType.Bool)> Public fInvokeInteractiveUI As Boolean
Public pUIContextData As IntPtr
Public dwSizeOfUIContextData As UInteger
<MarshalAs(UnmanagedType.Bool)> Public fSaveConnectionData As Boolean
Public pConnectionData As IntPtr
Public dwSizeOfConnectionData As UInteger
<MarshalAs(UnmanagedType.Bool)> Public fSaveUserData As Boolean
Public pUserData As IntPtr
Public dwSizeOfUserData As UInteger
Public pNgcKerbTicket As IntPtr
<MarshalAs(UnmanagedType.Bool)> Public fSaveToCredMan As Boolean
End Structureimport ctypes
from ctypes import wintypes
class PPP_EAP_OUTPUT(ctypes.Structure):
_fields_ = [
("dwSizeInBytes", wintypes.DWORD),
("Action", ctypes.c_int),
("dwAuthResultCode", wintypes.DWORD),
("pUserAttributes", ctypes.c_void_p),
("fInvokeInteractiveUI", wintypes.BOOL),
("pUIContextData", ctypes.c_void_p),
("dwSizeOfUIContextData", wintypes.DWORD),
("fSaveConnectionData", wintypes.BOOL),
("pConnectionData", ctypes.c_void_p),
("dwSizeOfConnectionData", wintypes.DWORD),
("fSaveUserData", wintypes.BOOL),
("pUserData", ctypes.c_void_p),
("dwSizeOfUserData", wintypes.DWORD),
("pNgcKerbTicket", ctypes.c_void_p),
("fSaveToCredMan", wintypes.BOOL),
]#[repr(C)]
pub struct PPP_EAP_OUTPUT {
pub dwSizeInBytes: u32,
pub Action: i32,
pub dwAuthResultCode: u32,
pub pUserAttributes: *mut core::ffi::c_void,
pub fInvokeInteractiveUI: i32,
pub pUIContextData: *mut core::ffi::c_void,
pub dwSizeOfUIContextData: u32,
pub fSaveConnectionData: i32,
pub pConnectionData: *mut core::ffi::c_void,
pub dwSizeOfConnectionData: u32,
pub fSaveUserData: i32,
pub pUserData: *mut core::ffi::c_void,
pub dwSizeOfUserData: u32,
pub pNgcKerbTicket: *mut core::ffi::c_void,
pub fSaveToCredMan: i32,
}import "golang.org/x/sys/windows"
type PPP_EAP_OUTPUT struct {
dwSizeInBytes uint32
Action int32
dwAuthResultCode uint32
pUserAttributes uintptr
fInvokeInteractiveUI int32
pUIContextData uintptr
dwSizeOfUIContextData uint32
fSaveConnectionData int32
pConnectionData uintptr
dwSizeOfConnectionData uint32
fSaveUserData int32
pUserData uintptr
dwSizeOfUserData uint32
pNgcKerbTicket uintptr
fSaveToCredMan int32
}type
PPP_EAP_OUTPUT = record
dwSizeInBytes: DWORD;
Action: Integer;
dwAuthResultCode: DWORD;
pUserAttributes: Pointer;
fInvokeInteractiveUI: BOOL;
pUIContextData: Pointer;
dwSizeOfUIContextData: DWORD;
fSaveConnectionData: BOOL;
pConnectionData: Pointer;
dwSizeOfConnectionData: DWORD;
fSaveUserData: BOOL;
pUserData: Pointer;
dwSizeOfUserData: DWORD;
pNgcKerbTicket: Pointer;
fSaveToCredMan: BOOL;
end;const PPP_EAP_OUTPUT = extern struct {
dwSizeInBytes: u32,
Action: i32,
dwAuthResultCode: u32,
pUserAttributes: ?*anyopaque,
fInvokeInteractiveUI: i32,
pUIContextData: ?*anyopaque,
dwSizeOfUIContextData: u32,
fSaveConnectionData: i32,
pConnectionData: ?*anyopaque,
dwSizeOfConnectionData: u32,
fSaveUserData: i32,
pUserData: ?*anyopaque,
dwSizeOfUserData: u32,
pNgcKerbTicket: ?*anyopaque,
fSaveToCredMan: i32,
};type
PPP_EAP_OUTPUT {.bycopy.} = object
dwSizeInBytes: uint32
Action: int32
dwAuthResultCode: uint32
pUserAttributes: pointer
fInvokeInteractiveUI: int32
pUIContextData: pointer
dwSizeOfUIContextData: uint32
fSaveConnectionData: int32
pConnectionData: pointer
dwSizeOfConnectionData: uint32
fSaveUserData: int32
pUserData: pointer
dwSizeOfUserData: uint32
pNgcKerbTicket: pointer
fSaveToCredMan: int32struct PPP_EAP_OUTPUT
{
uint dwSizeInBytes;
int Action;
uint dwAuthResultCode;
void* pUserAttributes;
int fInvokeInteractiveUI;
void* pUIContextData;
uint dwSizeOfUIContextData;
int fSaveConnectionData;
void* pConnectionData;
uint dwSizeOfConnectionData;
int fSaveUserData;
void* pUserData;
uint dwSizeOfUserData;
void* pNgcKerbTicket;
int fSaveToCredMan;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; PPP_EAP_OUTPUT サイズ: 60 バイト(x86)
dim st, 15 ; 4byte整数×15(構造体サイズ 60 / 4 切り上げ)
; dwSizeInBytes : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; Action : PPP_EAP_ACTION (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dwAuthResultCode : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; pUserAttributes : RAS_AUTH_ATTRIBUTE* (+12, 4byte) varptr(st)+12 を基点に操作(4byte:入れ子/配列)
; fInvokeInteractiveUI : BOOL (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; pUIContextData : BYTE* (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; dwSizeOfUIContextData : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; fSaveConnectionData : BOOL (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; pConnectionData : BYTE* (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; dwSizeOfConnectionData : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; fSaveUserData : BOOL (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; pUserData : BYTE* (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; dwSizeOfUserData : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; pNgcKerbTicket : NgcTicketContext* (+52, 4byte) varptr(st)+52 を基点に操作(4byte:入れ子/配列)
; fSaveToCredMan : BOOL (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; PPP_EAP_OUTPUT サイズ: 96 バイト(x64)
dim st, 24 ; 4byte整数×24(構造体サイズ 96 / 4 切り上げ)
; dwSizeInBytes : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; Action : PPP_EAP_ACTION (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dwAuthResultCode : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; pUserAttributes : RAS_AUTH_ATTRIBUTE* (+16, 8byte) varptr(st)+16 を基点に操作(8byte:入れ子/配列)
; fInvokeInteractiveUI : BOOL (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; pUIContextData : BYTE* (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; dwSizeOfUIContextData : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; fSaveConnectionData : BOOL (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; pConnectionData : BYTE* (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; dwSizeOfConnectionData : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; fSaveUserData : BOOL (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; pUserData : BYTE* (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; dwSizeOfUserData : DWORD (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; pNgcKerbTicket : NgcTicketContext* (+80, 8byte) varptr(st)+80 を基点に操作(8byte:入れ子/配列)
; fSaveToCredMan : BOOL (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global PPP_EAP_OUTPUT
#field int dwSizeInBytes
#field int Action
#field int dwAuthResultCode
#field intptr pUserAttributes
#field bool fInvokeInteractiveUI
#field intptr pUIContextData
#field int dwSizeOfUIContextData
#field bool fSaveConnectionData
#field intptr pConnectionData
#field int dwSizeOfConnectionData
#field bool fSaveUserData
#field intptr pUserData
#field int dwSizeOfUserData
#field intptr pNgcKerbTicket
#field bool fSaveToCredMan
#endstruct
stdim st, PPP_EAP_OUTPUT ; NSTRUCT 変数を確保
st->dwSizeInBytes = 100
mes "dwSizeInBytes=" + st->dwSizeInBytes