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

CRYPT_PROVIDER_FUNCTIONS

構造体
サイズx64: 128 バイト / x86: 64 バイト

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

フィールド

フィールドサイズx64x86説明
cbStructDWORD4+0+0本構造体のバイトサイズ。
pfnAllocPFN_CPD_MEM_ALLOC8/4+8+4メモリ確保用コールバック関数へのポインタ。
pfnFreePFN_CPD_MEM_FREE8/4+16+8メモリ解放用コールバック関数へのポインタ。
pfnAddStore2ChainPFN_CPD_ADD_STORE8/4+24+12証明書ストアを連鎖に追加するコールバック関数。
pfnAddSgnr2ChainPFN_CPD_ADD_SGNR8/4+32+16署名者を連鎖に追加するコールバック関数。
pfnAddCert2ChainPFN_CPD_ADD_CERT8/4+40+20証明書を連鎖に追加するコールバック関数。
pfnAddPrivData2ChainPFN_CPD_ADD_PRIVDATA8/4+48+24プライベートデータを連鎖に追加するコールバック関数。
pfnInitializePFN_PROVIDER_INIT_CALL8/4+56+28プロバイダー初期化コールバック関数。
pfnObjectTrustPFN_PROVIDER_OBJTRUST_CALL8/4+64+32オブジェクト信頼検証コールバック関数。
pfnSignatureTrustPFN_PROVIDER_SIGTRUST_CALL8/4+72+36署名信頼検証コールバック関数。
pfnCertificateTrustPFN_PROVIDER_CERTTRUST_CALL8/4+80+40証明書信頼検証コールバック関数。
pfnFinalPolicyPFN_PROVIDER_FINALPOLICY_CALL8/4+88+44最終ポリシー判定コールバック関数。
pfnCertCheckPolicyPFN_PROVIDER_CERTCHKPOLICY_CALL8/4+96+48証明書ポリシー確認コールバック関数。
pfnTestFinalPolicyPFN_PROVIDER_TESTFINALPOLICY_CALL8/4+104+52テスト用最終ポリシー判定コールバック関数。
psUIpfnsCRYPT_PROVUI_FUNCS*8/4+112+56UI関連コールバック関数群へのポインタ。
pfnCleanupPolicyPFN_PROVIDER_CLEANUP_CALL8/4+120+60ポリシー後始末コールバック関数。

各言語での定義

#include <windows.h>

// CRYPT_PROVIDER_FUNCTIONS  (x64 128 / x86 64 バイト)
typedef struct CRYPT_PROVIDER_FUNCTIONS {
    DWORD cbStruct;
    PFN_CPD_MEM_ALLOC pfnAlloc;
    PFN_CPD_MEM_FREE pfnFree;
    PFN_CPD_ADD_STORE pfnAddStore2Chain;
    PFN_CPD_ADD_SGNR pfnAddSgnr2Chain;
    PFN_CPD_ADD_CERT pfnAddCert2Chain;
    PFN_CPD_ADD_PRIVDATA pfnAddPrivData2Chain;
    PFN_PROVIDER_INIT_CALL pfnInitialize;
    PFN_PROVIDER_OBJTRUST_CALL pfnObjectTrust;
    PFN_PROVIDER_SIGTRUST_CALL pfnSignatureTrust;
    PFN_PROVIDER_CERTTRUST_CALL pfnCertificateTrust;
    PFN_PROVIDER_FINALPOLICY_CALL pfnFinalPolicy;
    PFN_PROVIDER_CERTCHKPOLICY_CALL pfnCertCheckPolicy;
    PFN_PROVIDER_TESTFINALPOLICY_CALL pfnTestFinalPolicy;
    CRYPT_PROVUI_FUNCS* psUIpfns;
    PFN_PROVIDER_CLEANUP_CALL pfnCleanupPolicy;
} CRYPT_PROVIDER_FUNCTIONS;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CRYPT_PROVIDER_FUNCTIONS
{
    public uint cbStruct;
    public IntPtr pfnAlloc;
    public IntPtr pfnFree;
    public IntPtr pfnAddStore2Chain;
    public IntPtr pfnAddSgnr2Chain;
    public IntPtr pfnAddCert2Chain;
    public IntPtr pfnAddPrivData2Chain;
    public IntPtr pfnInitialize;
    public IntPtr pfnObjectTrust;
    public IntPtr pfnSignatureTrust;
    public IntPtr pfnCertificateTrust;
    public IntPtr pfnFinalPolicy;
    public IntPtr pfnCertCheckPolicy;
    public IntPtr pfnTestFinalPolicy;
    public IntPtr psUIpfns;
    public IntPtr pfnCleanupPolicy;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CRYPT_PROVIDER_FUNCTIONS
    Public cbStruct As UInteger
    Public pfnAlloc As IntPtr
    Public pfnFree As IntPtr
    Public pfnAddStore2Chain As IntPtr
    Public pfnAddSgnr2Chain As IntPtr
    Public pfnAddCert2Chain As IntPtr
    Public pfnAddPrivData2Chain As IntPtr
    Public pfnInitialize As IntPtr
    Public pfnObjectTrust As IntPtr
    Public pfnSignatureTrust As IntPtr
    Public pfnCertificateTrust As IntPtr
    Public pfnFinalPolicy As IntPtr
    Public pfnCertCheckPolicy As IntPtr
    Public pfnTestFinalPolicy As IntPtr
    Public psUIpfns As IntPtr
    Public pfnCleanupPolicy As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class CRYPT_PROVIDER_FUNCTIONS(ctypes.Structure):
    _fields_ = [
        ("cbStruct", wintypes.DWORD),
        ("pfnAlloc", ctypes.c_void_p),
        ("pfnFree", ctypes.c_void_p),
        ("pfnAddStore2Chain", ctypes.c_void_p),
        ("pfnAddSgnr2Chain", ctypes.c_void_p),
        ("pfnAddCert2Chain", ctypes.c_void_p),
        ("pfnAddPrivData2Chain", ctypes.c_void_p),
        ("pfnInitialize", ctypes.c_void_p),
        ("pfnObjectTrust", ctypes.c_void_p),
        ("pfnSignatureTrust", ctypes.c_void_p),
        ("pfnCertificateTrust", ctypes.c_void_p),
        ("pfnFinalPolicy", ctypes.c_void_p),
        ("pfnCertCheckPolicy", ctypes.c_void_p),
        ("pfnTestFinalPolicy", ctypes.c_void_p),
        ("psUIpfns", ctypes.c_void_p),
        ("pfnCleanupPolicy", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct CRYPT_PROVIDER_FUNCTIONS {
    pub cbStruct: u32,
    pub pfnAlloc: *mut core::ffi::c_void,
    pub pfnFree: *mut core::ffi::c_void,
    pub pfnAddStore2Chain: *mut core::ffi::c_void,
    pub pfnAddSgnr2Chain: *mut core::ffi::c_void,
    pub pfnAddCert2Chain: *mut core::ffi::c_void,
    pub pfnAddPrivData2Chain: *mut core::ffi::c_void,
    pub pfnInitialize: *mut core::ffi::c_void,
    pub pfnObjectTrust: *mut core::ffi::c_void,
    pub pfnSignatureTrust: *mut core::ffi::c_void,
    pub pfnCertificateTrust: *mut core::ffi::c_void,
    pub pfnFinalPolicy: *mut core::ffi::c_void,
    pub pfnCertCheckPolicy: *mut core::ffi::c_void,
    pub pfnTestFinalPolicy: *mut core::ffi::c_void,
    pub psUIpfns: *mut core::ffi::c_void,
    pub pfnCleanupPolicy: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type CRYPT_PROVIDER_FUNCTIONS struct {
	cbStruct uint32
	pfnAlloc uintptr
	pfnFree uintptr
	pfnAddStore2Chain uintptr
	pfnAddSgnr2Chain uintptr
	pfnAddCert2Chain uintptr
	pfnAddPrivData2Chain uintptr
	pfnInitialize uintptr
	pfnObjectTrust uintptr
	pfnSignatureTrust uintptr
	pfnCertificateTrust uintptr
	pfnFinalPolicy uintptr
	pfnCertCheckPolicy uintptr
	pfnTestFinalPolicy uintptr
	psUIpfns uintptr
	pfnCleanupPolicy uintptr
}
type
  CRYPT_PROVIDER_FUNCTIONS = record
    cbStruct: DWORD;
    pfnAlloc: Pointer;
    pfnFree: Pointer;
    pfnAddStore2Chain: Pointer;
    pfnAddSgnr2Chain: Pointer;
    pfnAddCert2Chain: Pointer;
    pfnAddPrivData2Chain: Pointer;
    pfnInitialize: Pointer;
    pfnObjectTrust: Pointer;
    pfnSignatureTrust: Pointer;
    pfnCertificateTrust: Pointer;
    pfnFinalPolicy: Pointer;
    pfnCertCheckPolicy: Pointer;
    pfnTestFinalPolicy: Pointer;
    psUIpfns: Pointer;
    pfnCleanupPolicy: Pointer;
  end;
const CRYPT_PROVIDER_FUNCTIONS = extern struct {
    cbStruct: u32,
    pfnAlloc: ?*anyopaque,
    pfnFree: ?*anyopaque,
    pfnAddStore2Chain: ?*anyopaque,
    pfnAddSgnr2Chain: ?*anyopaque,
    pfnAddCert2Chain: ?*anyopaque,
    pfnAddPrivData2Chain: ?*anyopaque,
    pfnInitialize: ?*anyopaque,
    pfnObjectTrust: ?*anyopaque,
    pfnSignatureTrust: ?*anyopaque,
    pfnCertificateTrust: ?*anyopaque,
    pfnFinalPolicy: ?*anyopaque,
    pfnCertCheckPolicy: ?*anyopaque,
    pfnTestFinalPolicy: ?*anyopaque,
    psUIpfns: ?*anyopaque,
    pfnCleanupPolicy: ?*anyopaque,
};
type
  CRYPT_PROVIDER_FUNCTIONS {.bycopy.} = object
    cbStruct: uint32
    pfnAlloc: pointer
    pfnFree: pointer
    pfnAddStore2Chain: pointer
    pfnAddSgnr2Chain: pointer
    pfnAddCert2Chain: pointer
    pfnAddPrivData2Chain: pointer
    pfnInitialize: pointer
    pfnObjectTrust: pointer
    pfnSignatureTrust: pointer
    pfnCertificateTrust: pointer
    pfnFinalPolicy: pointer
    pfnCertCheckPolicy: pointer
    pfnTestFinalPolicy: pointer
    psUIpfns: pointer
    pfnCleanupPolicy: pointer
struct CRYPT_PROVIDER_FUNCTIONS
{
    uint cbStruct;
    void* pfnAlloc;
    void* pfnFree;
    void* pfnAddStore2Chain;
    void* pfnAddSgnr2Chain;
    void* pfnAddCert2Chain;
    void* pfnAddPrivData2Chain;
    void* pfnInitialize;
    void* pfnObjectTrust;
    void* pfnSignatureTrust;
    void* pfnCertificateTrust;
    void* pfnFinalPolicy;
    void* pfnCertCheckPolicy;
    void* pfnTestFinalPolicy;
    void* psUIpfns;
    void* pfnCleanupPolicy;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; CRYPT_PROVIDER_FUNCTIONS サイズ: 64 バイト(x86)
dim st, 16    ; 4byte整数×16(構造体サイズ 64 / 4 切り上げ)
; cbStruct : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; pfnAlloc : PFN_CPD_MEM_ALLOC (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; pfnFree : PFN_CPD_MEM_FREE (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; pfnAddStore2Chain : PFN_CPD_ADD_STORE (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; pfnAddSgnr2Chain : PFN_CPD_ADD_SGNR (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; pfnAddCert2Chain : PFN_CPD_ADD_CERT (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; pfnAddPrivData2Chain : PFN_CPD_ADD_PRIVDATA (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; pfnInitialize : PFN_PROVIDER_INIT_CALL (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; pfnObjectTrust : PFN_PROVIDER_OBJTRUST_CALL (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; pfnSignatureTrust : PFN_PROVIDER_SIGTRUST_CALL (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; pfnCertificateTrust : PFN_PROVIDER_CERTTRUST_CALL (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; pfnFinalPolicy : PFN_PROVIDER_FINALPOLICY_CALL (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; pfnCertCheckPolicy : PFN_PROVIDER_CERTCHKPOLICY_CALL (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; pfnTestFinalPolicy : PFN_PROVIDER_TESTFINALPOLICY_CALL (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; psUIpfns : CRYPT_PROVUI_FUNCS* (+56, 4byte)  varptr(st)+56 を基点に操作(4byte:入れ子/配列)
; pfnCleanupPolicy : PFN_PROVIDER_CLEANUP_CALL (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; CRYPT_PROVIDER_FUNCTIONS サイズ: 128 バイト(x64)
dim st, 32    ; 4byte整数×32(構造体サイズ 128 / 4 切り上げ)
; cbStruct : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; pfnAlloc : PFN_CPD_MEM_ALLOC (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; pfnFree : PFN_CPD_MEM_FREE (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; pfnAddStore2Chain : PFN_CPD_ADD_STORE (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; pfnAddSgnr2Chain : PFN_CPD_ADD_SGNR (+32, 8byte)  qpoke st,32,値 / qpeek(st,32)  ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; pfnAddCert2Chain : PFN_CPD_ADD_CERT (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; pfnAddPrivData2Chain : PFN_CPD_ADD_PRIVDATA (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; pfnInitialize : PFN_PROVIDER_INIT_CALL (+56, 8byte)  qpoke st,56,値 / qpeek(st,56)  ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; pfnObjectTrust : PFN_PROVIDER_OBJTRUST_CALL (+64, 8byte)  qpoke st,64,値 / qpeek(st,64)  ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; pfnSignatureTrust : PFN_PROVIDER_SIGTRUST_CALL (+72, 8byte)  qpoke st,72,値 / qpeek(st,72)  ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; pfnCertificateTrust : PFN_PROVIDER_CERTTRUST_CALL (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; pfnFinalPolicy : PFN_PROVIDER_FINALPOLICY_CALL (+88, 8byte)  qpoke st,88,値 / qpeek(st,88)  ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; pfnCertCheckPolicy : PFN_PROVIDER_CERTCHKPOLICY_CALL (+96, 8byte)  qpoke st,96,値 / qpeek(st,96)  ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; pfnTestFinalPolicy : PFN_PROVIDER_TESTFINALPOLICY_CALL (+104, 8byte)  qpoke st,104,値 / qpeek(st,104)  ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; psUIpfns : CRYPT_PROVUI_FUNCS* (+112, 8byte)  varptr(st)+112 を基点に操作(8byte:入れ子/配列)
; pfnCleanupPolicy : PFN_PROVIDER_CLEANUP_CALL (+120, 8byte)  qpoke st,120,値 / qpeek(st,120)  ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global CRYPT_PROVIDER_FUNCTIONS
    #field int cbStruct
    #field intptr pfnAlloc
    #field intptr pfnFree
    #field intptr pfnAddStore2Chain
    #field intptr pfnAddSgnr2Chain
    #field intptr pfnAddCert2Chain
    #field intptr pfnAddPrivData2Chain
    #field intptr pfnInitialize
    #field intptr pfnObjectTrust
    #field intptr pfnSignatureTrust
    #field intptr pfnCertificateTrust
    #field intptr pfnFinalPolicy
    #field intptr pfnCertCheckPolicy
    #field intptr pfnTestFinalPolicy
    #field intptr psUIpfns
    #field intptr pfnCleanupPolicy
#endstruct

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