Win32 API 日本語リファレンス
ホームSecurity.Authentication.Identity › SECPKG_FUNCTION_TABLE

SECPKG_FUNCTION_TABLE

構造体
サイズx64: 344 バイト / x86: 172 バイト

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

フィールド

フィールドサイズx64x86説明
InitializePackagePLSA_AP_INITIALIZE_PACKAGE8/4+0+0認証パッケージを初期化するLSA APIへのポインタ。
LogonUserAPLSA_AP_LOGON_USER8/4+8+4ANSI版のユーザーログオン処理関数へのポインタ。
CallPackagePLSA_AP_CALL_PACKAGE8/4+16+8パッケージを呼び出す関数へのポインタ。
LogonTerminatedPLSA_AP_LOGON_TERMINATED8/4+24+12ログオン終了通知を処理する関数へのポインタ。
CallPackageUntrustedPLSA_AP_CALL_PACKAGE8/4+32+16信頼されないクライアントからのパッケージ呼び出し関数へのポインタ。
CallPackagePassthroughPLSA_AP_CALL_PACKAGE_PASSTHROUGH8/4+40+20パススルー呼び出しを処理する関数へのポインタ。
LogonUserExAPLSA_AP_LOGON_USER_EX8/4+48+24拡張版ANSIユーザーログオン関数へのポインタ。
LogonUserEx2PLSA_AP_LOGON_USER_EX28/4+56+28バージョン2の拡張ユーザーログオン関数へのポインタ。
InitializeSpInitializeFn8/4+64+32セキュリティパッケージを初期化するSSPI関数へのポインタ。
ShutdownSpShutdownFn8/4+72+36パッケージを終了させる関数へのポインタ。
GetInfoSpGetInfoFn8/4+80+40パッケージ情報を取得する関数へのポインタ。
AcceptCredentialsSpAcceptCredentialsFn8/4+88+44資格情報を受け入れる関数へのポインタ。
AcquireCredentialsHandleASpAcquireCredentialsHandleFn8/4+96+48ANSI版で資格情報ハンドルを取得する関数へのポインタ。
QueryCredentialsAttributesASpQueryCredentialsAttributesFn8/4+104+52資格情報属性を照会するANSI関数へのポインタ。
FreeCredentialsHandleSpFreeCredentialsHandleFn8/4+112+56資格情報ハンドルを解放する関数へのポインタ。
SaveCredentialsSpSaveCredentialsFn8/4+120+60資格情報を保存する関数へのポインタ。
GetCredentialsSpGetCredentialsFn8/4+128+64資格情報を取得する関数へのポインタ。
DeleteCredentialsSpDeleteCredentialsFn8/4+136+68資格情報を削除する関数へのポインタ。
InitLsaModeContextSpInitLsaModeContextFn8/4+144+72LSAモードのセキュリティコンテキストを初期化する関数へのポインタ。
AcceptLsaModeContextSpAcceptLsaModeContextFn8/4+152+76LSAモードのコンテキストを受け入れる関数へのポインタ。
DeleteContextSpDeleteContextFn8/4+160+80セキュリティコンテキストを削除する関数へのポインタ。
ApplyControlTokenSpApplyControlTokenFn8/4+168+84制御トークンをコンテキストに適用する関数へのポインタ。
GetUserInfoSpGetUserInfoFn8/4+176+88ユーザー情報を取得する関数へのポインタ。
GetExtendedInformationSpGetExtendedInformationFn8/4+184+92拡張情報を取得する関数へのポインタ。
QueryContextAttributesASpQueryContextAttributesFn8/4+192+96コンテキスト属性を照会するANSI関数へのポインタ。
AddCredentialsASpAddCredentialsFn8/4+200+100資格情報を追加するANSI関数へのポインタ。
SetExtendedInformationSpSetExtendedInformationFn8/4+208+104拡張情報を設定する関数へのポインタ。
SetContextAttributesASpSetContextAttributesFn8/4+216+108コンテキスト属性を設定するANSI関数へのポインタ。
SetCredentialsAttributesASpSetCredentialsAttributesFn8/4+224+112資格情報属性を設定するANSI関数へのポインタ。
ChangeAccountPasswordASpChangeAccountPasswordFn8/4+232+116アカウントパスワードを変更するANSI関数へのポインタ。
QueryMetaDataSpQueryMetaDataFn8/4+240+120メタデータを照会する関数へのポインタ。
ExchangeMetaDataSpExchangeMetaDataFn8/4+248+124メタデータを交換する関数へのポインタ。
GetCredUIContextSpGetCredUIContextFn8/4+256+128資格情報UIコンテキストを取得する関数へのポインタ。
UpdateCredentialsSpUpdateCredentialsFn8/4+264+132資格情報を更新する関数へのポインタ。
ValidateTargetInfoSpValidateTargetInfoFn8/4+272+136ターゲット情報を検証する関数へのポインタ。
PostLogonUserLSA_AP_POST_LOGON_USER8/4+280+140ログオン後処理を行う関数へのポインタ。
GetRemoteCredGuardLogonBufferSpGetRemoteCredGuardLogonBufferFn8/4+288+144リモートCredential Guard用ログオンバッファを取得する関数へのポインタ。
GetRemoteCredGuardSupplementalCredsSpGetRemoteCredGuardSupplementalCredsFn8/4+296+148リモートCredential Guard用補助資格情報を取得する関数へのポインタ。
GetTbalSupplementalCredsSpGetTbalSupplementalCredsFn8/4+304+152TBAL用補助資格情報を取得する関数へのポインタ。
LogonUserEx3PLSA_AP_LOGON_USER_EX38/4+312+156バージョン3の拡張ユーザーログオン関数へのポインタ。
PreLogonUserSurrogatePLSA_AP_PRE_LOGON_USER_SURROGATE8/4+320+160代理ログオン前処理を行う関数へのポインタ。
PostLogonUserSurrogatePLSA_AP_POST_LOGON_USER_SURROGATE8/4+328+164代理ログオン後処理を行う関数へのポインタ。
ExtractTargetInfoSpExtractTargetInfoFn8/4+336+168ターゲット情報を抽出する関数へのポインタ。

各言語での定義

#include <windows.h>

// SECPKG_FUNCTION_TABLE  (x64 344 / x86 172 バイト)
typedef struct SECPKG_FUNCTION_TABLE {
    PLSA_AP_INITIALIZE_PACKAGE InitializePackage;
    PLSA_AP_LOGON_USER LogonUserA;
    PLSA_AP_CALL_PACKAGE CallPackage;
    PLSA_AP_LOGON_TERMINATED LogonTerminated;
    PLSA_AP_CALL_PACKAGE CallPackageUntrusted;
    PLSA_AP_CALL_PACKAGE_PASSTHROUGH CallPackagePassthrough;
    PLSA_AP_LOGON_USER_EX LogonUserExA;
    PLSA_AP_LOGON_USER_EX2 LogonUserEx2;
    SpInitializeFn Initialize;
    SpShutdownFn Shutdown;
    SpGetInfoFn GetInfo;
    SpAcceptCredentialsFn AcceptCredentials;
    SpAcquireCredentialsHandleFn AcquireCredentialsHandleA;
    SpQueryCredentialsAttributesFn QueryCredentialsAttributesA;
    SpFreeCredentialsHandleFn FreeCredentialsHandle;
    SpSaveCredentialsFn SaveCredentials;
    SpGetCredentialsFn GetCredentials;
    SpDeleteCredentialsFn DeleteCredentials;
    SpInitLsaModeContextFn InitLsaModeContext;
    SpAcceptLsaModeContextFn AcceptLsaModeContext;
    SpDeleteContextFn DeleteContext;
    SpApplyControlTokenFn ApplyControlToken;
    SpGetUserInfoFn GetUserInfo;
    SpGetExtendedInformationFn GetExtendedInformation;
    SpQueryContextAttributesFn QueryContextAttributesA;
    SpAddCredentialsFn AddCredentialsA;
    SpSetExtendedInformationFn SetExtendedInformation;
    SpSetContextAttributesFn SetContextAttributesA;
    SpSetCredentialsAttributesFn SetCredentialsAttributesA;
    SpChangeAccountPasswordFn ChangeAccountPasswordA;
    SpQueryMetaDataFn QueryMetaData;
    SpExchangeMetaDataFn ExchangeMetaData;
    SpGetCredUIContextFn GetCredUIContext;
    SpUpdateCredentialsFn UpdateCredentials;
    SpValidateTargetInfoFn ValidateTargetInfo;
    LSA_AP_POST_LOGON_USER PostLogonUser;
    SpGetRemoteCredGuardLogonBufferFn GetRemoteCredGuardLogonBuffer;
    SpGetRemoteCredGuardSupplementalCredsFn GetRemoteCredGuardSupplementalCreds;
    SpGetTbalSupplementalCredsFn GetTbalSupplementalCreds;
    PLSA_AP_LOGON_USER_EX3 LogonUserEx3;
    PLSA_AP_PRE_LOGON_USER_SURROGATE PreLogonUserSurrogate;
    PLSA_AP_POST_LOGON_USER_SURROGATE PostLogonUserSurrogate;
    SpExtractTargetInfoFn ExtractTargetInfo;
} SECPKG_FUNCTION_TABLE;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SECPKG_FUNCTION_TABLE
{
    public IntPtr InitializePackage;
    public IntPtr LogonUserA;
    public IntPtr CallPackage;
    public IntPtr LogonTerminated;
    public IntPtr CallPackageUntrusted;
    public IntPtr CallPackagePassthrough;
    public IntPtr LogonUserExA;
    public IntPtr LogonUserEx2;
    public IntPtr Initialize;
    public IntPtr Shutdown;
    public IntPtr GetInfo;
    public IntPtr AcceptCredentials;
    public IntPtr AcquireCredentialsHandleA;
    public IntPtr QueryCredentialsAttributesA;
    public IntPtr FreeCredentialsHandle;
    public IntPtr SaveCredentials;
    public IntPtr GetCredentials;
    public IntPtr DeleteCredentials;
    public IntPtr InitLsaModeContext;
    public IntPtr AcceptLsaModeContext;
    public IntPtr DeleteContext;
    public IntPtr ApplyControlToken;
    public IntPtr GetUserInfo;
    public IntPtr GetExtendedInformation;
    public IntPtr QueryContextAttributesA;
    public IntPtr AddCredentialsA;
    public IntPtr SetExtendedInformation;
    public IntPtr SetContextAttributesA;
    public IntPtr SetCredentialsAttributesA;
    public IntPtr ChangeAccountPasswordA;
    public IntPtr QueryMetaData;
    public IntPtr ExchangeMetaData;
    public IntPtr GetCredUIContext;
    public IntPtr UpdateCredentials;
    public IntPtr ValidateTargetInfo;
    public IntPtr PostLogonUser;
    public IntPtr GetRemoteCredGuardLogonBuffer;
    public IntPtr GetRemoteCredGuardSupplementalCreds;
    public IntPtr GetTbalSupplementalCreds;
    public IntPtr LogonUserEx3;
    public IntPtr PreLogonUserSurrogate;
    public IntPtr PostLogonUserSurrogate;
    public IntPtr ExtractTargetInfo;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure SECPKG_FUNCTION_TABLE
    Public InitializePackage As IntPtr
    Public LogonUserA As IntPtr
    Public CallPackage As IntPtr
    Public LogonTerminated As IntPtr
    Public CallPackageUntrusted As IntPtr
    Public CallPackagePassthrough As IntPtr
    Public LogonUserExA As IntPtr
    Public LogonUserEx2 As IntPtr
    Public Initialize As IntPtr
    Public Shutdown As IntPtr
    Public GetInfo As IntPtr
    Public AcceptCredentials As IntPtr
    Public AcquireCredentialsHandleA As IntPtr
    Public QueryCredentialsAttributesA As IntPtr
    Public FreeCredentialsHandle As IntPtr
    Public SaveCredentials As IntPtr
    Public GetCredentials As IntPtr
    Public DeleteCredentials As IntPtr
    Public InitLsaModeContext As IntPtr
    Public AcceptLsaModeContext As IntPtr
    Public DeleteContext As IntPtr
    Public ApplyControlToken As IntPtr
    Public GetUserInfo As IntPtr
    Public GetExtendedInformation As IntPtr
    Public QueryContextAttributesA As IntPtr
    Public AddCredentialsA As IntPtr
    Public SetExtendedInformation As IntPtr
    Public SetContextAttributesA As IntPtr
    Public SetCredentialsAttributesA As IntPtr
    Public ChangeAccountPasswordA As IntPtr
    Public QueryMetaData As IntPtr
    Public ExchangeMetaData As IntPtr
    Public GetCredUIContext As IntPtr
    Public UpdateCredentials As IntPtr
    Public ValidateTargetInfo As IntPtr
    Public PostLogonUser As IntPtr
    Public GetRemoteCredGuardLogonBuffer As IntPtr
    Public GetRemoteCredGuardSupplementalCreds As IntPtr
    Public GetTbalSupplementalCreds As IntPtr
    Public LogonUserEx3 As IntPtr
    Public PreLogonUserSurrogate As IntPtr
    Public PostLogonUserSurrogate As IntPtr
    Public ExtractTargetInfo As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class SECPKG_FUNCTION_TABLE(ctypes.Structure):
    _fields_ = [
        ("InitializePackage", ctypes.c_void_p),
        ("LogonUserA", ctypes.c_void_p),
        ("CallPackage", ctypes.c_void_p),
        ("LogonTerminated", ctypes.c_void_p),
        ("CallPackageUntrusted", ctypes.c_void_p),
        ("CallPackagePassthrough", ctypes.c_void_p),
        ("LogonUserExA", ctypes.c_void_p),
        ("LogonUserEx2", ctypes.c_void_p),
        ("Initialize", ctypes.c_void_p),
        ("Shutdown", ctypes.c_void_p),
        ("GetInfo", ctypes.c_void_p),
        ("AcceptCredentials", ctypes.c_void_p),
        ("AcquireCredentialsHandleA", ctypes.c_void_p),
        ("QueryCredentialsAttributesA", ctypes.c_void_p),
        ("FreeCredentialsHandle", ctypes.c_void_p),
        ("SaveCredentials", ctypes.c_void_p),
        ("GetCredentials", ctypes.c_void_p),
        ("DeleteCredentials", ctypes.c_void_p),
        ("InitLsaModeContext", ctypes.c_void_p),
        ("AcceptLsaModeContext", ctypes.c_void_p),
        ("DeleteContext", ctypes.c_void_p),
        ("ApplyControlToken", ctypes.c_void_p),
        ("GetUserInfo", ctypes.c_void_p),
        ("GetExtendedInformation", ctypes.c_void_p),
        ("QueryContextAttributesA", ctypes.c_void_p),
        ("AddCredentialsA", ctypes.c_void_p),
        ("SetExtendedInformation", ctypes.c_void_p),
        ("SetContextAttributesA", ctypes.c_void_p),
        ("SetCredentialsAttributesA", ctypes.c_void_p),
        ("ChangeAccountPasswordA", ctypes.c_void_p),
        ("QueryMetaData", ctypes.c_void_p),
        ("ExchangeMetaData", ctypes.c_void_p),
        ("GetCredUIContext", ctypes.c_void_p),
        ("UpdateCredentials", ctypes.c_void_p),
        ("ValidateTargetInfo", ctypes.c_void_p),
        ("PostLogonUser", ctypes.c_void_p),
        ("GetRemoteCredGuardLogonBuffer", ctypes.c_void_p),
        ("GetRemoteCredGuardSupplementalCreds", ctypes.c_void_p),
        ("GetTbalSupplementalCreds", ctypes.c_void_p),
        ("LogonUserEx3", ctypes.c_void_p),
        ("PreLogonUserSurrogate", ctypes.c_void_p),
        ("PostLogonUserSurrogate", ctypes.c_void_p),
        ("ExtractTargetInfo", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct SECPKG_FUNCTION_TABLE {
    pub InitializePackage: *mut core::ffi::c_void,
    pub LogonUserA: *mut core::ffi::c_void,
    pub CallPackage: *mut core::ffi::c_void,
    pub LogonTerminated: *mut core::ffi::c_void,
    pub CallPackageUntrusted: *mut core::ffi::c_void,
    pub CallPackagePassthrough: *mut core::ffi::c_void,
    pub LogonUserExA: *mut core::ffi::c_void,
    pub LogonUserEx2: *mut core::ffi::c_void,
    pub Initialize: *mut core::ffi::c_void,
    pub Shutdown: *mut core::ffi::c_void,
    pub GetInfo: *mut core::ffi::c_void,
    pub AcceptCredentials: *mut core::ffi::c_void,
    pub AcquireCredentialsHandleA: *mut core::ffi::c_void,
    pub QueryCredentialsAttributesA: *mut core::ffi::c_void,
    pub FreeCredentialsHandle: *mut core::ffi::c_void,
    pub SaveCredentials: *mut core::ffi::c_void,
    pub GetCredentials: *mut core::ffi::c_void,
    pub DeleteCredentials: *mut core::ffi::c_void,
    pub InitLsaModeContext: *mut core::ffi::c_void,
    pub AcceptLsaModeContext: *mut core::ffi::c_void,
    pub DeleteContext: *mut core::ffi::c_void,
    pub ApplyControlToken: *mut core::ffi::c_void,
    pub GetUserInfo: *mut core::ffi::c_void,
    pub GetExtendedInformation: *mut core::ffi::c_void,
    pub QueryContextAttributesA: *mut core::ffi::c_void,
    pub AddCredentialsA: *mut core::ffi::c_void,
    pub SetExtendedInformation: *mut core::ffi::c_void,
    pub SetContextAttributesA: *mut core::ffi::c_void,
    pub SetCredentialsAttributesA: *mut core::ffi::c_void,
    pub ChangeAccountPasswordA: *mut core::ffi::c_void,
    pub QueryMetaData: *mut core::ffi::c_void,
    pub ExchangeMetaData: *mut core::ffi::c_void,
    pub GetCredUIContext: *mut core::ffi::c_void,
    pub UpdateCredentials: *mut core::ffi::c_void,
    pub ValidateTargetInfo: *mut core::ffi::c_void,
    pub PostLogonUser: *mut core::ffi::c_void,
    pub GetRemoteCredGuardLogonBuffer: *mut core::ffi::c_void,
    pub GetRemoteCredGuardSupplementalCreds: *mut core::ffi::c_void,
    pub GetTbalSupplementalCreds: *mut core::ffi::c_void,
    pub LogonUserEx3: *mut core::ffi::c_void,
    pub PreLogonUserSurrogate: *mut core::ffi::c_void,
    pub PostLogonUserSurrogate: *mut core::ffi::c_void,
    pub ExtractTargetInfo: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type SECPKG_FUNCTION_TABLE struct {
	InitializePackage uintptr
	LogonUserA uintptr
	CallPackage uintptr
	LogonTerminated uintptr
	CallPackageUntrusted uintptr
	CallPackagePassthrough uintptr
	LogonUserExA uintptr
	LogonUserEx2 uintptr
	Initialize uintptr
	Shutdown uintptr
	GetInfo uintptr
	AcceptCredentials uintptr
	AcquireCredentialsHandleA uintptr
	QueryCredentialsAttributesA uintptr
	FreeCredentialsHandle uintptr
	SaveCredentials uintptr
	GetCredentials uintptr
	DeleteCredentials uintptr
	InitLsaModeContext uintptr
	AcceptLsaModeContext uintptr
	DeleteContext uintptr
	ApplyControlToken uintptr
	GetUserInfo uintptr
	GetExtendedInformation uintptr
	QueryContextAttributesA uintptr
	AddCredentialsA uintptr
	SetExtendedInformation uintptr
	SetContextAttributesA uintptr
	SetCredentialsAttributesA uintptr
	ChangeAccountPasswordA uintptr
	QueryMetaData uintptr
	ExchangeMetaData uintptr
	GetCredUIContext uintptr
	UpdateCredentials uintptr
	ValidateTargetInfo uintptr
	PostLogonUser uintptr
	GetRemoteCredGuardLogonBuffer uintptr
	GetRemoteCredGuardSupplementalCreds uintptr
	GetTbalSupplementalCreds uintptr
	LogonUserEx3 uintptr
	PreLogonUserSurrogate uintptr
	PostLogonUserSurrogate uintptr
	ExtractTargetInfo uintptr
}
type
  SECPKG_FUNCTION_TABLE = record
    InitializePackage: Pointer;
    LogonUserA: Pointer;
    CallPackage: Pointer;
    LogonTerminated: Pointer;
    CallPackageUntrusted: Pointer;
    CallPackagePassthrough: Pointer;
    LogonUserExA: Pointer;
    LogonUserEx2: Pointer;
    Initialize: Pointer;
    Shutdown: Pointer;
    GetInfo: Pointer;
    AcceptCredentials: Pointer;
    AcquireCredentialsHandleA: Pointer;
    QueryCredentialsAttributesA: Pointer;
    FreeCredentialsHandle: Pointer;
    SaveCredentials: Pointer;
    GetCredentials: Pointer;
    DeleteCredentials: Pointer;
    InitLsaModeContext: Pointer;
    AcceptLsaModeContext: Pointer;
    DeleteContext: Pointer;
    ApplyControlToken: Pointer;
    GetUserInfo: Pointer;
    GetExtendedInformation: Pointer;
    QueryContextAttributesA: Pointer;
    AddCredentialsA: Pointer;
    SetExtendedInformation: Pointer;
    SetContextAttributesA: Pointer;
    SetCredentialsAttributesA: Pointer;
    ChangeAccountPasswordA: Pointer;
    QueryMetaData: Pointer;
    ExchangeMetaData: Pointer;
    GetCredUIContext: Pointer;
    UpdateCredentials: Pointer;
    ValidateTargetInfo: Pointer;
    PostLogonUser: Pointer;
    GetRemoteCredGuardLogonBuffer: Pointer;
    GetRemoteCredGuardSupplementalCreds: Pointer;
    GetTbalSupplementalCreds: Pointer;
    LogonUserEx3: Pointer;
    PreLogonUserSurrogate: Pointer;
    PostLogonUserSurrogate: Pointer;
    ExtractTargetInfo: Pointer;
  end;
const SECPKG_FUNCTION_TABLE = extern struct {
    InitializePackage: ?*anyopaque,
    LogonUserA: ?*anyopaque,
    CallPackage: ?*anyopaque,
    LogonTerminated: ?*anyopaque,
    CallPackageUntrusted: ?*anyopaque,
    CallPackagePassthrough: ?*anyopaque,
    LogonUserExA: ?*anyopaque,
    LogonUserEx2: ?*anyopaque,
    Initialize: ?*anyopaque,
    Shutdown: ?*anyopaque,
    GetInfo: ?*anyopaque,
    AcceptCredentials: ?*anyopaque,
    AcquireCredentialsHandleA: ?*anyopaque,
    QueryCredentialsAttributesA: ?*anyopaque,
    FreeCredentialsHandle: ?*anyopaque,
    SaveCredentials: ?*anyopaque,
    GetCredentials: ?*anyopaque,
    DeleteCredentials: ?*anyopaque,
    InitLsaModeContext: ?*anyopaque,
    AcceptLsaModeContext: ?*anyopaque,
    DeleteContext: ?*anyopaque,
    ApplyControlToken: ?*anyopaque,
    GetUserInfo: ?*anyopaque,
    GetExtendedInformation: ?*anyopaque,
    QueryContextAttributesA: ?*anyopaque,
    AddCredentialsA: ?*anyopaque,
    SetExtendedInformation: ?*anyopaque,
    SetContextAttributesA: ?*anyopaque,
    SetCredentialsAttributesA: ?*anyopaque,
    ChangeAccountPasswordA: ?*anyopaque,
    QueryMetaData: ?*anyopaque,
    ExchangeMetaData: ?*anyopaque,
    GetCredUIContext: ?*anyopaque,
    UpdateCredentials: ?*anyopaque,
    ValidateTargetInfo: ?*anyopaque,
    PostLogonUser: ?*anyopaque,
    GetRemoteCredGuardLogonBuffer: ?*anyopaque,
    GetRemoteCredGuardSupplementalCreds: ?*anyopaque,
    GetTbalSupplementalCreds: ?*anyopaque,
    LogonUserEx3: ?*anyopaque,
    PreLogonUserSurrogate: ?*anyopaque,
    PostLogonUserSurrogate: ?*anyopaque,
    ExtractTargetInfo: ?*anyopaque,
};
type
  SECPKG_FUNCTION_TABLE {.bycopy.} = object
    InitializePackage: pointer
    LogonUserA: pointer
    CallPackage: pointer
    LogonTerminated: pointer
    CallPackageUntrusted: pointer
    CallPackagePassthrough: pointer
    LogonUserExA: pointer
    LogonUserEx2: pointer
    Initialize: pointer
    Shutdown: pointer
    GetInfo: pointer
    AcceptCredentials: pointer
    AcquireCredentialsHandleA: pointer
    QueryCredentialsAttributesA: pointer
    FreeCredentialsHandle: pointer
    SaveCredentials: pointer
    GetCredentials: pointer
    DeleteCredentials: pointer
    InitLsaModeContext: pointer
    AcceptLsaModeContext: pointer
    DeleteContext: pointer
    ApplyControlToken: pointer
    GetUserInfo: pointer
    GetExtendedInformation: pointer
    QueryContextAttributesA: pointer
    AddCredentialsA: pointer
    SetExtendedInformation: pointer
    SetContextAttributesA: pointer
    SetCredentialsAttributesA: pointer
    ChangeAccountPasswordA: pointer
    QueryMetaData: pointer
    ExchangeMetaData: pointer
    GetCredUIContext: pointer
    UpdateCredentials: pointer
    ValidateTargetInfo: pointer
    PostLogonUser: pointer
    GetRemoteCredGuardLogonBuffer: pointer
    GetRemoteCredGuardSupplementalCreds: pointer
    GetTbalSupplementalCreds: pointer
    LogonUserEx3: pointer
    PreLogonUserSurrogate: pointer
    PostLogonUserSurrogate: pointer
    ExtractTargetInfo: pointer
struct SECPKG_FUNCTION_TABLE
{
    void* InitializePackage;
    void* LogonUserA;
    void* CallPackage;
    void* LogonTerminated;
    void* CallPackageUntrusted;
    void* CallPackagePassthrough;
    void* LogonUserExA;
    void* LogonUserEx2;
    void* Initialize;
    void* Shutdown;
    void* GetInfo;
    void* AcceptCredentials;
    void* AcquireCredentialsHandleA;
    void* QueryCredentialsAttributesA;
    void* FreeCredentialsHandle;
    void* SaveCredentials;
    void* GetCredentials;
    void* DeleteCredentials;
    void* InitLsaModeContext;
    void* AcceptLsaModeContext;
    void* DeleteContext;
    void* ApplyControlToken;
    void* GetUserInfo;
    void* GetExtendedInformation;
    void* QueryContextAttributesA;
    void* AddCredentialsA;
    void* SetExtendedInformation;
    void* SetContextAttributesA;
    void* SetCredentialsAttributesA;
    void* ChangeAccountPasswordA;
    void* QueryMetaData;
    void* ExchangeMetaData;
    void* GetCredUIContext;
    void* UpdateCredentials;
    void* ValidateTargetInfo;
    void* PostLogonUser;
    void* GetRemoteCredGuardLogonBuffer;
    void* GetRemoteCredGuardSupplementalCreds;
    void* GetTbalSupplementalCreds;
    void* LogonUserEx3;
    void* PreLogonUserSurrogate;
    void* PostLogonUserSurrogate;
    void* ExtractTargetInfo;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; SECPKG_FUNCTION_TABLE サイズ: 172 バイト(x86)
dim st, 43    ; 4byte整数×43(構造体サイズ 172 / 4 切り上げ)
; InitializePackage : PLSA_AP_INITIALIZE_PACKAGE (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; LogonUserA : PLSA_AP_LOGON_USER (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; CallPackage : PLSA_AP_CALL_PACKAGE (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; LogonTerminated : PLSA_AP_LOGON_TERMINATED (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; CallPackageUntrusted : PLSA_AP_CALL_PACKAGE (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; CallPackagePassthrough : PLSA_AP_CALL_PACKAGE_PASSTHROUGH (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; LogonUserExA : PLSA_AP_LOGON_USER_EX (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; LogonUserEx2 : PLSA_AP_LOGON_USER_EX2 (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; Initialize : SpInitializeFn (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; Shutdown : SpShutdownFn (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; GetInfo : SpGetInfoFn (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; AcceptCredentials : SpAcceptCredentialsFn (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; AcquireCredentialsHandleA : SpAcquireCredentialsHandleFn (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; QueryCredentialsAttributesA : SpQueryCredentialsAttributesFn (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; FreeCredentialsHandle : SpFreeCredentialsHandleFn (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; SaveCredentials : SpSaveCredentialsFn (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; GetCredentials : SpGetCredentialsFn (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; DeleteCredentials : SpDeleteCredentialsFn (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; InitLsaModeContext : SpInitLsaModeContextFn (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; AcceptLsaModeContext : SpAcceptLsaModeContextFn (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; DeleteContext : SpDeleteContextFn (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; ApplyControlToken : SpApplyControlTokenFn (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; GetUserInfo : SpGetUserInfoFn (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; GetExtendedInformation : SpGetExtendedInformationFn (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; QueryContextAttributesA : SpQueryContextAttributesFn (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; AddCredentialsA : SpAddCredentialsFn (+100, 4byte)  st.25 = 値  /  値 = st.25   (lpoke/lpeek も可)
; SetExtendedInformation : SpSetExtendedInformationFn (+104, 4byte)  st.26 = 値  /  値 = st.26   (lpoke/lpeek も可)
; SetContextAttributesA : SpSetContextAttributesFn (+108, 4byte)  st.27 = 値  /  値 = st.27   (lpoke/lpeek も可)
; SetCredentialsAttributesA : SpSetCredentialsAttributesFn (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; ChangeAccountPasswordA : SpChangeAccountPasswordFn (+116, 4byte)  st.29 = 値  /  値 = st.29   (lpoke/lpeek も可)
; QueryMetaData : SpQueryMetaDataFn (+120, 4byte)  st.30 = 値  /  値 = st.30   (lpoke/lpeek も可)
; ExchangeMetaData : SpExchangeMetaDataFn (+124, 4byte)  st.31 = 値  /  値 = st.31   (lpoke/lpeek も可)
; GetCredUIContext : SpGetCredUIContextFn (+128, 4byte)  st.32 = 値  /  値 = st.32   (lpoke/lpeek も可)
; UpdateCredentials : SpUpdateCredentialsFn (+132, 4byte)  st.33 = 値  /  値 = st.33   (lpoke/lpeek も可)
; ValidateTargetInfo : SpValidateTargetInfoFn (+136, 4byte)  st.34 = 値  /  値 = st.34   (lpoke/lpeek も可)
; PostLogonUser : LSA_AP_POST_LOGON_USER (+140, 4byte)  st.35 = 値  /  値 = st.35   (lpoke/lpeek も可)
; GetRemoteCredGuardLogonBuffer : SpGetRemoteCredGuardLogonBufferFn (+144, 4byte)  st.36 = 値  /  値 = st.36   (lpoke/lpeek も可)
; GetRemoteCredGuardSupplementalCreds : SpGetRemoteCredGuardSupplementalCredsFn (+148, 4byte)  st.37 = 値  /  値 = st.37   (lpoke/lpeek も可)
; GetTbalSupplementalCreds : SpGetTbalSupplementalCredsFn (+152, 4byte)  st.38 = 値  /  値 = st.38   (lpoke/lpeek も可)
; LogonUserEx3 : PLSA_AP_LOGON_USER_EX3 (+156, 4byte)  st.39 = 値  /  値 = st.39   (lpoke/lpeek も可)
; PreLogonUserSurrogate : PLSA_AP_PRE_LOGON_USER_SURROGATE (+160, 4byte)  st.40 = 値  /  値 = st.40   (lpoke/lpeek も可)
; PostLogonUserSurrogate : PLSA_AP_POST_LOGON_USER_SURROGATE (+164, 4byte)  st.41 = 値  /  値 = st.41   (lpoke/lpeek も可)
; ExtractTargetInfo : SpExtractTargetInfoFn (+168, 4byte)  st.42 = 値  /  値 = st.42   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; SECPKG_FUNCTION_TABLE サイズ: 344 バイト(x64)
dim st, 86    ; 4byte整数×86(構造体サイズ 344 / 4 切り上げ)
; InitializePackage : PLSA_AP_INITIALIZE_PACKAGE (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; LogonUserA : PLSA_AP_LOGON_USER (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; CallPackage : PLSA_AP_CALL_PACKAGE (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; LogonTerminated : PLSA_AP_LOGON_TERMINATED (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; CallPackageUntrusted : PLSA_AP_CALL_PACKAGE (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; CallPackagePassthrough : PLSA_AP_CALL_PACKAGE_PASSTHROUGH (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; LogonUserExA : PLSA_AP_LOGON_USER_EX (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; LogonUserEx2 : PLSA_AP_LOGON_USER_EX2 (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; Initialize : SpInitializeFn (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; Shutdown : SpShutdownFn (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; GetInfo : SpGetInfoFn (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; AcceptCredentials : SpAcceptCredentialsFn (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; AcquireCredentialsHandleA : SpAcquireCredentialsHandleFn (+96, 8byte)  qpoke st,96,値 / qpeek(st,96)  ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; QueryCredentialsAttributesA : SpQueryCredentialsAttributesFn (+104, 8byte)  qpoke st,104,値 / qpeek(st,104)  ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; FreeCredentialsHandle : SpFreeCredentialsHandleFn (+112, 8byte)  qpoke st,112,値 / qpeek(st,112)  ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; SaveCredentials : SpSaveCredentialsFn (+120, 8byte)  qpoke st,120,値 / qpeek(st,120)  ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; GetCredentials : SpGetCredentialsFn (+128, 8byte)  qpoke st,128,値 / qpeek(st,128)  ※IronHSPのみ。3.7/3.8は lpoke st,128,下位 : lpoke st,132,上位
; DeleteCredentials : SpDeleteCredentialsFn (+136, 8byte)  qpoke st,136,値 / qpeek(st,136)  ※IronHSPのみ。3.7/3.8は lpoke st,136,下位 : lpoke st,140,上位
; InitLsaModeContext : SpInitLsaModeContextFn (+144, 8byte)  qpoke st,144,値 / qpeek(st,144)  ※IronHSPのみ。3.7/3.8は lpoke st,144,下位 : lpoke st,148,上位
; AcceptLsaModeContext : SpAcceptLsaModeContextFn (+152, 8byte)  qpoke st,152,値 / qpeek(st,152)  ※IronHSPのみ。3.7/3.8は lpoke st,152,下位 : lpoke st,156,上位
; DeleteContext : SpDeleteContextFn (+160, 8byte)  qpoke st,160,値 / qpeek(st,160)  ※IronHSPのみ。3.7/3.8は lpoke st,160,下位 : lpoke st,164,上位
; ApplyControlToken : SpApplyControlTokenFn (+168, 8byte)  qpoke st,168,値 / qpeek(st,168)  ※IronHSPのみ。3.7/3.8は lpoke st,168,下位 : lpoke st,172,上位
; GetUserInfo : SpGetUserInfoFn (+176, 8byte)  qpoke st,176,値 / qpeek(st,176)  ※IronHSPのみ。3.7/3.8は lpoke st,176,下位 : lpoke st,180,上位
; GetExtendedInformation : SpGetExtendedInformationFn (+184, 8byte)  qpoke st,184,値 / qpeek(st,184)  ※IronHSPのみ。3.7/3.8は lpoke st,184,下位 : lpoke st,188,上位
; QueryContextAttributesA : SpQueryContextAttributesFn (+192, 8byte)  qpoke st,192,値 / qpeek(st,192)  ※IronHSPのみ。3.7/3.8は lpoke st,192,下位 : lpoke st,196,上位
; AddCredentialsA : SpAddCredentialsFn (+200, 8byte)  qpoke st,200,値 / qpeek(st,200)  ※IronHSPのみ。3.7/3.8は lpoke st,200,下位 : lpoke st,204,上位
; SetExtendedInformation : SpSetExtendedInformationFn (+208, 8byte)  qpoke st,208,値 / qpeek(st,208)  ※IronHSPのみ。3.7/3.8は lpoke st,208,下位 : lpoke st,212,上位
; SetContextAttributesA : SpSetContextAttributesFn (+216, 8byte)  qpoke st,216,値 / qpeek(st,216)  ※IronHSPのみ。3.7/3.8は lpoke st,216,下位 : lpoke st,220,上位
; SetCredentialsAttributesA : SpSetCredentialsAttributesFn (+224, 8byte)  qpoke st,224,値 / qpeek(st,224)  ※IronHSPのみ。3.7/3.8は lpoke st,224,下位 : lpoke st,228,上位
; ChangeAccountPasswordA : SpChangeAccountPasswordFn (+232, 8byte)  qpoke st,232,値 / qpeek(st,232)  ※IronHSPのみ。3.7/3.8は lpoke st,232,下位 : lpoke st,236,上位
; QueryMetaData : SpQueryMetaDataFn (+240, 8byte)  qpoke st,240,値 / qpeek(st,240)  ※IronHSPのみ。3.7/3.8は lpoke st,240,下位 : lpoke st,244,上位
; ExchangeMetaData : SpExchangeMetaDataFn (+248, 8byte)  qpoke st,248,値 / qpeek(st,248)  ※IronHSPのみ。3.7/3.8は lpoke st,248,下位 : lpoke st,252,上位
; GetCredUIContext : SpGetCredUIContextFn (+256, 8byte)  qpoke st,256,値 / qpeek(st,256)  ※IronHSPのみ。3.7/3.8は lpoke st,256,下位 : lpoke st,260,上位
; UpdateCredentials : SpUpdateCredentialsFn (+264, 8byte)  qpoke st,264,値 / qpeek(st,264)  ※IronHSPのみ。3.7/3.8は lpoke st,264,下位 : lpoke st,268,上位
; ValidateTargetInfo : SpValidateTargetInfoFn (+272, 8byte)  qpoke st,272,値 / qpeek(st,272)  ※IronHSPのみ。3.7/3.8は lpoke st,272,下位 : lpoke st,276,上位
; PostLogonUser : LSA_AP_POST_LOGON_USER (+280, 8byte)  qpoke st,280,値 / qpeek(st,280)  ※IronHSPのみ。3.7/3.8は lpoke st,280,下位 : lpoke st,284,上位
; GetRemoteCredGuardLogonBuffer : SpGetRemoteCredGuardLogonBufferFn (+288, 8byte)  qpoke st,288,値 / qpeek(st,288)  ※IronHSPのみ。3.7/3.8は lpoke st,288,下位 : lpoke st,292,上位
; GetRemoteCredGuardSupplementalCreds : SpGetRemoteCredGuardSupplementalCredsFn (+296, 8byte)  qpoke st,296,値 / qpeek(st,296)  ※IronHSPのみ。3.7/3.8は lpoke st,296,下位 : lpoke st,300,上位
; GetTbalSupplementalCreds : SpGetTbalSupplementalCredsFn (+304, 8byte)  qpoke st,304,値 / qpeek(st,304)  ※IronHSPのみ。3.7/3.8は lpoke st,304,下位 : lpoke st,308,上位
; LogonUserEx3 : PLSA_AP_LOGON_USER_EX3 (+312, 8byte)  qpoke st,312,値 / qpeek(st,312)  ※IronHSPのみ。3.7/3.8は lpoke st,312,下位 : lpoke st,316,上位
; PreLogonUserSurrogate : PLSA_AP_PRE_LOGON_USER_SURROGATE (+320, 8byte)  qpoke st,320,値 / qpeek(st,320)  ※IronHSPのみ。3.7/3.8は lpoke st,320,下位 : lpoke st,324,上位
; PostLogonUserSurrogate : PLSA_AP_POST_LOGON_USER_SURROGATE (+328, 8byte)  qpoke st,328,値 / qpeek(st,328)  ※IronHSPのみ。3.7/3.8は lpoke st,328,下位 : lpoke st,332,上位
; ExtractTargetInfo : SpExtractTargetInfoFn (+336, 8byte)  qpoke st,336,値 / qpeek(st,336)  ※IronHSPのみ。3.7/3.8は lpoke st,336,下位 : lpoke st,340,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global SECPKG_FUNCTION_TABLE
    #field intptr InitializePackage
    #field intptr LogonUserA
    #field intptr CallPackage
    #field intptr LogonTerminated
    #field intptr CallPackageUntrusted
    #field intptr CallPackagePassthrough
    #field intptr LogonUserExA
    #field intptr LogonUserEx2
    #field intptr Initialize
    #field intptr Shutdown
    #field intptr GetInfo
    #field intptr AcceptCredentials
    #field intptr AcquireCredentialsHandleA
    #field intptr QueryCredentialsAttributesA
    #field intptr FreeCredentialsHandle
    #field intptr SaveCredentials
    #field intptr GetCredentials
    #field intptr DeleteCredentials
    #field intptr InitLsaModeContext
    #field intptr AcceptLsaModeContext
    #field intptr DeleteContext
    #field intptr ApplyControlToken
    #field intptr GetUserInfo
    #field intptr GetExtendedInformation
    #field intptr QueryContextAttributesA
    #field intptr AddCredentialsA
    #field intptr SetExtendedInformation
    #field intptr SetContextAttributesA
    #field intptr SetCredentialsAttributesA
    #field intptr ChangeAccountPasswordA
    #field intptr QueryMetaData
    #field intptr ExchangeMetaData
    #field intptr GetCredUIContext
    #field intptr UpdateCredentials
    #field intptr ValidateTargetInfo
    #field intptr PostLogonUser
    #field intptr GetRemoteCredGuardLogonBuffer
    #field intptr GetRemoteCredGuardSupplementalCreds
    #field intptr GetTbalSupplementalCreds
    #field intptr LogonUserEx3
    #field intptr PreLogonUserSurrogate
    #field intptr PostLogonUserSurrogate
    #field intptr ExtractTargetInfo
#endstruct

stdim st, SECPKG_FUNCTION_TABLE        ; NSTRUCT 変数を確保