PPP_EAP_INFO
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwSizeInBytes | DWORD | 4 | +0 | +0 | PPP_EAP_INFO 構造体のサイズを指定します。RAS はこの値を EAP DLL に渡します。DLL はこの値を使用して、RAS が使用している PPP_EAP_INFO 構造体のバージョンを判断します。 |
| dwEapTypeId | DWORD | 4 | +4 | +4 | 特定の認証プロトコルを指定します。この識別子は、業界全体の EAP 実装を通じて一意でなければなりません。認証プロトコルの実装者は、この識別子を Internet Assigned Numbers Authority (IANA) から取得する必要があります。 |
| RasEapInitialize | INT_PTR | 8/4 | +8 | +8 | 認証プロトコルの RasEapInitialize 関数へのポインターです。このメンバーの値は認証プロトコルが設定します。認証プロトコルはこのメンバーを NULL に設定することもできます。その場合、プロトコルは RAS がこの関数を呼び出すことを必要としません。 fInitialize認証プロトコルを初期化するか、初期化を解除するかを指定します。プロトコルを初期化する場合、このパラメーターは TRUE であり、初期化しない場合は FALSE です。 |
| RasEapBegin | INT_PTR | 8/4 | +16 | +12 | 要求された認証プロトコルの RasEapBegin 関数へのポインターです。このメンバーの値は認証プロトコルが設定します。このメンバーは NULL でもかまいません。その場合、認証プロトコルは初期化を必要としません。このメンバーが NULL の場合、RAS は RasEapEnd メンバーを無視します。 ppWorkBuffer正常に復帰したときに作業バッファーを指すポインターへのポインターです。このバッファーは RAS にとって不透明であり、バッファーの内容は認証プロトコルのみが使用します。RAS 接続マネージャーは、以降の RasEapMakeMessage の呼び出しで、このバッファーへのポインターを認証プロトコルに渡します。 pPppEapInput認証セッションの初期化情報を指定する PPP_EAP_INPUT 構造体へのポインターです。 |
| RasEapEnd | INT_PTR | 8/4 | +24 | +16 | 認証プロトコルの RasEapEnd 関数へのポインターです。このメンバーの値は認証プロトコルが設定します。 pWorkBuffer解放する作業バッファーへのポインターです。 |
| RasEapMakeMessage | INT_PTR | 8/4 | +32 | +20 | 要求された認証プロトコルの RasEapMakeMessage 関数へのポインターです。このメンバーの値は認証プロトコルが設定します。 pWorkBuf作業バッファーへのポインターです。認証プロトコルは、 RasEapBegin 関数を通じて、このバッファーへのポインターを RAS に提供します。 pReceivePacket受信したパケットを格納する PPP_EAP_PACKET 構造体へのポインターです。pReceivePacket の値が NULL の場合は、RAS が認証プロトコルとのやり取りを開始しようとしているか、またはタイムアウトが発生したため認証プロトコルが最後のパケットを再送信する必要があることを示します。認証プロトコルは、コンテキストに基づいてこの 2 つのどちらであるかを判断する必要があります。 pSendPacketPPP_EAP_PACKET 構造体へのポインターです。認証プロトコルは、この構造体を使用して送信するパケットを指定できます。 cbSendPacketpSendPacket が指すバッファーのサイズをバイト単位で指定します。 pEapOutputPPP_EAP_OUTPUT 構造体へのポインターです。 pEapInputPPP_EAP_INPUT 構造体へのポインターです。このパラメーターは NULL でもかまいません。 |
公式ドキュメント
PPP_EAP_INFO 構造体は、EAP DLL 内にある関数へのポインターを含め、認証プロトコルに関する情報を接続マネージャーに提供します。
解説(Remarks)
1 つの EAP DLL が複数の認証プロトコルを実装する場合があります。どのプロトコルの情報を取得するかを指定するには、dwEapTypeId メンバーを使用します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// PPP_EAP_INFO (x64 40 / x86 24 バイト)
typedef struct PPP_EAP_INFO {
DWORD dwSizeInBytes;
DWORD dwEapTypeId;
INT_PTR RasEapInitialize;
INT_PTR RasEapBegin;
INT_PTR RasEapEnd;
INT_PTR RasEapMakeMessage;
} PPP_EAP_INFO;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PPP_EAP_INFO
{
public uint dwSizeInBytes;
public uint dwEapTypeId;
public IntPtr RasEapInitialize;
public IntPtr RasEapBegin;
public IntPtr RasEapEnd;
public IntPtr RasEapMakeMessage;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PPP_EAP_INFO
Public dwSizeInBytes As UInteger
Public dwEapTypeId As UInteger
Public RasEapInitialize As IntPtr
Public RasEapBegin As IntPtr
Public RasEapEnd As IntPtr
Public RasEapMakeMessage As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class PPP_EAP_INFO(ctypes.Structure):
_fields_ = [
("dwSizeInBytes", wintypes.DWORD),
("dwEapTypeId", wintypes.DWORD),
("RasEapInitialize", ctypes.c_ssize_t),
("RasEapBegin", ctypes.c_ssize_t),
("RasEapEnd", ctypes.c_ssize_t),
("RasEapMakeMessage", ctypes.c_ssize_t),
]#[repr(C)]
pub struct PPP_EAP_INFO {
pub dwSizeInBytes: u32,
pub dwEapTypeId: u32,
pub RasEapInitialize: isize,
pub RasEapBegin: isize,
pub RasEapEnd: isize,
pub RasEapMakeMessage: isize,
}import "golang.org/x/sys/windows"
type PPP_EAP_INFO struct {
dwSizeInBytes uint32
dwEapTypeId uint32
RasEapInitialize uintptr
RasEapBegin uintptr
RasEapEnd uintptr
RasEapMakeMessage uintptr
}type
PPP_EAP_INFO = record
dwSizeInBytes: DWORD;
dwEapTypeId: DWORD;
RasEapInitialize: NativeInt;
RasEapBegin: NativeInt;
RasEapEnd: NativeInt;
RasEapMakeMessage: NativeInt;
end;const PPP_EAP_INFO = extern struct {
dwSizeInBytes: u32,
dwEapTypeId: u32,
RasEapInitialize: isize,
RasEapBegin: isize,
RasEapEnd: isize,
RasEapMakeMessage: isize,
};type
PPP_EAP_INFO {.bycopy.} = object
dwSizeInBytes: uint32
dwEapTypeId: uint32
RasEapInitialize: int
RasEapBegin: int
RasEapEnd: int
RasEapMakeMessage: intstruct PPP_EAP_INFO
{
uint dwSizeInBytes;
uint dwEapTypeId;
ptrdiff_t RasEapInitialize;
ptrdiff_t RasEapBegin;
ptrdiff_t RasEapEnd;
ptrdiff_t RasEapMakeMessage;
}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_INFO サイズ: 24 バイト(x86)
dim st, 6 ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; dwSizeInBytes : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwEapTypeId : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; RasEapInitialize : INT_PTR (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; RasEapBegin : INT_PTR (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; RasEapEnd : INT_PTR (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; RasEapMakeMessage : INT_PTR (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; PPP_EAP_INFO サイズ: 40 バイト(x64)
dim st, 10 ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; dwSizeInBytes : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwEapTypeId : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; RasEapInitialize : INT_PTR (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; RasEapBegin : INT_PTR (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; RasEapEnd : INT_PTR (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; RasEapMakeMessage : INT_PTR (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global PPP_EAP_INFO
#field int dwSizeInBytes
#field int dwEapTypeId
#field intptr RasEapInitialize
#field intptr RasEapBegin
#field intptr RasEapEnd
#field intptr RasEapMakeMessage
#endstruct
stdim st, PPP_EAP_INFO ; NSTRUCT 変数を確保
st->dwSizeInBytes = 100
mes "dwSizeInBytes=" + st->dwSizeInBytes