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

NCRYPT_KEY_STORAGE_FUNCTION_TABLE

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

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

フィールド

フィールドサイズx64x86説明
VersionBCRYPT_INTERFACE_VERSION4+0+0鍵ストレージプロバイダーインターフェイスのバージョン。
OpenProviderNCryptOpenStorageProviderFn8/4+8+4ストレージプロバイダーを開く関数ポインタ。
OpenKeyNCryptOpenKeyFn8/4+16+8既存鍵を開く関数ポインタ。
CreatePersistedKeyNCryptCreatePersistedKeyFn8/4+24+12永続鍵を作成する関数ポインタ。
GetProviderPropertyNCryptGetProviderPropertyFn8/4+32+16プロバイダープロパティを取得する関数ポインタ。
GetKeyPropertyNCryptGetKeyPropertyFn8/4+40+20鍵プロパティを取得する関数ポインタ。
SetProviderPropertyNCryptSetProviderPropertyFn8/4+48+24プロバイダープロパティを設定する関数ポインタ。
SetKeyPropertyNCryptSetKeyPropertyFn8/4+56+28鍵プロパティを設定する関数ポインタ。
FinalizeKeyNCryptFinalizeKeyFn8/4+64+32鍵を確定する関数ポインタ。
DeleteKeyNCryptDeleteKeyFn8/4+72+36鍵を削除する関数ポインタ。
FreeProviderNCryptFreeProviderFn8/4+80+40プロバイダーを解放する関数ポインタ。
FreeKeyNCryptFreeKeyFn8/4+88+44鍵を解放する関数ポインタ。
FreeBufferNCryptFreeBufferFn8/4+96+48バッファを解放する関数ポインタ。
EncryptNCryptEncryptFn8/4+104+52暗号化を行う関数ポインタ。
DecryptNCryptDecryptFn8/4+112+56復号を行う関数ポインタ。
IsAlgSupportedNCryptIsAlgSupportedFn8/4+120+60アルゴリズム対応可否を判定する関数ポインタ。
EnumAlgorithmsNCryptEnumAlgorithmsFn8/4+128+64対応アルゴリズムを列挙する関数ポインタ。
EnumKeysNCryptEnumKeysFn8/4+136+68鍵を列挙する関数ポインタ。
ImportKeyNCryptImportKeyFn8/4+144+72鍵をインポートする関数ポインタ。
ExportKeyNCryptExportKeyFn8/4+152+76鍵をエクスポートする関数ポインタ。
SignHashNCryptSignHashFn8/4+160+80ハッシュに署名する関数ポインタ。
VerifySignatureNCryptVerifySignatureFn8/4+168+84署名を検証する関数ポインタ。
PromptUserNCryptPromptUserFn8/4+176+88ユーザーにプロンプト表示する関数ポインタ。
NotifyChangeKeyNCryptNotifyChangeKeyFn8/4+184+92鍵変更通知を行う関数ポインタ。
SecretAgreementNCryptSecretAgreementFn8/4+192+96共有秘密を計算する関数ポインタ。
DeriveKeyNCryptDeriveKeyFn8/4+200+100共有秘密から鍵を導出する関数ポインタ。
FreeSecretNCryptFreeSecretFn8/4+208+104共有秘密を解放する関数ポインタ。
KeyDerivationNCryptKeyDerivationFn8/4+216+108鍵導出を実行する関数ポインタ。
CreateClaimNCryptCreateClaimFn8/4+224+112鍵クレームを作成する関数ポインタ。
VerifyClaimNCryptVerifyClaimFn8/4+232+116鍵クレームを検証する関数ポインタ。

各言語での定義

#include <windows.h>

// BCRYPT_INTERFACE_VERSION  (x64 4 / x86 4 バイト)
typedef struct BCRYPT_INTERFACE_VERSION {
    WORD MajorVersion;
    WORD MinorVersion;
} BCRYPT_INTERFACE_VERSION;

// NCRYPT_KEY_STORAGE_FUNCTION_TABLE  (x64 240 / x86 120 バイト)
typedef struct NCRYPT_KEY_STORAGE_FUNCTION_TABLE {
    BCRYPT_INTERFACE_VERSION Version;
    NCryptOpenStorageProviderFn OpenProvider;
    NCryptOpenKeyFn OpenKey;
    NCryptCreatePersistedKeyFn CreatePersistedKey;
    NCryptGetProviderPropertyFn GetProviderProperty;
    NCryptGetKeyPropertyFn GetKeyProperty;
    NCryptSetProviderPropertyFn SetProviderProperty;
    NCryptSetKeyPropertyFn SetKeyProperty;
    NCryptFinalizeKeyFn FinalizeKey;
    NCryptDeleteKeyFn DeleteKey;
    NCryptFreeProviderFn FreeProvider;
    NCryptFreeKeyFn FreeKey;
    NCryptFreeBufferFn FreeBuffer;
    NCryptEncryptFn Encrypt;
    NCryptDecryptFn Decrypt;
    NCryptIsAlgSupportedFn IsAlgSupported;
    NCryptEnumAlgorithmsFn EnumAlgorithms;
    NCryptEnumKeysFn EnumKeys;
    NCryptImportKeyFn ImportKey;
    NCryptExportKeyFn ExportKey;
    NCryptSignHashFn SignHash;
    NCryptVerifySignatureFn VerifySignature;
    NCryptPromptUserFn PromptUser;
    NCryptNotifyChangeKeyFn NotifyChangeKey;
    NCryptSecretAgreementFn SecretAgreement;
    NCryptDeriveKeyFn DeriveKey;
    NCryptFreeSecretFn FreeSecret;
    NCryptKeyDerivationFn KeyDerivation;
    NCryptCreateClaimFn CreateClaim;
    NCryptVerifyClaimFn VerifyClaim;
} NCRYPT_KEY_STORAGE_FUNCTION_TABLE;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct BCRYPT_INTERFACE_VERSION
{
    public ushort MajorVersion;
    public ushort MinorVersion;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct NCRYPT_KEY_STORAGE_FUNCTION_TABLE
{
    public BCRYPT_INTERFACE_VERSION Version;
    public IntPtr OpenProvider;
    public IntPtr OpenKey;
    public IntPtr CreatePersistedKey;
    public IntPtr GetProviderProperty;
    public IntPtr GetKeyProperty;
    public IntPtr SetProviderProperty;
    public IntPtr SetKeyProperty;
    public IntPtr FinalizeKey;
    public IntPtr DeleteKey;
    public IntPtr FreeProvider;
    public IntPtr FreeKey;
    public IntPtr FreeBuffer;
    public IntPtr Encrypt;
    public IntPtr Decrypt;
    public IntPtr IsAlgSupported;
    public IntPtr EnumAlgorithms;
    public IntPtr EnumKeys;
    public IntPtr ImportKey;
    public IntPtr ExportKey;
    public IntPtr SignHash;
    public IntPtr VerifySignature;
    public IntPtr PromptUser;
    public IntPtr NotifyChangeKey;
    public IntPtr SecretAgreement;
    public IntPtr DeriveKey;
    public IntPtr FreeSecret;
    public IntPtr KeyDerivation;
    public IntPtr CreateClaim;
    public IntPtr VerifyClaim;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure BCRYPT_INTERFACE_VERSION
    Public MajorVersion As UShort
    Public MinorVersion As UShort
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure NCRYPT_KEY_STORAGE_FUNCTION_TABLE
    Public Version As BCRYPT_INTERFACE_VERSION
    Public OpenProvider As IntPtr
    Public OpenKey As IntPtr
    Public CreatePersistedKey As IntPtr
    Public GetProviderProperty As IntPtr
    Public GetKeyProperty As IntPtr
    Public SetProviderProperty As IntPtr
    Public SetKeyProperty As IntPtr
    Public FinalizeKey As IntPtr
    Public DeleteKey As IntPtr
    Public FreeProvider As IntPtr
    Public FreeKey As IntPtr
    Public FreeBuffer As IntPtr
    Public Encrypt As IntPtr
    Public Decrypt As IntPtr
    Public IsAlgSupported As IntPtr
    Public EnumAlgorithms As IntPtr
    Public EnumKeys As IntPtr
    Public ImportKey As IntPtr
    Public ExportKey As IntPtr
    Public SignHash As IntPtr
    Public VerifySignature As IntPtr
    Public PromptUser As IntPtr
    Public NotifyChangeKey As IntPtr
    Public SecretAgreement As IntPtr
    Public DeriveKey As IntPtr
    Public FreeSecret As IntPtr
    Public KeyDerivation As IntPtr
    Public CreateClaim As IntPtr
    Public VerifyClaim As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class BCRYPT_INTERFACE_VERSION(ctypes.Structure):
    _fields_ = [
        ("MajorVersion", ctypes.c_ushort),
        ("MinorVersion", ctypes.c_ushort),
    ]

class NCRYPT_KEY_STORAGE_FUNCTION_TABLE(ctypes.Structure):
    _fields_ = [
        ("Version", BCRYPT_INTERFACE_VERSION),
        ("OpenProvider", ctypes.c_void_p),
        ("OpenKey", ctypes.c_void_p),
        ("CreatePersistedKey", ctypes.c_void_p),
        ("GetProviderProperty", ctypes.c_void_p),
        ("GetKeyProperty", ctypes.c_void_p),
        ("SetProviderProperty", ctypes.c_void_p),
        ("SetKeyProperty", ctypes.c_void_p),
        ("FinalizeKey", ctypes.c_void_p),
        ("DeleteKey", ctypes.c_void_p),
        ("FreeProvider", ctypes.c_void_p),
        ("FreeKey", ctypes.c_void_p),
        ("FreeBuffer", ctypes.c_void_p),
        ("Encrypt", ctypes.c_void_p),
        ("Decrypt", ctypes.c_void_p),
        ("IsAlgSupported", ctypes.c_void_p),
        ("EnumAlgorithms", ctypes.c_void_p),
        ("EnumKeys", ctypes.c_void_p),
        ("ImportKey", ctypes.c_void_p),
        ("ExportKey", ctypes.c_void_p),
        ("SignHash", ctypes.c_void_p),
        ("VerifySignature", ctypes.c_void_p),
        ("PromptUser", ctypes.c_void_p),
        ("NotifyChangeKey", ctypes.c_void_p),
        ("SecretAgreement", ctypes.c_void_p),
        ("DeriveKey", ctypes.c_void_p),
        ("FreeSecret", ctypes.c_void_p),
        ("KeyDerivation", ctypes.c_void_p),
        ("CreateClaim", ctypes.c_void_p),
        ("VerifyClaim", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct BCRYPT_INTERFACE_VERSION {
    pub MajorVersion: u16,
    pub MinorVersion: u16,
}

#[repr(C)]
pub struct NCRYPT_KEY_STORAGE_FUNCTION_TABLE {
    pub Version: BCRYPT_INTERFACE_VERSION,
    pub OpenProvider: *mut core::ffi::c_void,
    pub OpenKey: *mut core::ffi::c_void,
    pub CreatePersistedKey: *mut core::ffi::c_void,
    pub GetProviderProperty: *mut core::ffi::c_void,
    pub GetKeyProperty: *mut core::ffi::c_void,
    pub SetProviderProperty: *mut core::ffi::c_void,
    pub SetKeyProperty: *mut core::ffi::c_void,
    pub FinalizeKey: *mut core::ffi::c_void,
    pub DeleteKey: *mut core::ffi::c_void,
    pub FreeProvider: *mut core::ffi::c_void,
    pub FreeKey: *mut core::ffi::c_void,
    pub FreeBuffer: *mut core::ffi::c_void,
    pub Encrypt: *mut core::ffi::c_void,
    pub Decrypt: *mut core::ffi::c_void,
    pub IsAlgSupported: *mut core::ffi::c_void,
    pub EnumAlgorithms: *mut core::ffi::c_void,
    pub EnumKeys: *mut core::ffi::c_void,
    pub ImportKey: *mut core::ffi::c_void,
    pub ExportKey: *mut core::ffi::c_void,
    pub SignHash: *mut core::ffi::c_void,
    pub VerifySignature: *mut core::ffi::c_void,
    pub PromptUser: *mut core::ffi::c_void,
    pub NotifyChangeKey: *mut core::ffi::c_void,
    pub SecretAgreement: *mut core::ffi::c_void,
    pub DeriveKey: *mut core::ffi::c_void,
    pub FreeSecret: *mut core::ffi::c_void,
    pub KeyDerivation: *mut core::ffi::c_void,
    pub CreateClaim: *mut core::ffi::c_void,
    pub VerifyClaim: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type BCRYPT_INTERFACE_VERSION struct {
	MajorVersion uint16
	MinorVersion uint16
}

type NCRYPT_KEY_STORAGE_FUNCTION_TABLE struct {
	Version BCRYPT_INTERFACE_VERSION
	OpenProvider uintptr
	OpenKey uintptr
	CreatePersistedKey uintptr
	GetProviderProperty uintptr
	GetKeyProperty uintptr
	SetProviderProperty uintptr
	SetKeyProperty uintptr
	FinalizeKey uintptr
	DeleteKey uintptr
	FreeProvider uintptr
	FreeKey uintptr
	FreeBuffer uintptr
	Encrypt uintptr
	Decrypt uintptr
	IsAlgSupported uintptr
	EnumAlgorithms uintptr
	EnumKeys uintptr
	ImportKey uintptr
	ExportKey uintptr
	SignHash uintptr
	VerifySignature uintptr
	PromptUser uintptr
	NotifyChangeKey uintptr
	SecretAgreement uintptr
	DeriveKey uintptr
	FreeSecret uintptr
	KeyDerivation uintptr
	CreateClaim uintptr
	VerifyClaim uintptr
}
type
  BCRYPT_INTERFACE_VERSION = record
    MajorVersion: Word;
    MinorVersion: Word;
  end;

  NCRYPT_KEY_STORAGE_FUNCTION_TABLE = record
    Version: BCRYPT_INTERFACE_VERSION;
    OpenProvider: Pointer;
    OpenKey: Pointer;
    CreatePersistedKey: Pointer;
    GetProviderProperty: Pointer;
    GetKeyProperty: Pointer;
    SetProviderProperty: Pointer;
    SetKeyProperty: Pointer;
    FinalizeKey: Pointer;
    DeleteKey: Pointer;
    FreeProvider: Pointer;
    FreeKey: Pointer;
    FreeBuffer: Pointer;
    Encrypt: Pointer;
    Decrypt: Pointer;
    IsAlgSupported: Pointer;
    EnumAlgorithms: Pointer;
    EnumKeys: Pointer;
    ImportKey: Pointer;
    ExportKey: Pointer;
    SignHash: Pointer;
    VerifySignature: Pointer;
    PromptUser: Pointer;
    NotifyChangeKey: Pointer;
    SecretAgreement: Pointer;
    DeriveKey: Pointer;
    FreeSecret: Pointer;
    KeyDerivation: Pointer;
    CreateClaim: Pointer;
    VerifyClaim: Pointer;
  end;
const BCRYPT_INTERFACE_VERSION = extern struct {
    MajorVersion: u16,
    MinorVersion: u16,
};

const NCRYPT_KEY_STORAGE_FUNCTION_TABLE = extern struct {
    Version: BCRYPT_INTERFACE_VERSION,
    OpenProvider: ?*anyopaque,
    OpenKey: ?*anyopaque,
    CreatePersistedKey: ?*anyopaque,
    GetProviderProperty: ?*anyopaque,
    GetKeyProperty: ?*anyopaque,
    SetProviderProperty: ?*anyopaque,
    SetKeyProperty: ?*anyopaque,
    FinalizeKey: ?*anyopaque,
    DeleteKey: ?*anyopaque,
    FreeProvider: ?*anyopaque,
    FreeKey: ?*anyopaque,
    FreeBuffer: ?*anyopaque,
    Encrypt: ?*anyopaque,
    Decrypt: ?*anyopaque,
    IsAlgSupported: ?*anyopaque,
    EnumAlgorithms: ?*anyopaque,
    EnumKeys: ?*anyopaque,
    ImportKey: ?*anyopaque,
    ExportKey: ?*anyopaque,
    SignHash: ?*anyopaque,
    VerifySignature: ?*anyopaque,
    PromptUser: ?*anyopaque,
    NotifyChangeKey: ?*anyopaque,
    SecretAgreement: ?*anyopaque,
    DeriveKey: ?*anyopaque,
    FreeSecret: ?*anyopaque,
    KeyDerivation: ?*anyopaque,
    CreateClaim: ?*anyopaque,
    VerifyClaim: ?*anyopaque,
};
type
  BCRYPT_INTERFACE_VERSION {.bycopy.} = object
    MajorVersion: uint16
    MinorVersion: uint16

  NCRYPT_KEY_STORAGE_FUNCTION_TABLE {.bycopy.} = object
    Version: BCRYPT_INTERFACE_VERSION
    OpenProvider: pointer
    OpenKey: pointer
    CreatePersistedKey: pointer
    GetProviderProperty: pointer
    GetKeyProperty: pointer
    SetProviderProperty: pointer
    SetKeyProperty: pointer
    FinalizeKey: pointer
    DeleteKey: pointer
    FreeProvider: pointer
    FreeKey: pointer
    FreeBuffer: pointer
    Encrypt: pointer
    Decrypt: pointer
    IsAlgSupported: pointer
    EnumAlgorithms: pointer
    EnumKeys: pointer
    ImportKey: pointer
    ExportKey: pointer
    SignHash: pointer
    VerifySignature: pointer
    PromptUser: pointer
    NotifyChangeKey: pointer
    SecretAgreement: pointer
    DeriveKey: pointer
    FreeSecret: pointer
    KeyDerivation: pointer
    CreateClaim: pointer
    VerifyClaim: pointer
struct BCRYPT_INTERFACE_VERSION
{
    ushort MajorVersion;
    ushort MinorVersion;
}

struct NCRYPT_KEY_STORAGE_FUNCTION_TABLE
{
    BCRYPT_INTERFACE_VERSION Version;
    void* OpenProvider;
    void* OpenKey;
    void* CreatePersistedKey;
    void* GetProviderProperty;
    void* GetKeyProperty;
    void* SetProviderProperty;
    void* SetKeyProperty;
    void* FinalizeKey;
    void* DeleteKey;
    void* FreeProvider;
    void* FreeKey;
    void* FreeBuffer;
    void* Encrypt;
    void* Decrypt;
    void* IsAlgSupported;
    void* EnumAlgorithms;
    void* EnumKeys;
    void* ImportKey;
    void* ExportKey;
    void* SignHash;
    void* VerifySignature;
    void* PromptUser;
    void* NotifyChangeKey;
    void* SecretAgreement;
    void* DeriveKey;
    void* FreeSecret;
    void* KeyDerivation;
    void* CreateClaim;
    void* VerifyClaim;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; NCRYPT_KEY_STORAGE_FUNCTION_TABLE サイズ: 120 バイト(x86)
dim st, 30    ; 4byte整数×30(構造体サイズ 120 / 4 切り上げ)
; Version : BCRYPT_INTERFACE_VERSION (+0, 4byte)  varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; OpenProvider : NCryptOpenStorageProviderFn (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; OpenKey : NCryptOpenKeyFn (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; CreatePersistedKey : NCryptCreatePersistedKeyFn (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; GetProviderProperty : NCryptGetProviderPropertyFn (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; GetKeyProperty : NCryptGetKeyPropertyFn (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; SetProviderProperty : NCryptSetProviderPropertyFn (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; SetKeyProperty : NCryptSetKeyPropertyFn (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; FinalizeKey : NCryptFinalizeKeyFn (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; DeleteKey : NCryptDeleteKeyFn (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; FreeProvider : NCryptFreeProviderFn (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; FreeKey : NCryptFreeKeyFn (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; FreeBuffer : NCryptFreeBufferFn (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; Encrypt : NCryptEncryptFn (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; Decrypt : NCryptDecryptFn (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; IsAlgSupported : NCryptIsAlgSupportedFn (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; EnumAlgorithms : NCryptEnumAlgorithmsFn (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; EnumKeys : NCryptEnumKeysFn (+68, 4byte)  st.17 = 値  /  値 = st.17   (lpoke/lpeek も可)
; ImportKey : NCryptImportKeyFn (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; ExportKey : NCryptExportKeyFn (+76, 4byte)  st.19 = 値  /  値 = st.19   (lpoke/lpeek も可)
; SignHash : NCryptSignHashFn (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; VerifySignature : NCryptVerifySignatureFn (+84, 4byte)  st.21 = 値  /  値 = st.21   (lpoke/lpeek も可)
; PromptUser : NCryptPromptUserFn (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; NotifyChangeKey : NCryptNotifyChangeKeyFn (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; SecretAgreement : NCryptSecretAgreementFn (+96, 4byte)  st.24 = 値  /  値 = st.24   (lpoke/lpeek も可)
; DeriveKey : NCryptDeriveKeyFn (+100, 4byte)  st.25 = 値  /  値 = st.25   (lpoke/lpeek も可)
; FreeSecret : NCryptFreeSecretFn (+104, 4byte)  st.26 = 値  /  値 = st.26   (lpoke/lpeek も可)
; KeyDerivation : NCryptKeyDerivationFn (+108, 4byte)  st.27 = 値  /  値 = st.27   (lpoke/lpeek も可)
; CreateClaim : NCryptCreateClaimFn (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; VerifyClaim : NCryptVerifyClaimFn (+116, 4byte)  st.29 = 値  /  値 = st.29   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; NCRYPT_KEY_STORAGE_FUNCTION_TABLE サイズ: 240 バイト(x64)
dim st, 60    ; 4byte整数×60(構造体サイズ 240 / 4 切り上げ)
; Version : BCRYPT_INTERFACE_VERSION (+0, 4byte)  varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; OpenProvider : NCryptOpenStorageProviderFn (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; OpenKey : NCryptOpenKeyFn (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; CreatePersistedKey : NCryptCreatePersistedKeyFn (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; GetProviderProperty : NCryptGetProviderPropertyFn (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; GetKeyProperty : NCryptGetKeyPropertyFn (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; SetProviderProperty : NCryptSetProviderPropertyFn (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; SetKeyProperty : NCryptSetKeyPropertyFn (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; FinalizeKey : NCryptFinalizeKeyFn (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; DeleteKey : NCryptDeleteKeyFn (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; FreeProvider : NCryptFreeProviderFn (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; FreeKey : NCryptFreeKeyFn (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; FreeBuffer : NCryptFreeBufferFn (+96, 8byte)  qpoke st,96,値 / qpeek(st,96)  ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; Encrypt : NCryptEncryptFn (+104, 8byte)  qpoke st,104,値 / qpeek(st,104)  ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; Decrypt : NCryptDecryptFn (+112, 8byte)  qpoke st,112,値 / qpeek(st,112)  ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; IsAlgSupported : NCryptIsAlgSupportedFn (+120, 8byte)  qpoke st,120,値 / qpeek(st,120)  ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; EnumAlgorithms : NCryptEnumAlgorithmsFn (+128, 8byte)  qpoke st,128,値 / qpeek(st,128)  ※IronHSPのみ。3.7/3.8は lpoke st,128,下位 : lpoke st,132,上位
; EnumKeys : NCryptEnumKeysFn (+136, 8byte)  qpoke st,136,値 / qpeek(st,136)  ※IronHSPのみ。3.7/3.8は lpoke st,136,下位 : lpoke st,140,上位
; ImportKey : NCryptImportKeyFn (+144, 8byte)  qpoke st,144,値 / qpeek(st,144)  ※IronHSPのみ。3.7/3.8は lpoke st,144,下位 : lpoke st,148,上位
; ExportKey : NCryptExportKeyFn (+152, 8byte)  qpoke st,152,値 / qpeek(st,152)  ※IronHSPのみ。3.7/3.8は lpoke st,152,下位 : lpoke st,156,上位
; SignHash : NCryptSignHashFn (+160, 8byte)  qpoke st,160,値 / qpeek(st,160)  ※IronHSPのみ。3.7/3.8は lpoke st,160,下位 : lpoke st,164,上位
; VerifySignature : NCryptVerifySignatureFn (+168, 8byte)  qpoke st,168,値 / qpeek(st,168)  ※IronHSPのみ。3.7/3.8は lpoke st,168,下位 : lpoke st,172,上位
; PromptUser : NCryptPromptUserFn (+176, 8byte)  qpoke st,176,値 / qpeek(st,176)  ※IronHSPのみ。3.7/3.8は lpoke st,176,下位 : lpoke st,180,上位
; NotifyChangeKey : NCryptNotifyChangeKeyFn (+184, 8byte)  qpoke st,184,値 / qpeek(st,184)  ※IronHSPのみ。3.7/3.8は lpoke st,184,下位 : lpoke st,188,上位
; SecretAgreement : NCryptSecretAgreementFn (+192, 8byte)  qpoke st,192,値 / qpeek(st,192)  ※IronHSPのみ。3.7/3.8は lpoke st,192,下位 : lpoke st,196,上位
; DeriveKey : NCryptDeriveKeyFn (+200, 8byte)  qpoke st,200,値 / qpeek(st,200)  ※IronHSPのみ。3.7/3.8は lpoke st,200,下位 : lpoke st,204,上位
; FreeSecret : NCryptFreeSecretFn (+208, 8byte)  qpoke st,208,値 / qpeek(st,208)  ※IronHSPのみ。3.7/3.8は lpoke st,208,下位 : lpoke st,212,上位
; KeyDerivation : NCryptKeyDerivationFn (+216, 8byte)  qpoke st,216,値 / qpeek(st,216)  ※IronHSPのみ。3.7/3.8は lpoke st,216,下位 : lpoke st,220,上位
; CreateClaim : NCryptCreateClaimFn (+224, 8byte)  qpoke st,224,値 / qpeek(st,224)  ※IronHSPのみ。3.7/3.8は lpoke st,224,下位 : lpoke st,228,上位
; VerifyClaim : NCryptVerifyClaimFn (+232, 8byte)  qpoke st,232,値 / qpeek(st,232)  ※IronHSPのみ。3.7/3.8は lpoke st,232,下位 : lpoke st,236,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global BCRYPT_INTERFACE_VERSION
    #field short MajorVersion
    #field short MinorVersion
#endstruct

#defstruct global NCRYPT_KEY_STORAGE_FUNCTION_TABLE
    #field BCRYPT_INTERFACE_VERSION Version
    #field intptr OpenProvider
    #field intptr OpenKey
    #field intptr CreatePersistedKey
    #field intptr GetProviderProperty
    #field intptr GetKeyProperty
    #field intptr SetProviderProperty
    #field intptr SetKeyProperty
    #field intptr FinalizeKey
    #field intptr DeleteKey
    #field intptr FreeProvider
    #field intptr FreeKey
    #field intptr FreeBuffer
    #field intptr Encrypt
    #field intptr Decrypt
    #field intptr IsAlgSupported
    #field intptr EnumAlgorithms
    #field intptr EnumKeys
    #field intptr ImportKey
    #field intptr ExportKey
    #field intptr SignHash
    #field intptr VerifySignature
    #field intptr PromptUser
    #field intptr NotifyChangeKey
    #field intptr SecretAgreement
    #field intptr DeriveKey
    #field intptr FreeSecret
    #field intptr KeyDerivation
    #field intptr CreateClaim
    #field intptr VerifyClaim
#endstruct

stdim st, NCRYPT_KEY_STORAGE_FUNCTION_TABLE        ; NSTRUCT 変数を確保