ホーム › Security.Authentication.Identity › LSA_SECPKG_FUNCTION_TABLE
LSA_SECPKG_FUNCTION_TABLE
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| CreateLogonSession | PLSA_CREATE_LOGON_SESSION | 8/4 | +0 | +0 | ログオンセッションを作成するLSAディスパッチ関数へのポインタ。 |
| DeleteLogonSession | PLSA_DELETE_LOGON_SESSION | 8/4 | +8 | +4 | ログオンセッションを削除するLSA関数へのポインタ。 |
| AddCredential | PLSA_ADD_CREDENTIAL | 8/4 | +16 | +8 | 資格情報を追加するLSA関数へのポインタ。 |
| GetCredentials | PLSA_GET_CREDENTIALS | 8/4 | +24 | +12 | 資格情報を取得するLSA関数へのポインタ。 |
| DeleteCredential | PLSA_DELETE_CREDENTIAL | 8/4 | +32 | +16 | 資格情報を削除するLSA関数へのポインタ。 |
| AllocateLsaHeap | PLSA_ALLOCATE_LSA_HEAP | 8/4 | +40 | +20 | LSAヒープからメモリを割り当てる関数へのポインタ。 |
| FreeLsaHeap | PLSA_FREE_LSA_HEAP | 8/4 | +48 | +24 | LSAヒープのメモリを解放する関数へのポインタ。 |
| AllocateClientBuffer | PLSA_ALLOCATE_CLIENT_BUFFER | 8/4 | +56 | +28 | クライアントプロセス側にバッファを割り当てる関数へのポインタ。 |
| FreeClientBuffer | PLSA_FREE_CLIENT_BUFFER | 8/4 | +64 | +32 | クライアント側バッファを解放する関数へのポインタ。 |
| CopyToClientBuffer | PLSA_COPY_TO_CLIENT_BUFFER | 8/4 | +72 | +36 | クライアント側バッファへデータをコピーする関数へのポインタ。 |
| CopyFromClientBuffer | PLSA_COPY_FROM_CLIENT_BUFFER | 8/4 | +80 | +40 | クライアント側バッファからデータをコピーする関数へのポインタ。 |
| ImpersonateClient | PLSA_IMPERSONATE_CLIENT | 8/4 | +88 | +44 | 呼び出し元クライアントを偽装する関数へのポインタ。 |
| UnloadPackage | PLSA_UNLOAD_PACKAGE | 8/4 | +96 | +48 | セキュリティパッケージをアンロードする関数へのポインタ。 |
| DuplicateHandle | PLSA_DUPLICATE_HANDLE | 8/4 | +104 | +52 | ハンドルを複製する関数へのポインタ。 |
| SaveSupplementalCredentials | PLSA_SAVE_SUPPLEMENTAL_CREDENTIALS | 8/4 | +112 | +56 | 補助資格情報を保存する関数へのポインタ。 |
| CreateThread | PLSA_CREATE_THREAD | 8/4 | +120 | +60 | LSA内でスレッドを作成する関数へのポインタ。 |
| GetClientInfo | PLSA_GET_CLIENT_INFO | 8/4 | +128 | +64 | 呼び出し元クライアントの情報を取得する関数へのポインタ。 |
| RegisterNotification | PLSA_REGISTER_NOTIFICATION | 8/4 | +136 | +68 | 通知を登録する関数へのポインタ。 |
| CancelNotification | PLSA_CANCEL_NOTIFICATION | 8/4 | +144 | +72 | 登録済み通知を取り消す関数へのポインタ。 |
| MapBuffer | PLSA_MAP_BUFFER | 8/4 | +152 | +76 | バッファをアドレス空間にマップする関数へのポインタ。 |
| CreateToken | PLSA_CREATE_TOKEN | 8/4 | +160 | +80 | アクセストークンを作成する関数へのポインタ。 |
| AuditLogon | PLSA_AUDIT_LOGON | 8/4 | +168 | +84 | ログオン監査を記録する関数へのポインタ。 |
| CallPackage | PLSA_CALL_PACKAGE | 8/4 | +176 | +88 | 他のセキュリティパッケージを呼び出す関数へのポインタ。 |
| FreeReturnBuffer | PLSA_FREE_LSA_HEAP | 8/4 | +184 | +92 | 返却バッファを解放する関数へのポインタ。実体はFreeLsaHeapと同型。 |
| GetCallInfo | PLSA_GET_CALL_INFO | 8/4 | +192 | +96 | 現在の呼び出しに関する情報を取得する関数へのポインタ。 |
| CallPackageEx | PLSA_CALL_PACKAGEEX | 8/4 | +200 | +100 | 拡張版のパッケージ呼び出し関数へのポインタ。 |
| CreateSharedMemory | PLSA_CREATE_SHARED_MEMORY | 8/4 | +208 | +104 | 共有メモリ領域を作成する関数へのポインタ。 |
| AllocateSharedMemory | PLSA_ALLOCATE_SHARED_MEMORY | 8/4 | +216 | +108 | 共有メモリを割り当てる関数へのポインタ。 |
| FreeSharedMemory | PLSA_FREE_SHARED_MEMORY | 8/4 | +224 | +112 | 共有メモリを解放する関数へのポインタ。 |
| DeleteSharedMemory | PLSA_DELETE_SHARED_MEMORY | 8/4 | +232 | +116 | 共有メモリ領域を削除する関数へのポインタ。 |
| OpenSamUser | PLSA_OPEN_SAM_USER | 8/4 | +240 | +120 | SAMユーザーオブジェクトを開く関数へのポインタ。 |
| GetUserCredentials | PLSA_GET_USER_CREDENTIALS | 8/4 | +248 | +124 | SAMユーザーの資格情報を取得する関数へのポインタ。 |
| GetUserAuthData | PLSA_GET_USER_AUTH_DATA | 8/4 | +256 | +128 | ユーザーの認証データを取得する関数へのポインタ。 |
| CloseSamUser | PLSA_CLOSE_SAM_USER | 8/4 | +264 | +132 | 開いたSAMユーザーを閉じる関数へのポインタ。 |
| ConvertAuthDataToToken | PLSA_CONVERT_AUTH_DATA_TO_TOKEN | 8/4 | +272 | +136 | 認証データをアクセストークンへ変換する関数へのポインタ。 |
| ClientCallback | PLSA_CLIENT_CALLBACK | 8/4 | +280 | +140 | クライアント側コールバックを呼び出す関数へのポインタ。 |
| UpdateCredentials | PLSA_UPDATE_PRIMARY_CREDENTIALS | 8/4 | +288 | +144 | プライマリ資格情報を更新する関数へのポインタ。 |
| GetAuthDataForUser | PLSA_GET_AUTH_DATA_FOR_USER | 8/4 | +296 | +148 | 指定ユーザーの認証データを取得する関数へのポインタ。 |
| CrackSingleName | PLSA_CRACK_SINGLE_NAME | 8/4 | +304 | +152 | 単一名を別形式に変換する関数へのポインタ。 |
| AuditAccountLogon | PLSA_AUDIT_ACCOUNT_LOGON | 8/4 | +312 | +156 | アカウントログオン監査を記録する関数へのポインタ。 |
| CallPackagePassthrough | PLSA_CALL_PACKAGE_PASSTHROUGH | 8/4 | +320 | +160 | パススルー方式でパッケージを呼び出す関数へのポインタ。 |
| CrediRead | CredReadFn | 8/4 | +328 | +164 | 資格情報マネージャから資格情報を読み取る関数へのポインタ。 |
| CrediReadDomainCredentials | CredReadDomainCredentialsFn | 8/4 | +336 | +168 | ドメイン資格情報を読み取る関数へのポインタ。 |
| CrediFreeCredentials | CredFreeCredentialsFn | 8/4 | +344 | +172 | 読み取った資格情報を解放する関数へのポインタ。 |
| LsaProtectMemory | PLSA_PROTECT_MEMORY | 8/4 | +352 | +176 | メモリ内容を暗号化保護する関数へのポインタ。 |
| LsaUnprotectMemory | PLSA_PROTECT_MEMORY | 8/4 | +360 | +180 | 保護されたメモリ内容を復号する関数へのポインタ。 |
| OpenTokenByLogonId | PLSA_OPEN_TOKEN_BY_LOGON_ID | 8/4 | +368 | +184 | ログオンIDからトークンを開く関数へのポインタ。 |
| ExpandAuthDataForDomain | PLSA_EXPAND_AUTH_DATA_FOR_DOMAIN | 8/4 | +376 | +188 | ドメイン向けに認証データを展開する関数へのポインタ。 |
| AllocatePrivateHeap | PLSA_ALLOCATE_PRIVATE_HEAP | 8/4 | +384 | +192 | プライベートヒープからメモリを割り当てる関数へのポインタ。 |
| FreePrivateHeap | PLSA_FREE_PRIVATE_HEAP | 8/4 | +392 | +196 | プライベートヒープのメモリを解放する関数へのポインタ。 |
| CreateTokenEx | PLSA_CREATE_TOKEN_EX | 8/4 | +400 | +200 | 拡張版のトークン作成関数へのポインタ。 |
| CrediWrite | CredWriteFn | 8/4 | +408 | +204 | 資格情報マネージャへ資格情報を書き込む関数へのポインタ。 |
| CrediUnmarshalandDecodeString | CrediUnmarshalandDecodeStringFn | 8/4 | +416 | +208 | マーシャル済み文字列を展開・復号する関数へのポインタ。 |
| DummyFunction6 | PLSA_PROTECT_MEMORY | 8/4 | +424 | +212 | 将来の拡張用に予約されたダミー関数ポインタ。 |
| GetExtendedCallFlags | PLSA_GET_EXTENDED_CALL_FLAGS | 8/4 | +432 | +216 | 拡張呼び出しフラグを取得する関数へのポインタ。 |
| DuplicateTokenHandle | PLSA_DUPLICATE_HANDLE | 8/4 | +440 | +220 | トークンハンドルを複製する関数へのポインタ。 |
| GetServiceAccountPassword | PLSA_GET_SERVICE_ACCOUNT_PASSWORD | 8/4 | +448 | +224 | サービスアカウントのパスワードを取得する関数へのポインタ。 |
| DummyFunction7 | PLSA_PROTECT_MEMORY | 8/4 | +456 | +228 | 将来の拡張用に予約されたダミー関数ポインタ。 |
| AuditLogonEx | PLSA_AUDIT_LOGON_EX | 8/4 | +464 | +232 | 拡張版のログオン監査関数へのポインタ。 |
| CheckProtectedUserByToken | PLSA_CHECK_PROTECTED_USER_BY_TOKEN | 8/4 | +472 | +236 | トークンが保護されたユーザーか確認する関数へのポインタ。 |
| QueryClientRequest | PLSA_QUERY_CLIENT_REQUEST | 8/4 | +480 | +240 | クライアント要求を照会する関数へのポインタ。 |
| GetAppModeInfo | PLSA_GET_APP_MODE_INFO | 8/4 | +488 | +244 | アプリコンテナモード情報を取得する関数へのポインタ。 |
| SetAppModeInfo | PLSA_SET_APP_MODE_INFO | 8/4 | +496 | +248 | アプリコンテナモード情報を設定する関数へのポインタ。 |
| GetClientInfoEx | PLSA_GET_CLIENT_INFO_EX | 8/4 | +504 | +252 | 拡張版のクライアント情報取得関数へのポインタ。 |
| GetSecpkgFailureReason | PLSA_GET_SECPKG_FAILURE_REASON | 8/4 | +512 | +256 | パッケージの失敗理由を取得する関数へのポインタ。 |
| SetSecpkgFailureReason | PLSA_SET_SECPKG_FAILURE_REASON | 8/4 | +520 | +260 | パッケージの失敗理由を設定する関数へのポインタ。 |
各言語での定義
#include <windows.h>
// LSA_SECPKG_FUNCTION_TABLE (x64 528 / x86 264 バイト)
typedef struct LSA_SECPKG_FUNCTION_TABLE {
PLSA_CREATE_LOGON_SESSION CreateLogonSession;
PLSA_DELETE_LOGON_SESSION DeleteLogonSession;
PLSA_ADD_CREDENTIAL AddCredential;
PLSA_GET_CREDENTIALS GetCredentials;
PLSA_DELETE_CREDENTIAL DeleteCredential;
PLSA_ALLOCATE_LSA_HEAP AllocateLsaHeap;
PLSA_FREE_LSA_HEAP FreeLsaHeap;
PLSA_ALLOCATE_CLIENT_BUFFER AllocateClientBuffer;
PLSA_FREE_CLIENT_BUFFER FreeClientBuffer;
PLSA_COPY_TO_CLIENT_BUFFER CopyToClientBuffer;
PLSA_COPY_FROM_CLIENT_BUFFER CopyFromClientBuffer;
PLSA_IMPERSONATE_CLIENT ImpersonateClient;
PLSA_UNLOAD_PACKAGE UnloadPackage;
PLSA_DUPLICATE_HANDLE DuplicateHandle;
PLSA_SAVE_SUPPLEMENTAL_CREDENTIALS SaveSupplementalCredentials;
PLSA_CREATE_THREAD CreateThread;
PLSA_GET_CLIENT_INFO GetClientInfo;
PLSA_REGISTER_NOTIFICATION RegisterNotification;
PLSA_CANCEL_NOTIFICATION CancelNotification;
PLSA_MAP_BUFFER MapBuffer;
PLSA_CREATE_TOKEN CreateToken;
PLSA_AUDIT_LOGON AuditLogon;
PLSA_CALL_PACKAGE CallPackage;
PLSA_FREE_LSA_HEAP FreeReturnBuffer;
PLSA_GET_CALL_INFO GetCallInfo;
PLSA_CALL_PACKAGEEX CallPackageEx;
PLSA_CREATE_SHARED_MEMORY CreateSharedMemory;
PLSA_ALLOCATE_SHARED_MEMORY AllocateSharedMemory;
PLSA_FREE_SHARED_MEMORY FreeSharedMemory;
PLSA_DELETE_SHARED_MEMORY DeleteSharedMemory;
PLSA_OPEN_SAM_USER OpenSamUser;
PLSA_GET_USER_CREDENTIALS GetUserCredentials;
PLSA_GET_USER_AUTH_DATA GetUserAuthData;
PLSA_CLOSE_SAM_USER CloseSamUser;
PLSA_CONVERT_AUTH_DATA_TO_TOKEN ConvertAuthDataToToken;
PLSA_CLIENT_CALLBACK ClientCallback;
PLSA_UPDATE_PRIMARY_CREDENTIALS UpdateCredentials;
PLSA_GET_AUTH_DATA_FOR_USER GetAuthDataForUser;
PLSA_CRACK_SINGLE_NAME CrackSingleName;
PLSA_AUDIT_ACCOUNT_LOGON AuditAccountLogon;
PLSA_CALL_PACKAGE_PASSTHROUGH CallPackagePassthrough;
CredReadFn CrediRead;
CredReadDomainCredentialsFn CrediReadDomainCredentials;
CredFreeCredentialsFn CrediFreeCredentials;
PLSA_PROTECT_MEMORY LsaProtectMemory;
PLSA_PROTECT_MEMORY LsaUnprotectMemory;
PLSA_OPEN_TOKEN_BY_LOGON_ID OpenTokenByLogonId;
PLSA_EXPAND_AUTH_DATA_FOR_DOMAIN ExpandAuthDataForDomain;
PLSA_ALLOCATE_PRIVATE_HEAP AllocatePrivateHeap;
PLSA_FREE_PRIVATE_HEAP FreePrivateHeap;
PLSA_CREATE_TOKEN_EX CreateTokenEx;
CredWriteFn CrediWrite;
CrediUnmarshalandDecodeStringFn CrediUnmarshalandDecodeString;
PLSA_PROTECT_MEMORY DummyFunction6;
PLSA_GET_EXTENDED_CALL_FLAGS GetExtendedCallFlags;
PLSA_DUPLICATE_HANDLE DuplicateTokenHandle;
PLSA_GET_SERVICE_ACCOUNT_PASSWORD GetServiceAccountPassword;
PLSA_PROTECT_MEMORY DummyFunction7;
PLSA_AUDIT_LOGON_EX AuditLogonEx;
PLSA_CHECK_PROTECTED_USER_BY_TOKEN CheckProtectedUserByToken;
PLSA_QUERY_CLIENT_REQUEST QueryClientRequest;
PLSA_GET_APP_MODE_INFO GetAppModeInfo;
PLSA_SET_APP_MODE_INFO SetAppModeInfo;
PLSA_GET_CLIENT_INFO_EX GetClientInfoEx;
PLSA_GET_SECPKG_FAILURE_REASON GetSecpkgFailureReason;
PLSA_SET_SECPKG_FAILURE_REASON SetSecpkgFailureReason;
} LSA_SECPKG_FUNCTION_TABLE;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct LSA_SECPKG_FUNCTION_TABLE
{
public IntPtr CreateLogonSession;
public IntPtr DeleteLogonSession;
public IntPtr AddCredential;
public IntPtr GetCredentials;
public IntPtr DeleteCredential;
public IntPtr AllocateLsaHeap;
public IntPtr FreeLsaHeap;
public IntPtr AllocateClientBuffer;
public IntPtr FreeClientBuffer;
public IntPtr CopyToClientBuffer;
public IntPtr CopyFromClientBuffer;
public IntPtr ImpersonateClient;
public IntPtr UnloadPackage;
public IntPtr DuplicateHandle;
public IntPtr SaveSupplementalCredentials;
public IntPtr CreateThread;
public IntPtr GetClientInfo;
public IntPtr RegisterNotification;
public IntPtr CancelNotification;
public IntPtr MapBuffer;
public IntPtr CreateToken;
public IntPtr AuditLogon;
public IntPtr CallPackage;
public IntPtr FreeReturnBuffer;
public IntPtr GetCallInfo;
public IntPtr CallPackageEx;
public IntPtr CreateSharedMemory;
public IntPtr AllocateSharedMemory;
public IntPtr FreeSharedMemory;
public IntPtr DeleteSharedMemory;
public IntPtr OpenSamUser;
public IntPtr GetUserCredentials;
public IntPtr GetUserAuthData;
public IntPtr CloseSamUser;
public IntPtr ConvertAuthDataToToken;
public IntPtr ClientCallback;
public IntPtr UpdateCredentials;
public IntPtr GetAuthDataForUser;
public IntPtr CrackSingleName;
public IntPtr AuditAccountLogon;
public IntPtr CallPackagePassthrough;
public IntPtr CrediRead;
public IntPtr CrediReadDomainCredentials;
public IntPtr CrediFreeCredentials;
public IntPtr LsaProtectMemory;
public IntPtr LsaUnprotectMemory;
public IntPtr OpenTokenByLogonId;
public IntPtr ExpandAuthDataForDomain;
public IntPtr AllocatePrivateHeap;
public IntPtr FreePrivateHeap;
public IntPtr CreateTokenEx;
public IntPtr CrediWrite;
public IntPtr CrediUnmarshalandDecodeString;
public IntPtr DummyFunction6;
public IntPtr GetExtendedCallFlags;
public IntPtr DuplicateTokenHandle;
public IntPtr GetServiceAccountPassword;
public IntPtr DummyFunction7;
public IntPtr AuditLogonEx;
public IntPtr CheckProtectedUserByToken;
public IntPtr QueryClientRequest;
public IntPtr GetAppModeInfo;
public IntPtr SetAppModeInfo;
public IntPtr GetClientInfoEx;
public IntPtr GetSecpkgFailureReason;
public IntPtr SetSecpkgFailureReason;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure LSA_SECPKG_FUNCTION_TABLE
Public CreateLogonSession As IntPtr
Public DeleteLogonSession As IntPtr
Public AddCredential As IntPtr
Public GetCredentials As IntPtr
Public DeleteCredential As IntPtr
Public AllocateLsaHeap As IntPtr
Public FreeLsaHeap As IntPtr
Public AllocateClientBuffer As IntPtr
Public FreeClientBuffer As IntPtr
Public CopyToClientBuffer As IntPtr
Public CopyFromClientBuffer As IntPtr
Public ImpersonateClient As IntPtr
Public UnloadPackage As IntPtr
Public DuplicateHandle As IntPtr
Public SaveSupplementalCredentials As IntPtr
Public CreateThread As IntPtr
Public GetClientInfo As IntPtr
Public RegisterNotification As IntPtr
Public CancelNotification As IntPtr
Public MapBuffer As IntPtr
Public CreateToken As IntPtr
Public AuditLogon As IntPtr
Public CallPackage As IntPtr
Public FreeReturnBuffer As IntPtr
Public GetCallInfo As IntPtr
Public CallPackageEx As IntPtr
Public CreateSharedMemory As IntPtr
Public AllocateSharedMemory As IntPtr
Public FreeSharedMemory As IntPtr
Public DeleteSharedMemory As IntPtr
Public OpenSamUser As IntPtr
Public GetUserCredentials As IntPtr
Public GetUserAuthData As IntPtr
Public CloseSamUser As IntPtr
Public ConvertAuthDataToToken As IntPtr
Public ClientCallback As IntPtr
Public UpdateCredentials As IntPtr
Public GetAuthDataForUser As IntPtr
Public CrackSingleName As IntPtr
Public AuditAccountLogon As IntPtr
Public CallPackagePassthrough As IntPtr
Public CrediRead As IntPtr
Public CrediReadDomainCredentials As IntPtr
Public CrediFreeCredentials As IntPtr
Public LsaProtectMemory As IntPtr
Public LsaUnprotectMemory As IntPtr
Public OpenTokenByLogonId As IntPtr
Public ExpandAuthDataForDomain As IntPtr
Public AllocatePrivateHeap As IntPtr
Public FreePrivateHeap As IntPtr
Public CreateTokenEx As IntPtr
Public CrediWrite As IntPtr
Public CrediUnmarshalandDecodeString As IntPtr
Public DummyFunction6 As IntPtr
Public GetExtendedCallFlags As IntPtr
Public DuplicateTokenHandle As IntPtr
Public GetServiceAccountPassword As IntPtr
Public DummyFunction7 As IntPtr
Public AuditLogonEx As IntPtr
Public CheckProtectedUserByToken As IntPtr
Public QueryClientRequest As IntPtr
Public GetAppModeInfo As IntPtr
Public SetAppModeInfo As IntPtr
Public GetClientInfoEx As IntPtr
Public GetSecpkgFailureReason As IntPtr
Public SetSecpkgFailureReason As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class LSA_SECPKG_FUNCTION_TABLE(ctypes.Structure):
_fields_ = [
("CreateLogonSession", ctypes.c_void_p),
("DeleteLogonSession", ctypes.c_void_p),
("AddCredential", ctypes.c_void_p),
("GetCredentials", ctypes.c_void_p),
("DeleteCredential", ctypes.c_void_p),
("AllocateLsaHeap", ctypes.c_void_p),
("FreeLsaHeap", ctypes.c_void_p),
("AllocateClientBuffer", ctypes.c_void_p),
("FreeClientBuffer", ctypes.c_void_p),
("CopyToClientBuffer", ctypes.c_void_p),
("CopyFromClientBuffer", ctypes.c_void_p),
("ImpersonateClient", ctypes.c_void_p),
("UnloadPackage", ctypes.c_void_p),
("DuplicateHandle", ctypes.c_void_p),
("SaveSupplementalCredentials", ctypes.c_void_p),
("CreateThread", ctypes.c_void_p),
("GetClientInfo", ctypes.c_void_p),
("RegisterNotification", ctypes.c_void_p),
("CancelNotification", ctypes.c_void_p),
("MapBuffer", ctypes.c_void_p),
("CreateToken", ctypes.c_void_p),
("AuditLogon", ctypes.c_void_p),
("CallPackage", ctypes.c_void_p),
("FreeReturnBuffer", ctypes.c_void_p),
("GetCallInfo", ctypes.c_void_p),
("CallPackageEx", ctypes.c_void_p),
("CreateSharedMemory", ctypes.c_void_p),
("AllocateSharedMemory", ctypes.c_void_p),
("FreeSharedMemory", ctypes.c_void_p),
("DeleteSharedMemory", ctypes.c_void_p),
("OpenSamUser", ctypes.c_void_p),
("GetUserCredentials", ctypes.c_void_p),
("GetUserAuthData", ctypes.c_void_p),
("CloseSamUser", ctypes.c_void_p),
("ConvertAuthDataToToken", ctypes.c_void_p),
("ClientCallback", ctypes.c_void_p),
("UpdateCredentials", ctypes.c_void_p),
("GetAuthDataForUser", ctypes.c_void_p),
("CrackSingleName", ctypes.c_void_p),
("AuditAccountLogon", ctypes.c_void_p),
("CallPackagePassthrough", ctypes.c_void_p),
("CrediRead", ctypes.c_void_p),
("CrediReadDomainCredentials", ctypes.c_void_p),
("CrediFreeCredentials", ctypes.c_void_p),
("LsaProtectMemory", ctypes.c_void_p),
("LsaUnprotectMemory", ctypes.c_void_p),
("OpenTokenByLogonId", ctypes.c_void_p),
("ExpandAuthDataForDomain", ctypes.c_void_p),
("AllocatePrivateHeap", ctypes.c_void_p),
("FreePrivateHeap", ctypes.c_void_p),
("CreateTokenEx", ctypes.c_void_p),
("CrediWrite", ctypes.c_void_p),
("CrediUnmarshalandDecodeString", ctypes.c_void_p),
("DummyFunction6", ctypes.c_void_p),
("GetExtendedCallFlags", ctypes.c_void_p),
("DuplicateTokenHandle", ctypes.c_void_p),
("GetServiceAccountPassword", ctypes.c_void_p),
("DummyFunction7", ctypes.c_void_p),
("AuditLogonEx", ctypes.c_void_p),
("CheckProtectedUserByToken", ctypes.c_void_p),
("QueryClientRequest", ctypes.c_void_p),
("GetAppModeInfo", ctypes.c_void_p),
("SetAppModeInfo", ctypes.c_void_p),
("GetClientInfoEx", ctypes.c_void_p),
("GetSecpkgFailureReason", ctypes.c_void_p),
("SetSecpkgFailureReason", ctypes.c_void_p),
]#[repr(C)]
pub struct LSA_SECPKG_FUNCTION_TABLE {
pub CreateLogonSession: *mut core::ffi::c_void,
pub DeleteLogonSession: *mut core::ffi::c_void,
pub AddCredential: *mut core::ffi::c_void,
pub GetCredentials: *mut core::ffi::c_void,
pub DeleteCredential: *mut core::ffi::c_void,
pub AllocateLsaHeap: *mut core::ffi::c_void,
pub FreeLsaHeap: *mut core::ffi::c_void,
pub AllocateClientBuffer: *mut core::ffi::c_void,
pub FreeClientBuffer: *mut core::ffi::c_void,
pub CopyToClientBuffer: *mut core::ffi::c_void,
pub CopyFromClientBuffer: *mut core::ffi::c_void,
pub ImpersonateClient: *mut core::ffi::c_void,
pub UnloadPackage: *mut core::ffi::c_void,
pub DuplicateHandle: *mut core::ffi::c_void,
pub SaveSupplementalCredentials: *mut core::ffi::c_void,
pub CreateThread: *mut core::ffi::c_void,
pub GetClientInfo: *mut core::ffi::c_void,
pub RegisterNotification: *mut core::ffi::c_void,
pub CancelNotification: *mut core::ffi::c_void,
pub MapBuffer: *mut core::ffi::c_void,
pub CreateToken: *mut core::ffi::c_void,
pub AuditLogon: *mut core::ffi::c_void,
pub CallPackage: *mut core::ffi::c_void,
pub FreeReturnBuffer: *mut core::ffi::c_void,
pub GetCallInfo: *mut core::ffi::c_void,
pub CallPackageEx: *mut core::ffi::c_void,
pub CreateSharedMemory: *mut core::ffi::c_void,
pub AllocateSharedMemory: *mut core::ffi::c_void,
pub FreeSharedMemory: *mut core::ffi::c_void,
pub DeleteSharedMemory: *mut core::ffi::c_void,
pub OpenSamUser: *mut core::ffi::c_void,
pub GetUserCredentials: *mut core::ffi::c_void,
pub GetUserAuthData: *mut core::ffi::c_void,
pub CloseSamUser: *mut core::ffi::c_void,
pub ConvertAuthDataToToken: *mut core::ffi::c_void,
pub ClientCallback: *mut core::ffi::c_void,
pub UpdateCredentials: *mut core::ffi::c_void,
pub GetAuthDataForUser: *mut core::ffi::c_void,
pub CrackSingleName: *mut core::ffi::c_void,
pub AuditAccountLogon: *mut core::ffi::c_void,
pub CallPackagePassthrough: *mut core::ffi::c_void,
pub CrediRead: *mut core::ffi::c_void,
pub CrediReadDomainCredentials: *mut core::ffi::c_void,
pub CrediFreeCredentials: *mut core::ffi::c_void,
pub LsaProtectMemory: *mut core::ffi::c_void,
pub LsaUnprotectMemory: *mut core::ffi::c_void,
pub OpenTokenByLogonId: *mut core::ffi::c_void,
pub ExpandAuthDataForDomain: *mut core::ffi::c_void,
pub AllocatePrivateHeap: *mut core::ffi::c_void,
pub FreePrivateHeap: *mut core::ffi::c_void,
pub CreateTokenEx: *mut core::ffi::c_void,
pub CrediWrite: *mut core::ffi::c_void,
pub CrediUnmarshalandDecodeString: *mut core::ffi::c_void,
pub DummyFunction6: *mut core::ffi::c_void,
pub GetExtendedCallFlags: *mut core::ffi::c_void,
pub DuplicateTokenHandle: *mut core::ffi::c_void,
pub GetServiceAccountPassword: *mut core::ffi::c_void,
pub DummyFunction7: *mut core::ffi::c_void,
pub AuditLogonEx: *mut core::ffi::c_void,
pub CheckProtectedUserByToken: *mut core::ffi::c_void,
pub QueryClientRequest: *mut core::ffi::c_void,
pub GetAppModeInfo: *mut core::ffi::c_void,
pub SetAppModeInfo: *mut core::ffi::c_void,
pub GetClientInfoEx: *mut core::ffi::c_void,
pub GetSecpkgFailureReason: *mut core::ffi::c_void,
pub SetSecpkgFailureReason: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type LSA_SECPKG_FUNCTION_TABLE struct {
CreateLogonSession uintptr
DeleteLogonSession uintptr
AddCredential uintptr
GetCredentials uintptr
DeleteCredential uintptr
AllocateLsaHeap uintptr
FreeLsaHeap uintptr
AllocateClientBuffer uintptr
FreeClientBuffer uintptr
CopyToClientBuffer uintptr
CopyFromClientBuffer uintptr
ImpersonateClient uintptr
UnloadPackage uintptr
DuplicateHandle uintptr
SaveSupplementalCredentials uintptr
CreateThread uintptr
GetClientInfo uintptr
RegisterNotification uintptr
CancelNotification uintptr
MapBuffer uintptr
CreateToken uintptr
AuditLogon uintptr
CallPackage uintptr
FreeReturnBuffer uintptr
GetCallInfo uintptr
CallPackageEx uintptr
CreateSharedMemory uintptr
AllocateSharedMemory uintptr
FreeSharedMemory uintptr
DeleteSharedMemory uintptr
OpenSamUser uintptr
GetUserCredentials uintptr
GetUserAuthData uintptr
CloseSamUser uintptr
ConvertAuthDataToToken uintptr
ClientCallback uintptr
UpdateCredentials uintptr
GetAuthDataForUser uintptr
CrackSingleName uintptr
AuditAccountLogon uintptr
CallPackagePassthrough uintptr
CrediRead uintptr
CrediReadDomainCredentials uintptr
CrediFreeCredentials uintptr
LsaProtectMemory uintptr
LsaUnprotectMemory uintptr
OpenTokenByLogonId uintptr
ExpandAuthDataForDomain uintptr
AllocatePrivateHeap uintptr
FreePrivateHeap uintptr
CreateTokenEx uintptr
CrediWrite uintptr
CrediUnmarshalandDecodeString uintptr
DummyFunction6 uintptr
GetExtendedCallFlags uintptr
DuplicateTokenHandle uintptr
GetServiceAccountPassword uintptr
DummyFunction7 uintptr
AuditLogonEx uintptr
CheckProtectedUserByToken uintptr
QueryClientRequest uintptr
GetAppModeInfo uintptr
SetAppModeInfo uintptr
GetClientInfoEx uintptr
GetSecpkgFailureReason uintptr
SetSecpkgFailureReason uintptr
}type
LSA_SECPKG_FUNCTION_TABLE = record
CreateLogonSession: Pointer;
DeleteLogonSession: Pointer;
AddCredential: Pointer;
GetCredentials: Pointer;
DeleteCredential: Pointer;
AllocateLsaHeap: Pointer;
FreeLsaHeap: Pointer;
AllocateClientBuffer: Pointer;
FreeClientBuffer: Pointer;
CopyToClientBuffer: Pointer;
CopyFromClientBuffer: Pointer;
ImpersonateClient: Pointer;
UnloadPackage: Pointer;
DuplicateHandle: Pointer;
SaveSupplementalCredentials: Pointer;
CreateThread: Pointer;
GetClientInfo: Pointer;
RegisterNotification: Pointer;
CancelNotification: Pointer;
MapBuffer: Pointer;
CreateToken: Pointer;
AuditLogon: Pointer;
CallPackage: Pointer;
FreeReturnBuffer: Pointer;
GetCallInfo: Pointer;
CallPackageEx: Pointer;
CreateSharedMemory: Pointer;
AllocateSharedMemory: Pointer;
FreeSharedMemory: Pointer;
DeleteSharedMemory: Pointer;
OpenSamUser: Pointer;
GetUserCredentials: Pointer;
GetUserAuthData: Pointer;
CloseSamUser: Pointer;
ConvertAuthDataToToken: Pointer;
ClientCallback: Pointer;
UpdateCredentials: Pointer;
GetAuthDataForUser: Pointer;
CrackSingleName: Pointer;
AuditAccountLogon: Pointer;
CallPackagePassthrough: Pointer;
CrediRead: Pointer;
CrediReadDomainCredentials: Pointer;
CrediFreeCredentials: Pointer;
LsaProtectMemory: Pointer;
LsaUnprotectMemory: Pointer;
OpenTokenByLogonId: Pointer;
ExpandAuthDataForDomain: Pointer;
AllocatePrivateHeap: Pointer;
FreePrivateHeap: Pointer;
CreateTokenEx: Pointer;
CrediWrite: Pointer;
CrediUnmarshalandDecodeString: Pointer;
DummyFunction6: Pointer;
GetExtendedCallFlags: Pointer;
DuplicateTokenHandle: Pointer;
GetServiceAccountPassword: Pointer;
DummyFunction7: Pointer;
AuditLogonEx: Pointer;
CheckProtectedUserByToken: Pointer;
QueryClientRequest: Pointer;
GetAppModeInfo: Pointer;
SetAppModeInfo: Pointer;
GetClientInfoEx: Pointer;
GetSecpkgFailureReason: Pointer;
SetSecpkgFailureReason: Pointer;
end;const LSA_SECPKG_FUNCTION_TABLE = extern struct {
CreateLogonSession: ?*anyopaque,
DeleteLogonSession: ?*anyopaque,
AddCredential: ?*anyopaque,
GetCredentials: ?*anyopaque,
DeleteCredential: ?*anyopaque,
AllocateLsaHeap: ?*anyopaque,
FreeLsaHeap: ?*anyopaque,
AllocateClientBuffer: ?*anyopaque,
FreeClientBuffer: ?*anyopaque,
CopyToClientBuffer: ?*anyopaque,
CopyFromClientBuffer: ?*anyopaque,
ImpersonateClient: ?*anyopaque,
UnloadPackage: ?*anyopaque,
DuplicateHandle: ?*anyopaque,
SaveSupplementalCredentials: ?*anyopaque,
CreateThread: ?*anyopaque,
GetClientInfo: ?*anyopaque,
RegisterNotification: ?*anyopaque,
CancelNotification: ?*anyopaque,
MapBuffer: ?*anyopaque,
CreateToken: ?*anyopaque,
AuditLogon: ?*anyopaque,
CallPackage: ?*anyopaque,
FreeReturnBuffer: ?*anyopaque,
GetCallInfo: ?*anyopaque,
CallPackageEx: ?*anyopaque,
CreateSharedMemory: ?*anyopaque,
AllocateSharedMemory: ?*anyopaque,
FreeSharedMemory: ?*anyopaque,
DeleteSharedMemory: ?*anyopaque,
OpenSamUser: ?*anyopaque,
GetUserCredentials: ?*anyopaque,
GetUserAuthData: ?*anyopaque,
CloseSamUser: ?*anyopaque,
ConvertAuthDataToToken: ?*anyopaque,
ClientCallback: ?*anyopaque,
UpdateCredentials: ?*anyopaque,
GetAuthDataForUser: ?*anyopaque,
CrackSingleName: ?*anyopaque,
AuditAccountLogon: ?*anyopaque,
CallPackagePassthrough: ?*anyopaque,
CrediRead: ?*anyopaque,
CrediReadDomainCredentials: ?*anyopaque,
CrediFreeCredentials: ?*anyopaque,
LsaProtectMemory: ?*anyopaque,
LsaUnprotectMemory: ?*anyopaque,
OpenTokenByLogonId: ?*anyopaque,
ExpandAuthDataForDomain: ?*anyopaque,
AllocatePrivateHeap: ?*anyopaque,
FreePrivateHeap: ?*anyopaque,
CreateTokenEx: ?*anyopaque,
CrediWrite: ?*anyopaque,
CrediUnmarshalandDecodeString: ?*anyopaque,
DummyFunction6: ?*anyopaque,
GetExtendedCallFlags: ?*anyopaque,
DuplicateTokenHandle: ?*anyopaque,
GetServiceAccountPassword: ?*anyopaque,
DummyFunction7: ?*anyopaque,
AuditLogonEx: ?*anyopaque,
CheckProtectedUserByToken: ?*anyopaque,
QueryClientRequest: ?*anyopaque,
GetAppModeInfo: ?*anyopaque,
SetAppModeInfo: ?*anyopaque,
GetClientInfoEx: ?*anyopaque,
GetSecpkgFailureReason: ?*anyopaque,
SetSecpkgFailureReason: ?*anyopaque,
};type
LSA_SECPKG_FUNCTION_TABLE {.bycopy.} = object
CreateLogonSession: pointer
DeleteLogonSession: pointer
AddCredential: pointer
GetCredentials: pointer
DeleteCredential: pointer
AllocateLsaHeap: pointer
FreeLsaHeap: pointer
AllocateClientBuffer: pointer
FreeClientBuffer: pointer
CopyToClientBuffer: pointer
CopyFromClientBuffer: pointer
ImpersonateClient: pointer
UnloadPackage: pointer
DuplicateHandle: pointer
SaveSupplementalCredentials: pointer
CreateThread: pointer
GetClientInfo: pointer
RegisterNotification: pointer
CancelNotification: pointer
MapBuffer: pointer
CreateToken: pointer
AuditLogon: pointer
CallPackage: pointer
FreeReturnBuffer: pointer
GetCallInfo: pointer
CallPackageEx: pointer
CreateSharedMemory: pointer
AllocateSharedMemory: pointer
FreeSharedMemory: pointer
DeleteSharedMemory: pointer
OpenSamUser: pointer
GetUserCredentials: pointer
GetUserAuthData: pointer
CloseSamUser: pointer
ConvertAuthDataToToken: pointer
ClientCallback: pointer
UpdateCredentials: pointer
GetAuthDataForUser: pointer
CrackSingleName: pointer
AuditAccountLogon: pointer
CallPackagePassthrough: pointer
CrediRead: pointer
CrediReadDomainCredentials: pointer
CrediFreeCredentials: pointer
LsaProtectMemory: pointer
LsaUnprotectMemory: pointer
OpenTokenByLogonId: pointer
ExpandAuthDataForDomain: pointer
AllocatePrivateHeap: pointer
FreePrivateHeap: pointer
CreateTokenEx: pointer
CrediWrite: pointer
CrediUnmarshalandDecodeString: pointer
DummyFunction6: pointer
GetExtendedCallFlags: pointer
DuplicateTokenHandle: pointer
GetServiceAccountPassword: pointer
DummyFunction7: pointer
AuditLogonEx: pointer
CheckProtectedUserByToken: pointer
QueryClientRequest: pointer
GetAppModeInfo: pointer
SetAppModeInfo: pointer
GetClientInfoEx: pointer
GetSecpkgFailureReason: pointer
SetSecpkgFailureReason: pointerstruct LSA_SECPKG_FUNCTION_TABLE
{
void* CreateLogonSession;
void* DeleteLogonSession;
void* AddCredential;
void* GetCredentials;
void* DeleteCredential;
void* AllocateLsaHeap;
void* FreeLsaHeap;
void* AllocateClientBuffer;
void* FreeClientBuffer;
void* CopyToClientBuffer;
void* CopyFromClientBuffer;
void* ImpersonateClient;
void* UnloadPackage;
void* DuplicateHandle;
void* SaveSupplementalCredentials;
void* CreateThread;
void* GetClientInfo;
void* RegisterNotification;
void* CancelNotification;
void* MapBuffer;
void* CreateToken;
void* AuditLogon;
void* CallPackage;
void* FreeReturnBuffer;
void* GetCallInfo;
void* CallPackageEx;
void* CreateSharedMemory;
void* AllocateSharedMemory;
void* FreeSharedMemory;
void* DeleteSharedMemory;
void* OpenSamUser;
void* GetUserCredentials;
void* GetUserAuthData;
void* CloseSamUser;
void* ConvertAuthDataToToken;
void* ClientCallback;
void* UpdateCredentials;
void* GetAuthDataForUser;
void* CrackSingleName;
void* AuditAccountLogon;
void* CallPackagePassthrough;
void* CrediRead;
void* CrediReadDomainCredentials;
void* CrediFreeCredentials;
void* LsaProtectMemory;
void* LsaUnprotectMemory;
void* OpenTokenByLogonId;
void* ExpandAuthDataForDomain;
void* AllocatePrivateHeap;
void* FreePrivateHeap;
void* CreateTokenEx;
void* CrediWrite;
void* CrediUnmarshalandDecodeString;
void* DummyFunction6;
void* GetExtendedCallFlags;
void* DuplicateTokenHandle;
void* GetServiceAccountPassword;
void* DummyFunction7;
void* AuditLogonEx;
void* CheckProtectedUserByToken;
void* QueryClientRequest;
void* GetAppModeInfo;
void* SetAppModeInfo;
void* GetClientInfoEx;
void* GetSecpkgFailureReason;
void* SetSecpkgFailureReason;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; LSA_SECPKG_FUNCTION_TABLE サイズ: 264 バイト(x86)
dim st, 66 ; 4byte整数×66(構造体サイズ 264 / 4 切り上げ)
; CreateLogonSession : PLSA_CREATE_LOGON_SESSION (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; DeleteLogonSession : PLSA_DELETE_LOGON_SESSION (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; AddCredential : PLSA_ADD_CREDENTIAL (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; GetCredentials : PLSA_GET_CREDENTIALS (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; DeleteCredential : PLSA_DELETE_CREDENTIAL (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; AllocateLsaHeap : PLSA_ALLOCATE_LSA_HEAP (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; FreeLsaHeap : PLSA_FREE_LSA_HEAP (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; AllocateClientBuffer : PLSA_ALLOCATE_CLIENT_BUFFER (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; FreeClientBuffer : PLSA_FREE_CLIENT_BUFFER (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; CopyToClientBuffer : PLSA_COPY_TO_CLIENT_BUFFER (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; CopyFromClientBuffer : PLSA_COPY_FROM_CLIENT_BUFFER (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; ImpersonateClient : PLSA_IMPERSONATE_CLIENT (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; UnloadPackage : PLSA_UNLOAD_PACKAGE (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; DuplicateHandle : PLSA_DUPLICATE_HANDLE (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; SaveSupplementalCredentials : PLSA_SAVE_SUPPLEMENTAL_CREDENTIALS (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; CreateThread : PLSA_CREATE_THREAD (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; GetClientInfo : PLSA_GET_CLIENT_INFO (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; RegisterNotification : PLSA_REGISTER_NOTIFICATION (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; CancelNotification : PLSA_CANCEL_NOTIFICATION (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; MapBuffer : PLSA_MAP_BUFFER (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; CreateToken : PLSA_CREATE_TOKEN (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; AuditLogon : PLSA_AUDIT_LOGON (+84, 4byte) st.21 = 値 / 値 = st.21 (lpoke/lpeek も可)
; CallPackage : PLSA_CALL_PACKAGE (+88, 4byte) st.22 = 値 / 値 = st.22 (lpoke/lpeek も可)
; FreeReturnBuffer : PLSA_FREE_LSA_HEAP (+92, 4byte) st.23 = 値 / 値 = st.23 (lpoke/lpeek も可)
; GetCallInfo : PLSA_GET_CALL_INFO (+96, 4byte) st.24 = 値 / 値 = st.24 (lpoke/lpeek も可)
; CallPackageEx : PLSA_CALL_PACKAGEEX (+100, 4byte) st.25 = 値 / 値 = st.25 (lpoke/lpeek も可)
; CreateSharedMemory : PLSA_CREATE_SHARED_MEMORY (+104, 4byte) st.26 = 値 / 値 = st.26 (lpoke/lpeek も可)
; AllocateSharedMemory : PLSA_ALLOCATE_SHARED_MEMORY (+108, 4byte) st.27 = 値 / 値 = st.27 (lpoke/lpeek も可)
; FreeSharedMemory : PLSA_FREE_SHARED_MEMORY (+112, 4byte) st.28 = 値 / 値 = st.28 (lpoke/lpeek も可)
; DeleteSharedMemory : PLSA_DELETE_SHARED_MEMORY (+116, 4byte) st.29 = 値 / 値 = st.29 (lpoke/lpeek も可)
; OpenSamUser : PLSA_OPEN_SAM_USER (+120, 4byte) st.30 = 値 / 値 = st.30 (lpoke/lpeek も可)
; GetUserCredentials : PLSA_GET_USER_CREDENTIALS (+124, 4byte) st.31 = 値 / 値 = st.31 (lpoke/lpeek も可)
; GetUserAuthData : PLSA_GET_USER_AUTH_DATA (+128, 4byte) st.32 = 値 / 値 = st.32 (lpoke/lpeek も可)
; CloseSamUser : PLSA_CLOSE_SAM_USER (+132, 4byte) st.33 = 値 / 値 = st.33 (lpoke/lpeek も可)
; ConvertAuthDataToToken : PLSA_CONVERT_AUTH_DATA_TO_TOKEN (+136, 4byte) st.34 = 値 / 値 = st.34 (lpoke/lpeek も可)
; ClientCallback : PLSA_CLIENT_CALLBACK (+140, 4byte) st.35 = 値 / 値 = st.35 (lpoke/lpeek も可)
; UpdateCredentials : PLSA_UPDATE_PRIMARY_CREDENTIALS (+144, 4byte) st.36 = 値 / 値 = st.36 (lpoke/lpeek も可)
; GetAuthDataForUser : PLSA_GET_AUTH_DATA_FOR_USER (+148, 4byte) st.37 = 値 / 値 = st.37 (lpoke/lpeek も可)
; CrackSingleName : PLSA_CRACK_SINGLE_NAME (+152, 4byte) st.38 = 値 / 値 = st.38 (lpoke/lpeek も可)
; AuditAccountLogon : PLSA_AUDIT_ACCOUNT_LOGON (+156, 4byte) st.39 = 値 / 値 = st.39 (lpoke/lpeek も可)
; CallPackagePassthrough : PLSA_CALL_PACKAGE_PASSTHROUGH (+160, 4byte) st.40 = 値 / 値 = st.40 (lpoke/lpeek も可)
; CrediRead : CredReadFn (+164, 4byte) st.41 = 値 / 値 = st.41 (lpoke/lpeek も可)
; CrediReadDomainCredentials : CredReadDomainCredentialsFn (+168, 4byte) st.42 = 値 / 値 = st.42 (lpoke/lpeek も可)
; CrediFreeCredentials : CredFreeCredentialsFn (+172, 4byte) st.43 = 値 / 値 = st.43 (lpoke/lpeek も可)
; LsaProtectMemory : PLSA_PROTECT_MEMORY (+176, 4byte) st.44 = 値 / 値 = st.44 (lpoke/lpeek も可)
; LsaUnprotectMemory : PLSA_PROTECT_MEMORY (+180, 4byte) st.45 = 値 / 値 = st.45 (lpoke/lpeek も可)
; OpenTokenByLogonId : PLSA_OPEN_TOKEN_BY_LOGON_ID (+184, 4byte) st.46 = 値 / 値 = st.46 (lpoke/lpeek も可)
; ExpandAuthDataForDomain : PLSA_EXPAND_AUTH_DATA_FOR_DOMAIN (+188, 4byte) st.47 = 値 / 値 = st.47 (lpoke/lpeek も可)
; AllocatePrivateHeap : PLSA_ALLOCATE_PRIVATE_HEAP (+192, 4byte) st.48 = 値 / 値 = st.48 (lpoke/lpeek も可)
; FreePrivateHeap : PLSA_FREE_PRIVATE_HEAP (+196, 4byte) st.49 = 値 / 値 = st.49 (lpoke/lpeek も可)
; CreateTokenEx : PLSA_CREATE_TOKEN_EX (+200, 4byte) st.50 = 値 / 値 = st.50 (lpoke/lpeek も可)
; CrediWrite : CredWriteFn (+204, 4byte) st.51 = 値 / 値 = st.51 (lpoke/lpeek も可)
; CrediUnmarshalandDecodeString : CrediUnmarshalandDecodeStringFn (+208, 4byte) st.52 = 値 / 値 = st.52 (lpoke/lpeek も可)
; DummyFunction6 : PLSA_PROTECT_MEMORY (+212, 4byte) st.53 = 値 / 値 = st.53 (lpoke/lpeek も可)
; GetExtendedCallFlags : PLSA_GET_EXTENDED_CALL_FLAGS (+216, 4byte) st.54 = 値 / 値 = st.54 (lpoke/lpeek も可)
; DuplicateTokenHandle : PLSA_DUPLICATE_HANDLE (+220, 4byte) st.55 = 値 / 値 = st.55 (lpoke/lpeek も可)
; GetServiceAccountPassword : PLSA_GET_SERVICE_ACCOUNT_PASSWORD (+224, 4byte) st.56 = 値 / 値 = st.56 (lpoke/lpeek も可)
; DummyFunction7 : PLSA_PROTECT_MEMORY (+228, 4byte) st.57 = 値 / 値 = st.57 (lpoke/lpeek も可)
; AuditLogonEx : PLSA_AUDIT_LOGON_EX (+232, 4byte) st.58 = 値 / 値 = st.58 (lpoke/lpeek も可)
; CheckProtectedUserByToken : PLSA_CHECK_PROTECTED_USER_BY_TOKEN (+236, 4byte) st.59 = 値 / 値 = st.59 (lpoke/lpeek も可)
; QueryClientRequest : PLSA_QUERY_CLIENT_REQUEST (+240, 4byte) st.60 = 値 / 値 = st.60 (lpoke/lpeek も可)
; GetAppModeInfo : PLSA_GET_APP_MODE_INFO (+244, 4byte) st.61 = 値 / 値 = st.61 (lpoke/lpeek も可)
; SetAppModeInfo : PLSA_SET_APP_MODE_INFO (+248, 4byte) st.62 = 値 / 値 = st.62 (lpoke/lpeek も可)
; GetClientInfoEx : PLSA_GET_CLIENT_INFO_EX (+252, 4byte) st.63 = 値 / 値 = st.63 (lpoke/lpeek も可)
; GetSecpkgFailureReason : PLSA_GET_SECPKG_FAILURE_REASON (+256, 4byte) st.64 = 値 / 値 = st.64 (lpoke/lpeek も可)
; SetSecpkgFailureReason : PLSA_SET_SECPKG_FAILURE_REASON (+260, 4byte) st.65 = 値 / 値 = st.65 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; LSA_SECPKG_FUNCTION_TABLE サイズ: 528 バイト(x64)
dim st, 132 ; 4byte整数×132(構造体サイズ 528 / 4 切り上げ)
; CreateLogonSession : PLSA_CREATE_LOGON_SESSION (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; DeleteLogonSession : PLSA_DELETE_LOGON_SESSION (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; AddCredential : PLSA_ADD_CREDENTIAL (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; GetCredentials : PLSA_GET_CREDENTIALS (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; DeleteCredential : PLSA_DELETE_CREDENTIAL (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; AllocateLsaHeap : PLSA_ALLOCATE_LSA_HEAP (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; FreeLsaHeap : PLSA_FREE_LSA_HEAP (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; AllocateClientBuffer : PLSA_ALLOCATE_CLIENT_BUFFER (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; FreeClientBuffer : PLSA_FREE_CLIENT_BUFFER (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; CopyToClientBuffer : PLSA_COPY_TO_CLIENT_BUFFER (+72, 8byte) qpoke st,72,値 / qpeek(st,72) ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; CopyFromClientBuffer : PLSA_COPY_FROM_CLIENT_BUFFER (+80, 8byte) qpoke st,80,値 / qpeek(st,80) ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; ImpersonateClient : PLSA_IMPERSONATE_CLIENT (+88, 8byte) qpoke st,88,値 / qpeek(st,88) ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; UnloadPackage : PLSA_UNLOAD_PACKAGE (+96, 8byte) qpoke st,96,値 / qpeek(st,96) ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; DuplicateHandle : PLSA_DUPLICATE_HANDLE (+104, 8byte) qpoke st,104,値 / qpeek(st,104) ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; SaveSupplementalCredentials : PLSA_SAVE_SUPPLEMENTAL_CREDENTIALS (+112, 8byte) qpoke st,112,値 / qpeek(st,112) ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; CreateThread : PLSA_CREATE_THREAD (+120, 8byte) qpoke st,120,値 / qpeek(st,120) ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; GetClientInfo : PLSA_GET_CLIENT_INFO (+128, 8byte) qpoke st,128,値 / qpeek(st,128) ※IronHSPのみ。3.7/3.8は lpoke st,128,下位 : lpoke st,132,上位
; RegisterNotification : PLSA_REGISTER_NOTIFICATION (+136, 8byte) qpoke st,136,値 / qpeek(st,136) ※IronHSPのみ。3.7/3.8は lpoke st,136,下位 : lpoke st,140,上位
; CancelNotification : PLSA_CANCEL_NOTIFICATION (+144, 8byte) qpoke st,144,値 / qpeek(st,144) ※IronHSPのみ。3.7/3.8は lpoke st,144,下位 : lpoke st,148,上位
; MapBuffer : PLSA_MAP_BUFFER (+152, 8byte) qpoke st,152,値 / qpeek(st,152) ※IronHSPのみ。3.7/3.8は lpoke st,152,下位 : lpoke st,156,上位
; CreateToken : PLSA_CREATE_TOKEN (+160, 8byte) qpoke st,160,値 / qpeek(st,160) ※IronHSPのみ。3.7/3.8は lpoke st,160,下位 : lpoke st,164,上位
; AuditLogon : PLSA_AUDIT_LOGON (+168, 8byte) qpoke st,168,値 / qpeek(st,168) ※IronHSPのみ。3.7/3.8は lpoke st,168,下位 : lpoke st,172,上位
; CallPackage : PLSA_CALL_PACKAGE (+176, 8byte) qpoke st,176,値 / qpeek(st,176) ※IronHSPのみ。3.7/3.8は lpoke st,176,下位 : lpoke st,180,上位
; FreeReturnBuffer : PLSA_FREE_LSA_HEAP (+184, 8byte) qpoke st,184,値 / qpeek(st,184) ※IronHSPのみ。3.7/3.8は lpoke st,184,下位 : lpoke st,188,上位
; GetCallInfo : PLSA_GET_CALL_INFO (+192, 8byte) qpoke st,192,値 / qpeek(st,192) ※IronHSPのみ。3.7/3.8は lpoke st,192,下位 : lpoke st,196,上位
; CallPackageEx : PLSA_CALL_PACKAGEEX (+200, 8byte) qpoke st,200,値 / qpeek(st,200) ※IronHSPのみ。3.7/3.8は lpoke st,200,下位 : lpoke st,204,上位
; CreateSharedMemory : PLSA_CREATE_SHARED_MEMORY (+208, 8byte) qpoke st,208,値 / qpeek(st,208) ※IronHSPのみ。3.7/3.8は lpoke st,208,下位 : lpoke st,212,上位
; AllocateSharedMemory : PLSA_ALLOCATE_SHARED_MEMORY (+216, 8byte) qpoke st,216,値 / qpeek(st,216) ※IronHSPのみ。3.7/3.8は lpoke st,216,下位 : lpoke st,220,上位
; FreeSharedMemory : PLSA_FREE_SHARED_MEMORY (+224, 8byte) qpoke st,224,値 / qpeek(st,224) ※IronHSPのみ。3.7/3.8は lpoke st,224,下位 : lpoke st,228,上位
; DeleteSharedMemory : PLSA_DELETE_SHARED_MEMORY (+232, 8byte) qpoke st,232,値 / qpeek(st,232) ※IronHSPのみ。3.7/3.8は lpoke st,232,下位 : lpoke st,236,上位
; OpenSamUser : PLSA_OPEN_SAM_USER (+240, 8byte) qpoke st,240,値 / qpeek(st,240) ※IronHSPのみ。3.7/3.8は lpoke st,240,下位 : lpoke st,244,上位
; GetUserCredentials : PLSA_GET_USER_CREDENTIALS (+248, 8byte) qpoke st,248,値 / qpeek(st,248) ※IronHSPのみ。3.7/3.8は lpoke st,248,下位 : lpoke st,252,上位
; GetUserAuthData : PLSA_GET_USER_AUTH_DATA (+256, 8byte) qpoke st,256,値 / qpeek(st,256) ※IronHSPのみ。3.7/3.8は lpoke st,256,下位 : lpoke st,260,上位
; CloseSamUser : PLSA_CLOSE_SAM_USER (+264, 8byte) qpoke st,264,値 / qpeek(st,264) ※IronHSPのみ。3.7/3.8は lpoke st,264,下位 : lpoke st,268,上位
; ConvertAuthDataToToken : PLSA_CONVERT_AUTH_DATA_TO_TOKEN (+272, 8byte) qpoke st,272,値 / qpeek(st,272) ※IronHSPのみ。3.7/3.8は lpoke st,272,下位 : lpoke st,276,上位
; ClientCallback : PLSA_CLIENT_CALLBACK (+280, 8byte) qpoke st,280,値 / qpeek(st,280) ※IronHSPのみ。3.7/3.8は lpoke st,280,下位 : lpoke st,284,上位
; UpdateCredentials : PLSA_UPDATE_PRIMARY_CREDENTIALS (+288, 8byte) qpoke st,288,値 / qpeek(st,288) ※IronHSPのみ。3.7/3.8は lpoke st,288,下位 : lpoke st,292,上位
; GetAuthDataForUser : PLSA_GET_AUTH_DATA_FOR_USER (+296, 8byte) qpoke st,296,値 / qpeek(st,296) ※IronHSPのみ。3.7/3.8は lpoke st,296,下位 : lpoke st,300,上位
; CrackSingleName : PLSA_CRACK_SINGLE_NAME (+304, 8byte) qpoke st,304,値 / qpeek(st,304) ※IronHSPのみ。3.7/3.8は lpoke st,304,下位 : lpoke st,308,上位
; AuditAccountLogon : PLSA_AUDIT_ACCOUNT_LOGON (+312, 8byte) qpoke st,312,値 / qpeek(st,312) ※IronHSPのみ。3.7/3.8は lpoke st,312,下位 : lpoke st,316,上位
; CallPackagePassthrough : PLSA_CALL_PACKAGE_PASSTHROUGH (+320, 8byte) qpoke st,320,値 / qpeek(st,320) ※IronHSPのみ。3.7/3.8は lpoke st,320,下位 : lpoke st,324,上位
; CrediRead : CredReadFn (+328, 8byte) qpoke st,328,値 / qpeek(st,328) ※IronHSPのみ。3.7/3.8は lpoke st,328,下位 : lpoke st,332,上位
; CrediReadDomainCredentials : CredReadDomainCredentialsFn (+336, 8byte) qpoke st,336,値 / qpeek(st,336) ※IronHSPのみ。3.7/3.8は lpoke st,336,下位 : lpoke st,340,上位
; CrediFreeCredentials : CredFreeCredentialsFn (+344, 8byte) qpoke st,344,値 / qpeek(st,344) ※IronHSPのみ。3.7/3.8は lpoke st,344,下位 : lpoke st,348,上位
; LsaProtectMemory : PLSA_PROTECT_MEMORY (+352, 8byte) qpoke st,352,値 / qpeek(st,352) ※IronHSPのみ。3.7/3.8は lpoke st,352,下位 : lpoke st,356,上位
; LsaUnprotectMemory : PLSA_PROTECT_MEMORY (+360, 8byte) qpoke st,360,値 / qpeek(st,360) ※IronHSPのみ。3.7/3.8は lpoke st,360,下位 : lpoke st,364,上位
; OpenTokenByLogonId : PLSA_OPEN_TOKEN_BY_LOGON_ID (+368, 8byte) qpoke st,368,値 / qpeek(st,368) ※IronHSPのみ。3.7/3.8は lpoke st,368,下位 : lpoke st,372,上位
; ExpandAuthDataForDomain : PLSA_EXPAND_AUTH_DATA_FOR_DOMAIN (+376, 8byte) qpoke st,376,値 / qpeek(st,376) ※IronHSPのみ。3.7/3.8は lpoke st,376,下位 : lpoke st,380,上位
; AllocatePrivateHeap : PLSA_ALLOCATE_PRIVATE_HEAP (+384, 8byte) qpoke st,384,値 / qpeek(st,384) ※IronHSPのみ。3.7/3.8は lpoke st,384,下位 : lpoke st,388,上位
; FreePrivateHeap : PLSA_FREE_PRIVATE_HEAP (+392, 8byte) qpoke st,392,値 / qpeek(st,392) ※IronHSPのみ。3.7/3.8は lpoke st,392,下位 : lpoke st,396,上位
; CreateTokenEx : PLSA_CREATE_TOKEN_EX (+400, 8byte) qpoke st,400,値 / qpeek(st,400) ※IronHSPのみ。3.7/3.8は lpoke st,400,下位 : lpoke st,404,上位
; CrediWrite : CredWriteFn (+408, 8byte) qpoke st,408,値 / qpeek(st,408) ※IronHSPのみ。3.7/3.8は lpoke st,408,下位 : lpoke st,412,上位
; CrediUnmarshalandDecodeString : CrediUnmarshalandDecodeStringFn (+416, 8byte) qpoke st,416,値 / qpeek(st,416) ※IronHSPのみ。3.7/3.8は lpoke st,416,下位 : lpoke st,420,上位
; DummyFunction6 : PLSA_PROTECT_MEMORY (+424, 8byte) qpoke st,424,値 / qpeek(st,424) ※IronHSPのみ。3.7/3.8は lpoke st,424,下位 : lpoke st,428,上位
; GetExtendedCallFlags : PLSA_GET_EXTENDED_CALL_FLAGS (+432, 8byte) qpoke st,432,値 / qpeek(st,432) ※IronHSPのみ。3.7/3.8は lpoke st,432,下位 : lpoke st,436,上位
; DuplicateTokenHandle : PLSA_DUPLICATE_HANDLE (+440, 8byte) qpoke st,440,値 / qpeek(st,440) ※IronHSPのみ。3.7/3.8は lpoke st,440,下位 : lpoke st,444,上位
; GetServiceAccountPassword : PLSA_GET_SERVICE_ACCOUNT_PASSWORD (+448, 8byte) qpoke st,448,値 / qpeek(st,448) ※IronHSPのみ。3.7/3.8は lpoke st,448,下位 : lpoke st,452,上位
; DummyFunction7 : PLSA_PROTECT_MEMORY (+456, 8byte) qpoke st,456,値 / qpeek(st,456) ※IronHSPのみ。3.7/3.8は lpoke st,456,下位 : lpoke st,460,上位
; AuditLogonEx : PLSA_AUDIT_LOGON_EX (+464, 8byte) qpoke st,464,値 / qpeek(st,464) ※IronHSPのみ。3.7/3.8は lpoke st,464,下位 : lpoke st,468,上位
; CheckProtectedUserByToken : PLSA_CHECK_PROTECTED_USER_BY_TOKEN (+472, 8byte) qpoke st,472,値 / qpeek(st,472) ※IronHSPのみ。3.7/3.8は lpoke st,472,下位 : lpoke st,476,上位
; QueryClientRequest : PLSA_QUERY_CLIENT_REQUEST (+480, 8byte) qpoke st,480,値 / qpeek(st,480) ※IronHSPのみ。3.7/3.8は lpoke st,480,下位 : lpoke st,484,上位
; GetAppModeInfo : PLSA_GET_APP_MODE_INFO (+488, 8byte) qpoke st,488,値 / qpeek(st,488) ※IronHSPのみ。3.7/3.8は lpoke st,488,下位 : lpoke st,492,上位
; SetAppModeInfo : PLSA_SET_APP_MODE_INFO (+496, 8byte) qpoke st,496,値 / qpeek(st,496) ※IronHSPのみ。3.7/3.8は lpoke st,496,下位 : lpoke st,500,上位
; GetClientInfoEx : PLSA_GET_CLIENT_INFO_EX (+504, 8byte) qpoke st,504,値 / qpeek(st,504) ※IronHSPのみ。3.7/3.8は lpoke st,504,下位 : lpoke st,508,上位
; GetSecpkgFailureReason : PLSA_GET_SECPKG_FAILURE_REASON (+512, 8byte) qpoke st,512,値 / qpeek(st,512) ※IronHSPのみ。3.7/3.8は lpoke st,512,下位 : lpoke st,516,上位
; SetSecpkgFailureReason : PLSA_SET_SECPKG_FAILURE_REASON (+520, 8byte) qpoke st,520,値 / qpeek(st,520) ※IronHSPのみ。3.7/3.8は lpoke st,520,下位 : lpoke st,524,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global LSA_SECPKG_FUNCTION_TABLE
#field intptr CreateLogonSession
#field intptr DeleteLogonSession
#field intptr AddCredential
#field intptr GetCredentials
#field intptr DeleteCredential
#field intptr AllocateLsaHeap
#field intptr FreeLsaHeap
#field intptr AllocateClientBuffer
#field intptr FreeClientBuffer
#field intptr CopyToClientBuffer
#field intptr CopyFromClientBuffer
#field intptr ImpersonateClient
#field intptr UnloadPackage
#field intptr DuplicateHandle
#field intptr SaveSupplementalCredentials
#field intptr CreateThread
#field intptr GetClientInfo
#field intptr RegisterNotification
#field intptr CancelNotification
#field intptr MapBuffer
#field intptr CreateToken
#field intptr AuditLogon
#field intptr CallPackage
#field intptr FreeReturnBuffer
#field intptr GetCallInfo
#field intptr CallPackageEx
#field intptr CreateSharedMemory
#field intptr AllocateSharedMemory
#field intptr FreeSharedMemory
#field intptr DeleteSharedMemory
#field intptr OpenSamUser
#field intptr GetUserCredentials
#field intptr GetUserAuthData
#field intptr CloseSamUser
#field intptr ConvertAuthDataToToken
#field intptr ClientCallback
#field intptr UpdateCredentials
#field intptr GetAuthDataForUser
#field intptr CrackSingleName
#field intptr AuditAccountLogon
#field intptr CallPackagePassthrough
#field intptr CrediRead
#field intptr CrediReadDomainCredentials
#field intptr CrediFreeCredentials
#field intptr LsaProtectMemory
#field intptr LsaUnprotectMemory
#field intptr OpenTokenByLogonId
#field intptr ExpandAuthDataForDomain
#field intptr AllocatePrivateHeap
#field intptr FreePrivateHeap
#field intptr CreateTokenEx
#field intptr CrediWrite
#field intptr CrediUnmarshalandDecodeString
#field intptr DummyFunction6
#field intptr GetExtendedCallFlags
#field intptr DuplicateTokenHandle
#field intptr GetServiceAccountPassword
#field intptr DummyFunction7
#field intptr AuditLogonEx
#field intptr CheckProtectedUserByToken
#field intptr QueryClientRequest
#field intptr GetAppModeInfo
#field intptr SetAppModeInfo
#field intptr GetClientInfoEx
#field intptr GetSecpkgFailureReason
#field intptr SetSecpkgFailureReason
#endstruct
stdim st, LSA_SECPKG_FUNCTION_TABLE ; NSTRUCT 変数を確保