ホーム › Security.Authentication.Identity › SECPKG_FUNCTION_TABLE
SECPKG_FUNCTION_TABLE
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| InitializePackage | PLSA_AP_INITIALIZE_PACKAGE | 8/4 | +0 | +0 | 認証パッケージを初期化するLSA APIへのポインタ。 |
| LogonUserA | PLSA_AP_LOGON_USER | 8/4 | +8 | +4 | ANSI版のユーザーログオン処理関数へのポインタ。 |
| CallPackage | PLSA_AP_CALL_PACKAGE | 8/4 | +16 | +8 | パッケージを呼び出す関数へのポインタ。 |
| LogonTerminated | PLSA_AP_LOGON_TERMINATED | 8/4 | +24 | +12 | ログオン終了通知を処理する関数へのポインタ。 |
| CallPackageUntrusted | PLSA_AP_CALL_PACKAGE | 8/4 | +32 | +16 | 信頼されないクライアントからのパッケージ呼び出し関数へのポインタ。 |
| CallPackagePassthrough | PLSA_AP_CALL_PACKAGE_PASSTHROUGH | 8/4 | +40 | +20 | パススルー呼び出しを処理する関数へのポインタ。 |
| LogonUserExA | PLSA_AP_LOGON_USER_EX | 8/4 | +48 | +24 | 拡張版ANSIユーザーログオン関数へのポインタ。 |
| LogonUserEx2 | PLSA_AP_LOGON_USER_EX2 | 8/4 | +56 | +28 | バージョン2の拡張ユーザーログオン関数へのポインタ。 |
| Initialize | SpInitializeFn | 8/4 | +64 | +32 | セキュリティパッケージを初期化するSSPI関数へのポインタ。 |
| Shutdown | SpShutdownFn | 8/4 | +72 | +36 | パッケージを終了させる関数へのポインタ。 |
| GetInfo | SpGetInfoFn | 8/4 | +80 | +40 | パッケージ情報を取得する関数へのポインタ。 |
| AcceptCredentials | SpAcceptCredentialsFn | 8/4 | +88 | +44 | 資格情報を受け入れる関数へのポインタ。 |
| AcquireCredentialsHandleA | SpAcquireCredentialsHandleFn | 8/4 | +96 | +48 | ANSI版で資格情報ハンドルを取得する関数へのポインタ。 |
| QueryCredentialsAttributesA | SpQueryCredentialsAttributesFn | 8/4 | +104 | +52 | 資格情報属性を照会するANSI関数へのポインタ。 |
| FreeCredentialsHandle | SpFreeCredentialsHandleFn | 8/4 | +112 | +56 | 資格情報ハンドルを解放する関数へのポインタ。 |
| SaveCredentials | SpSaveCredentialsFn | 8/4 | +120 | +60 | 資格情報を保存する関数へのポインタ。 |
| GetCredentials | SpGetCredentialsFn | 8/4 | +128 | +64 | 資格情報を取得する関数へのポインタ。 |
| DeleteCredentials | SpDeleteCredentialsFn | 8/4 | +136 | +68 | 資格情報を削除する関数へのポインタ。 |
| InitLsaModeContext | SpInitLsaModeContextFn | 8/4 | +144 | +72 | LSAモードのセキュリティコンテキストを初期化する関数へのポインタ。 |
| AcceptLsaModeContext | SpAcceptLsaModeContextFn | 8/4 | +152 | +76 | LSAモードのコンテキストを受け入れる関数へのポインタ。 |
| DeleteContext | SpDeleteContextFn | 8/4 | +160 | +80 | セキュリティコンテキストを削除する関数へのポインタ。 |
| ApplyControlToken | SpApplyControlTokenFn | 8/4 | +168 | +84 | 制御トークンをコンテキストに適用する関数へのポインタ。 |
| GetUserInfo | SpGetUserInfoFn | 8/4 | +176 | +88 | ユーザー情報を取得する関数へのポインタ。 |
| GetExtendedInformation | SpGetExtendedInformationFn | 8/4 | +184 | +92 | 拡張情報を取得する関数へのポインタ。 |
| QueryContextAttributesA | SpQueryContextAttributesFn | 8/4 | +192 | +96 | コンテキスト属性を照会するANSI関数へのポインタ。 |
| AddCredentialsA | SpAddCredentialsFn | 8/4 | +200 | +100 | 資格情報を追加するANSI関数へのポインタ。 |
| SetExtendedInformation | SpSetExtendedInformationFn | 8/4 | +208 | +104 | 拡張情報を設定する関数へのポインタ。 |
| SetContextAttributesA | SpSetContextAttributesFn | 8/4 | +216 | +108 | コンテキスト属性を設定するANSI関数へのポインタ。 |
| SetCredentialsAttributesA | SpSetCredentialsAttributesFn | 8/4 | +224 | +112 | 資格情報属性を設定するANSI関数へのポインタ。 |
| ChangeAccountPasswordA | SpChangeAccountPasswordFn | 8/4 | +232 | +116 | アカウントパスワードを変更するANSI関数へのポインタ。 |
| QueryMetaData | SpQueryMetaDataFn | 8/4 | +240 | +120 | メタデータを照会する関数へのポインタ。 |
| ExchangeMetaData | SpExchangeMetaDataFn | 8/4 | +248 | +124 | メタデータを交換する関数へのポインタ。 |
| GetCredUIContext | SpGetCredUIContextFn | 8/4 | +256 | +128 | 資格情報UIコンテキストを取得する関数へのポインタ。 |
| UpdateCredentials | SpUpdateCredentialsFn | 8/4 | +264 | +132 | 資格情報を更新する関数へのポインタ。 |
| ValidateTargetInfo | SpValidateTargetInfoFn | 8/4 | +272 | +136 | ターゲット情報を検証する関数へのポインタ。 |
| PostLogonUser | LSA_AP_POST_LOGON_USER | 8/4 | +280 | +140 | ログオン後処理を行う関数へのポインタ。 |
| GetRemoteCredGuardLogonBuffer | SpGetRemoteCredGuardLogonBufferFn | 8/4 | +288 | +144 | リモートCredential Guard用ログオンバッファを取得する関数へのポインタ。 |
| GetRemoteCredGuardSupplementalCreds | SpGetRemoteCredGuardSupplementalCredsFn | 8/4 | +296 | +148 | リモートCredential Guard用補助資格情報を取得する関数へのポインタ。 |
| GetTbalSupplementalCreds | SpGetTbalSupplementalCredsFn | 8/4 | +304 | +152 | TBAL用補助資格情報を取得する関数へのポインタ。 |
| LogonUserEx3 | PLSA_AP_LOGON_USER_EX3 | 8/4 | +312 | +156 | バージョン3の拡張ユーザーログオン関数へのポインタ。 |
| PreLogonUserSurrogate | PLSA_AP_PRE_LOGON_USER_SURROGATE | 8/4 | +320 | +160 | 代理ログオン前処理を行う関数へのポインタ。 |
| PostLogonUserSurrogate | PLSA_AP_POST_LOGON_USER_SURROGATE | 8/4 | +328 | +164 | 代理ログオン後処理を行う関数へのポインタ。 |
| ExtractTargetInfo | SpExtractTargetInfoFn | 8/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 Structureimport 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: pointerstruct 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 変数を確保