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

EAP_PEER_METHOD_ROUTINES

構造体
サイズx64: 120 バイト / x86: 60 バイト

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

フィールド

フィールドサイズx64x86説明
dwVersionDWORD4+0+0

実装者が定義する構造体のバージョンです。

注意 このフィールドの値は Microsoft によって定義されていません。
pEapTypeEAP_TYPE*8/4+8+4この構造体のメンバーが指す API の実装者に関するベンダー情報を格納する EAP_TYPE 構造体へのポインターです。
EapPeerInitializeINT_PTR8/4+16+8

EapPeerInitialize の関数ポインターです。

pEapError

この関数呼び出しの実行中に発生したエラーを格納する EAP_ERROR 構造体へのポインターです。エラー データを使用した後は、EapPeerFreeErrorMemory にポインターを渡してこのメモリを解放する必要があります。

EapPeerGetIdentityINT_PTR8/4+24+12

EapPeerGetIdentity の関数ポインターです。

dwflags

EAP 認証セッションの動作を示す EAP フラグ の組み合わせです。

dwSizeofConnectionData

pConnectionData で指定された接続データ バッファーのサイズをバイト単位で指定します

pConnectionData

不透明な構成データ BLOB を格納するバイト バッファーへのポインターです。

dwSizeOfUserData

pUserData で指定されたユーザー データ バッファーのサイズをバイト単位で指定します。

pUserData

ユーザー データを事前設定するために使用される、この認証に固有のユーザー データへのポインターです。 この API が初めて呼び出されるとき、または新しい認証セッションが開始されるときは、このパラメーターは NULL です。 それ以外の場合は、EapPeerGetResult で受け取った ppResult パラメーターが指す構造体の pUserData メンバーをこのパラメーターに設定します。

hTokenImpersonateUser

認証対象となるユーザーの偽装トークンへのハンドルを指定します。コンピューター認証を行う場合、このハンドルは NULL になります。EAP メソッドはこのハンドルを使用してユーザーを偽装し、ユーザー名、ドメイン名、資格情報などのユーザー固有の情報を取得できます。

pfInvokeUI

ユーザー ID とユーザー データ BLOB が正常に返されず、メソッドがユーザー インターフェイス ダイアログを通じてユーザーから情報を収集しようとする場合に TRUE を返します。

pdwSizeOfUserDataOut

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

ppUserDataOut

返されるユーザー データへのポインターのポインターです。このデータは、入力 pUserData として EapPeerBeginSession に渡されます。

ppwszIdentity

返されるユーザー ID へのポインターです。このポインターは ID 応答パケットに含まれ、サーバーに返されます。

ppEapError

この関数呼び出しの実行中に発生したエラーを格納する EAP_ERROR 構造体へのポインターのポインターです。エラー データを使用した後は、EapPeerFreeErrorMemory を呼び出してこのメモリを解放する必要があります。

EapPeerBeginSessionINT_PTR8/4+32+16

EapPeerBeginSession の関数ポインターです。

dwFlags

新しい EAP 認証セッションの動作を示す EAP フラグ の組み合わせです。

pAttributeArray

認証するエンティティの EAP 属性を指定する EAP_ATTRIBUTES 配列構造体へのポインターです。

hTokenImpersonateUser

このセッションで使用するユーザー偽装トークンへのハンドルを指定します。

dwSizeOfConnectionData

pConnectionData で指定された接続データ バッファーのサイズをバイト単位で指定します。

pConnectionData

不透明な構成データ BLOB を格納するバイト バッファーへのポインターです。

dwSizeOfUserData

pUserData で指定されたユーザー データ バッファーのサイズをバイト単位で指定します。

pUserData

不透明なユーザー データ BLOB を格納するバイト バッファーへのポインターです。

dwMaxSendPacketSize

セッション中に送信される EAP パケットの最大サイズをバイト単位で指定します。メソッドが最大サイズを超えるパケットを 送信する必要がある場合、そのメソッドは断片化と再構成に対応しなければなりません。

pSessionHandle

EAPHost 上の新しい EAP 認証セッションの一意の ID を格納する EAP_SESSION_HANDLE 構造体へのポインターです

ppEapError

この関数呼び出しの実行中に EAPHost で発生したエラーを格納する EAP_ERROR 構造体のアドレスへのポインターです。エラー データを使用した後は、EapPeerFreeErrorMemory を呼び出してこのメモリを解放する必要があります。

EapPeerSetCredentialsINT_PTR8/4+40+20

EapPeerSetCredentials の関数ポインターです。

sessionHandle

EAPHost サーバー上のこの EAP 認証セッションの一意のハンドルを格納する EAP_SESSION_HANDLE 構造体へのポインターです。このハンドルは、以前の EapPeerBeginSession の呼び出しで pSessionHandle パラメーターに返されます。

pwszIdentity

資格情報を設定する対象のユーザー ID を指定するポインターです。このユーザー ID 文字列は、EapPeerGetIdentity 関数を呼び出して取得します。

pwszPassword

ユーザー ID のクリア テキスト パスワードを格納するポインターです。

ppEapError

この関数呼び出しの実行中に発生したエラーを格納する EAP_ERROR 構造体のアドレスへのポインターです。エラー データを使用した後は、EapPeerFreeErrorMemory を呼び出してこのメモリを解放する必要があります。

EapPeerProcessRequestPacketINT_PTR8/4+48+24

EapPeerProcessRequestPacket の関数ポインターです。

sessionHandle

EAPHost 上の EAP 認証セッションの固有のハンドルを格納する EAP_SESSION_HANDLE 値です。このハンドルは、以前の EapPeerBeginSession の呼び出しによって取得します。

cbReceivePacket

pReceivePacket で指定された要求パケットのサイズ (バイト単位) です。

pReceivePacket

処理する要求パケットを格納する EapPacket 構造体へのポインターです。

pEapOutput

パケット処理操作の出力を格納する EapPeerMethodOutput 構造体へのポインターです。

ppEapError

この関数呼び出しの実行中に発生したエラーを格納する EAP_ERROR 構造体のアドレスへのポインターです。エラー データを使用した後は、EapPeerFreeErrorMemory を呼び出してこのメモリを解放する必要があります。

EapPeerGetResponsePacketINT_PTR8/4+56+28

EapPeerGetResponsePacket の関数ポインターです。

sessionHandle

EAPHost 上の EAP 認証セッションの固有のハンドルを格納する EAP_SESSION_HANDLE 値です。このハンドルは、以前の EapPeerBeginSession の呼び出しによって取得します。

pcbSendPacket

応答パケット用に割り当てられたバッファーのサイズ (バイト単位) を格納する値へのポインターです。戻り時には、このパラメーターは pSendPacket の実際のサイズ (バイト単位) へのポインターを受け取ります。

pSendPacket

応答パケットを格納する EapPacket 構造体へのポインターです。

ppEapError

この関数呼び出しの実行中に発生したエラーを格納する EAP_ERROR 構造体のアドレスへのポインターです。エラー データを使用した後は、EapPeerFreeErrorMemory を呼び出してこのメモリを解放する必要があります。

EapPeerGetResultINT_PTR8/4+64+32

EapPeerGetResult の関数ポインターです。

sessionHandle

EAPHost 上の EAP 認証セッションの固有のハンドルを格納する EAP_SESSION_HANDLE 値です。このハンドルは、以前の EapPeerBeginSession の呼び出しによって取得します。

reason

ppResult に返される認証結果の理由コードを指定する列挙値です。

ppResult

認証結果を格納する EapHostPeerMethodResult 構造体へのポインターです。

ppEapError

この関数呼び出しの実行中に発生したエラーを格納する EAP_ERROR 構造体のアドレスへのポインターです。エラー データを使用した後は、EapPeerFreeErrorMemory にポインターを渡してこのメモリを解放する必要があります。

EapPeerGetUIContextINT_PTR8/4+72+36

EapPeerGetUIContext の関数ポインターです。

sessionHandle

EAPHost 上の EAP 認証セッションの固有のハンドルを格納する EAP_SESSION_HANDLE 値です。このハンドルは、以前の EapPeerBeginSession の呼び出しによって取得します。

pdwSizeOfUIContextData

ppUIContextData に返されるユーザー インターフェイス コンテキスト データのバイト バッファーのサイズを指定する値へのポインターです。

ppUIContextData

EAPHost からのサプリカントのユーザー インターフェイス コンテキスト データを含むバイト バッファーを格納するアドレスへのポインターです。

ppEapError

この関数呼び出しの実行中に発生したエラーを格納する EAP_ERROR 構造体のアドレスへのポインターです。エラー データを使用した後は、エラー データへのポインターを EapPeerFreeErrorMemory に渡してこのメモリを解放する必要があります。

EapPeerSetUIContextINT_PTR8/4+80+40

EapPeerSetUIContext の関数ポインターです。

sessionHandle

EAPHost 上の EAP 認証セッションの固有のハンドルを格納する EAP_SESSION_HANDLE 値です。このハンドルは、以前の EapPeerBeginSession の呼び出しによって取得します。

dwSizeOfUIContextData

pUIContextData で指定された UI コンテキスト データのバイト バッファーのサイズを指定する値へのポインターです。

pUIContextData

EAPHost に設定する新しいサプリカントの UI コンテキスト データを含むバイト バッファーを格納するアドレスへのポインターです。

pEapOutput

パケット処理操作の出力を格納する EapPeerMethodOutput 構造体へのポインターです。

ppEapError

この関数呼び出しの実行中に発生したエラーを格納する EAP_ERROR 構造体のアドレスへのポインターです。エラー データを使用した後は、EapPeerFreeErrorMemory にポインターを渡してこのメモリを解放する必要があります。

EapPeerGetResponseAttributesINT_PTR8/4+88+44

EapPeerGetResponseAttributes の関数ポインターです。

sessionHandle

EAPHost 上の EAP 認証セッションの固有のハンドルを格納する EAP_SESSION_HANDLE 値です。このハンドルは、以前の EapPeerBeginSession の呼び出しによって取得します。

pAttribs

サプリカントの EAP 認証応答属性の配列を格納する EAP_ATTRIBUTES 構造体へのポインターを受け取ります。

ppEapError

この関数呼び出しの実行中に発生したエラーを格納する EAP_ERROR 構造体のアドレスへのポインターです。エラー データを使用した後は、EapPeerFreeErrorMemory を呼び出してこのメモリを解放する必要があります。

EapPeerSetResponseAttributesINT_PTR8/4+96+48

EapPeerSetResponseAttributes の関数ポインターです。

sessionHandle

EAPHost 上の EAP 認証セッションの固有のハンドルを格納する EAP_SESSION_HANDLE 値です。このハンドルは、以前の EapPeerBeginSession の呼び出しによって取得します。

pAttribs

EAPHost 上のサプリカントに設定する新しい EAP 認証応答属性の配列を格納する EAP_ATTRIBUTES 構造体へのポインターです。

pEapOutput

更新された属性への応答としてサプリカントが取るべき推奨アクションを指定する EapPeerMethodOutput 構造体へのポインターです。

ppEapError

この関数呼び出しの実行中に発生したエラーを格納する EAP_ERROR 構造体のアドレスへのポインターです。エラー データを使用した後は、EapPeerFreeErrorMemory を呼び出してこのメモリを解放する必要があります。

EapPeerEndSessionINT_PTR8/4+104+52

EapPeerEndSession の関数ポインターです。

sessionHandle

EAPHost 上で終了する EAP 認証セッションの固有のハンドルを格納する EAP_SESSION_HANDLE 値です。このハンドルは、以前の EapPeerBeginSession の呼び出しによって取得します。

ppEapError

この関数呼び出しの実行中に発生したエラーを格納する EAP_ERROR 構造体のアドレスへのポインターです。エラー データを使用した後は、EapPeerFreeErrorMemory を呼び出してこのメモリを解放する必要があります。

EapPeerShutdownINT_PTR8/4+112+56

EapPeerShutdown の関数ポインターです。

ppEapError

この関数呼び出しの実行中に発生したエラーを格納する EAP_ERROR 構造体のアドレスへのポインターです。エラー データを使用した後は、EapPeerFreeErrorMemory にポインターを渡してこのメモリを解放する必要があります。

公式ドキュメント

EAPHost ピア メソッド API への関数ポインターのセットを格納します。

解説(Remarks)

各 EAP メソッド DLL は、次の API を実装しなければなりません。

これらの API はサプリカントが行う呼び出しに対応しており、サプリカントの API 呼び出しと EAP メソッド DLL で公開されるパブリック API との間のプロキシとして機能します。そのため、サプリカントがピア ベースの EAPHost に対して認証セッションを確立する呼び出しや、そのセッション中に操作を実行する呼び出しを行うと、EAPHost は提供されたパラメーター データを使用して EAP メソッド DLL 上の対応する実装済み関数を呼び出します。EAP メソッドの関数は、それぞれのエントリ ポイントへのポインターによって管理されます。

EAP ピア メソッド API セットのその他の関数は、対応するサプリカントの呼び出しなしにピア ベースの EAPHost によって呼び出され、接続の検証やユーザー インターフェイスの表示操作に使用されます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// EAP_PEER_METHOD_ROUTINES  (x64 120 / x86 60 バイト)
typedef struct EAP_PEER_METHOD_ROUTINES {
    DWORD dwVersion;
    EAP_TYPE* pEapType;
    INT_PTR EapPeerInitialize;
    INT_PTR EapPeerGetIdentity;
    INT_PTR EapPeerBeginSession;
    INT_PTR EapPeerSetCredentials;
    INT_PTR EapPeerProcessRequestPacket;
    INT_PTR EapPeerGetResponsePacket;
    INT_PTR EapPeerGetResult;
    INT_PTR EapPeerGetUIContext;
    INT_PTR EapPeerSetUIContext;
    INT_PTR EapPeerGetResponseAttributes;
    INT_PTR EapPeerSetResponseAttributes;
    INT_PTR EapPeerEndSession;
    INT_PTR EapPeerShutdown;
} EAP_PEER_METHOD_ROUTINES;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct EAP_PEER_METHOD_ROUTINES
{
    public uint dwVersion;
    public IntPtr pEapType;
    public IntPtr EapPeerInitialize;
    public IntPtr EapPeerGetIdentity;
    public IntPtr EapPeerBeginSession;
    public IntPtr EapPeerSetCredentials;
    public IntPtr EapPeerProcessRequestPacket;
    public IntPtr EapPeerGetResponsePacket;
    public IntPtr EapPeerGetResult;
    public IntPtr EapPeerGetUIContext;
    public IntPtr EapPeerSetUIContext;
    public IntPtr EapPeerGetResponseAttributes;
    public IntPtr EapPeerSetResponseAttributes;
    public IntPtr EapPeerEndSession;
    public IntPtr EapPeerShutdown;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure EAP_PEER_METHOD_ROUTINES
    Public dwVersion As UInteger
    Public pEapType As IntPtr
    Public EapPeerInitialize As IntPtr
    Public EapPeerGetIdentity As IntPtr
    Public EapPeerBeginSession As IntPtr
    Public EapPeerSetCredentials As IntPtr
    Public EapPeerProcessRequestPacket As IntPtr
    Public EapPeerGetResponsePacket As IntPtr
    Public EapPeerGetResult As IntPtr
    Public EapPeerGetUIContext As IntPtr
    Public EapPeerSetUIContext As IntPtr
    Public EapPeerGetResponseAttributes As IntPtr
    Public EapPeerSetResponseAttributes As IntPtr
    Public EapPeerEndSession As IntPtr
    Public EapPeerShutdown As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class EAP_PEER_METHOD_ROUTINES(ctypes.Structure):
    _fields_ = [
        ("dwVersion", wintypes.DWORD),
        ("pEapType", ctypes.c_void_p),
        ("EapPeerInitialize", ctypes.c_ssize_t),
        ("EapPeerGetIdentity", ctypes.c_ssize_t),
        ("EapPeerBeginSession", ctypes.c_ssize_t),
        ("EapPeerSetCredentials", ctypes.c_ssize_t),
        ("EapPeerProcessRequestPacket", ctypes.c_ssize_t),
        ("EapPeerGetResponsePacket", ctypes.c_ssize_t),
        ("EapPeerGetResult", ctypes.c_ssize_t),
        ("EapPeerGetUIContext", ctypes.c_ssize_t),
        ("EapPeerSetUIContext", ctypes.c_ssize_t),
        ("EapPeerGetResponseAttributes", ctypes.c_ssize_t),
        ("EapPeerSetResponseAttributes", ctypes.c_ssize_t),
        ("EapPeerEndSession", ctypes.c_ssize_t),
        ("EapPeerShutdown", ctypes.c_ssize_t),
    ]
#[repr(C)]
pub struct EAP_PEER_METHOD_ROUTINES {
    pub dwVersion: u32,
    pub pEapType: *mut core::ffi::c_void,
    pub EapPeerInitialize: isize,
    pub EapPeerGetIdentity: isize,
    pub EapPeerBeginSession: isize,
    pub EapPeerSetCredentials: isize,
    pub EapPeerProcessRequestPacket: isize,
    pub EapPeerGetResponsePacket: isize,
    pub EapPeerGetResult: isize,
    pub EapPeerGetUIContext: isize,
    pub EapPeerSetUIContext: isize,
    pub EapPeerGetResponseAttributes: isize,
    pub EapPeerSetResponseAttributes: isize,
    pub EapPeerEndSession: isize,
    pub EapPeerShutdown: isize,
}
import "golang.org/x/sys/windows"

type EAP_PEER_METHOD_ROUTINES struct {
	dwVersion uint32
	pEapType uintptr
	EapPeerInitialize uintptr
	EapPeerGetIdentity uintptr
	EapPeerBeginSession uintptr
	EapPeerSetCredentials uintptr
	EapPeerProcessRequestPacket uintptr
	EapPeerGetResponsePacket uintptr
	EapPeerGetResult uintptr
	EapPeerGetUIContext uintptr
	EapPeerSetUIContext uintptr
	EapPeerGetResponseAttributes uintptr
	EapPeerSetResponseAttributes uintptr
	EapPeerEndSession uintptr
	EapPeerShutdown uintptr
}
type
  EAP_PEER_METHOD_ROUTINES = record
    dwVersion: DWORD;
    pEapType: Pointer;
    EapPeerInitialize: NativeInt;
    EapPeerGetIdentity: NativeInt;
    EapPeerBeginSession: NativeInt;
    EapPeerSetCredentials: NativeInt;
    EapPeerProcessRequestPacket: NativeInt;
    EapPeerGetResponsePacket: NativeInt;
    EapPeerGetResult: NativeInt;
    EapPeerGetUIContext: NativeInt;
    EapPeerSetUIContext: NativeInt;
    EapPeerGetResponseAttributes: NativeInt;
    EapPeerSetResponseAttributes: NativeInt;
    EapPeerEndSession: NativeInt;
    EapPeerShutdown: NativeInt;
  end;
const EAP_PEER_METHOD_ROUTINES = extern struct {
    dwVersion: u32,
    pEapType: ?*anyopaque,
    EapPeerInitialize: isize,
    EapPeerGetIdentity: isize,
    EapPeerBeginSession: isize,
    EapPeerSetCredentials: isize,
    EapPeerProcessRequestPacket: isize,
    EapPeerGetResponsePacket: isize,
    EapPeerGetResult: isize,
    EapPeerGetUIContext: isize,
    EapPeerSetUIContext: isize,
    EapPeerGetResponseAttributes: isize,
    EapPeerSetResponseAttributes: isize,
    EapPeerEndSession: isize,
    EapPeerShutdown: isize,
};
type
  EAP_PEER_METHOD_ROUTINES {.bycopy.} = object
    dwVersion: uint32
    pEapType: pointer
    EapPeerInitialize: int
    EapPeerGetIdentity: int
    EapPeerBeginSession: int
    EapPeerSetCredentials: int
    EapPeerProcessRequestPacket: int
    EapPeerGetResponsePacket: int
    EapPeerGetResult: int
    EapPeerGetUIContext: int
    EapPeerSetUIContext: int
    EapPeerGetResponseAttributes: int
    EapPeerSetResponseAttributes: int
    EapPeerEndSession: int
    EapPeerShutdown: int
struct EAP_PEER_METHOD_ROUTINES
{
    uint dwVersion;
    void* pEapType;
    ptrdiff_t EapPeerInitialize;
    ptrdiff_t EapPeerGetIdentity;
    ptrdiff_t EapPeerBeginSession;
    ptrdiff_t EapPeerSetCredentials;
    ptrdiff_t EapPeerProcessRequestPacket;
    ptrdiff_t EapPeerGetResponsePacket;
    ptrdiff_t EapPeerGetResult;
    ptrdiff_t EapPeerGetUIContext;
    ptrdiff_t EapPeerSetUIContext;
    ptrdiff_t EapPeerGetResponseAttributes;
    ptrdiff_t EapPeerSetResponseAttributes;
    ptrdiff_t EapPeerEndSession;
    ptrdiff_t EapPeerShutdown;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; EAP_PEER_METHOD_ROUTINES サイズ: 60 バイト(x86)
dim st, 15    ; 4byte整数×15(構造体サイズ 60 / 4 切り上げ)
; dwVersion : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; pEapType : EAP_TYPE* (+4, 4byte)  varptr(st)+4 を基点に操作(4byte:入れ子/配列)
; EapPeerInitialize : INT_PTR (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; EapPeerGetIdentity : INT_PTR (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; EapPeerBeginSession : INT_PTR (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; EapPeerSetCredentials : INT_PTR (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; EapPeerProcessRequestPacket : INT_PTR (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; EapPeerGetResponsePacket : INT_PTR (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; EapPeerGetResult : INT_PTR (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; EapPeerGetUIContext : INT_PTR (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; EapPeerSetUIContext : INT_PTR (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; EapPeerGetResponseAttributes : INT_PTR (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; EapPeerSetResponseAttributes : INT_PTR (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; EapPeerEndSession : INT_PTR (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; EapPeerShutdown : INT_PTR (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; EAP_PEER_METHOD_ROUTINES サイズ: 120 バイト(x64)
dim st, 30    ; 4byte整数×30(構造体サイズ 120 / 4 切り上げ)
; dwVersion : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; pEapType : EAP_TYPE* (+8, 8byte)  varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; EapPeerInitialize : INT_PTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; EapPeerGetIdentity : INT_PTR (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; EapPeerBeginSession : INT_PTR (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; EapPeerSetCredentials : INT_PTR (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; EapPeerProcessRequestPacket : INT_PTR (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; EapPeerGetResponsePacket : INT_PTR (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; EapPeerGetResult : INT_PTR (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; EapPeerGetUIContext : INT_PTR (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; EapPeerSetUIContext : INT_PTR (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; EapPeerGetResponseAttributes : INT_PTR (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; EapPeerSetResponseAttributes : INT_PTR (+96, 8byte)  qpoke st,96,値 / qpeek(st,96)  ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; EapPeerEndSession : INT_PTR (+104, 8byte)  qpoke st,104,値 / qpeek(st,104)  ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; EapPeerShutdown : INT_PTR (+112, 8byte)  qpoke st,112,値 / qpeek(st,112)  ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global EAP_PEER_METHOD_ROUTINES
    #field int dwVersion
    #field intptr pEapType
    #field intptr EapPeerInitialize
    #field intptr EapPeerGetIdentity
    #field intptr EapPeerBeginSession
    #field intptr EapPeerSetCredentials
    #field intptr EapPeerProcessRequestPacket
    #field intptr EapPeerGetResponsePacket
    #field intptr EapPeerGetResult
    #field intptr EapPeerGetUIContext
    #field intptr EapPeerSetUIContext
    #field intptr EapPeerGetResponseAttributes
    #field intptr EapPeerSetResponseAttributes
    #field intptr EapPeerEndSession
    #field intptr EapPeerShutdown
#endstruct

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