Win32 API 日本語リファレンス
ホームSecurity.ExtensibleAuthenticationProtocol › PPP_EAP_INFO

PPP_EAP_INFO

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

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

フィールド

フィールドサイズx64x86説明
dwSizeInBytesDWORD4+0+0PPP_EAP_INFO 構造体のサイズを指定します。RAS はこの値を EAP DLL に渡します。DLL はこの値を使用して、RAS が使用している PPP_EAP_INFO 構造体のバージョンを判断します。
dwEapTypeIdDWORD4+4+4特定の認証プロトコルを指定します。この識別子は、業界全体の EAP 実装を通じて一意でなければなりません。認証プロトコルの実装者は、この識別子を Internet Assigned Numbers Authority (IANA) から取得する必要があります。
RasEapInitializeINT_PTR8/4+8+8

認証プロトコルの RasEapInitialize 関数へのポインターです。このメンバーの値は認証プロトコルが設定します。認証プロトコルはこのメンバーを NULL に設定することもできます。その場合、プロトコルは RAS がこの関数を呼び出すことを必要としません。

fInitialize

認証プロトコルを初期化するか、初期化を解除するかを指定します。プロトコルを初期化する場合、このパラメーターは TRUE であり、初期化しない場合は FALSE です。

RasEapBeginINT_PTR8/4+16+12

要求された認証プロトコルの RasEapBegin 関数へのポインターです。このメンバーの値は認証プロトコルが設定します。このメンバーは NULL でもかまいません。その場合、認証プロトコルは初期化を必要としません。このメンバーが NULL の場合、RAS は RasEapEnd メンバーを無視します。

ppWorkBuffer

正常に復帰したときに作業バッファーを指すポインターへのポインターです。このバッファーは RAS にとって不透明であり、バッファーの内容は認証プロトコルのみが使用します。RAS 接続マネージャーは、以降の RasEapMakeMessage の呼び出しで、このバッファーへのポインターを認証プロトコルに渡します。

pPppEapInput

認証セッションの初期化情報を指定する PPP_EAP_INPUT 構造体へのポインターです。

RasEapEndINT_PTR8/4+24+16

認証プロトコルの RasEapEnd 関数へのポインターです。このメンバーの値は認証プロトコルが設定します。

pWorkBuffer

解放する作業バッファーへのポインターです。

RasEapMakeMessageINT_PTR8/4+32+20

要求された認証プロトコルの RasEapMakeMessage 関数へのポインターです。このメンバーの値は認証プロトコルが設定します。

pWorkBuf

作業バッファーへのポインターです。認証プロトコルは、 RasEapBegin 関数を通じて、このバッファーへのポインターを RAS に提供します。

pReceivePacket

受信したパケットを格納する PPP_EAP_PACKET 構造体へのポインターです。pReceivePacket の値が NULL の場合は、RAS が認証プロトコルとのやり取りを開始しようとしているか、またはタイムアウトが発生したため認証プロトコルが最後のパケットを再送信する必要があることを示します。認証プロトコルは、コンテキストに基づいてこの 2 つのどちらであるかを判断する必要があります。

pSendPacket

PPP_EAP_PACKET 構造体へのポインターです。認証プロトコルは、この構造体を使用して送信するパケットを指定できます。

cbSendPacket

pSendPacket が指すバッファーのサイズをバイト単位で指定します。

pEapOutput

PPP_EAP_OUTPUT 構造体へのポインターです。

pEapInput

PPP_EAP_INPUT 構造体へのポインターです。このパラメーターは NULL でもかまいません。

公式ドキュメント

PPP_EAP_INFO 構造体は、EAP DLL 内にある関数へのポインターを含め、認証プロトコルに関する情報を接続マネージャーに提供します。

解説(Remarks)

1 つの EAP DLL が複数の認証プロトコルを実装する場合があります。どのプロトコルの情報を取得するかを指定するには、dwEapTypeId メンバーを使用します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 Structure
import 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: int
struct 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