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

CRYPT_PROVIDER_DATA

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

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

フィールド

フィールドサイズx64x86説明
cbStructDWORD4+0+0本構造体のバイトサイズ。
pWintrustDataWINTRUST_DATA*8/4+8+4元のWINTRUST_DATA構造体へのポインタ。
fOpenedFileBOOL4+16+8プロバイダーがファイルを開いたかを示すフラグ。
hWndParentHWND8/4+24+12UI表示時の親ウィンドウハンドル。
pgActionIDGUID*8/4+32+16実行中のアクションを識別するGUIDへのポインタ。
hProvUINT_PTR8/4+40+20暗号サービスプロバイダー(CSP)のハンドル。
dwErrorDWORD4+48+24現在のエラーコードを表す。
dwRegSecuritySettingsDWORD4+52+28レジストリから取得したセキュリティ設定値。
dwRegPolicySettingsDWORD4+56+32レジストリから取得したポリシー設定値。
psPfnsCRYPT_PROVIDER_FUNCTIONS*8/4+64+36プロバイダーのコールバック関数群へのポインタ。
cdwTrustStepErrorsDWORD4+72+40padwTrustStepErrors配列の要素数。
padwTrustStepErrorsDWORD*8/4+80+44各信頼検証ステップのエラーコード配列。
chStoresDWORD4+88+48pahStores配列に含まれる証明書ストア数。
pahStoresHCERTSTORE*8/4+96+52検証に使用する証明書ストアハンドルの配列。
dwEncodingDWORD4+104+56メッセージのエンコード種別を表す。
hMsgvoid*8/4+112+60暗号メッセージのハンドル。
csSignersDWORD4+120+64pasSigners配列に含まれる署名者数。
pasSignersCRYPT_PROVIDER_SGNR*8/4+128+68署名者情報構造体の配列へのポインタ。
csProvPrivDataDWORD4+136+72pasProvPrivData配列の要素数。
pasProvPrivDataCRYPT_PROVIDER_PRIVDATA*8/4+144+76プロバイダー固有のプライベートデータ配列。
dwSubjectChoiceDWORD4+152+80Anonymous共用体のどのサブジェクト情報を使うかを示す選択値。
Anonymous_Anonymous_e__Union8/4+160+84サブジェクト固有情報(SIP等)を保持する共用体。
pszUsageOIDLPSTR8/4+168+88要求される証明書の用途を示すOID文字列。
fRecallWithStateBOOL4+176+92状態を保持して再呼び出しするかを示すフラグ。
sftSystemTimeFILETIME8+180+96検証時のシステム時刻をFILETIME形式で表す。
pszCTLSignerUsageOIDLPSTR8/4+192+104CTL署名者の用途を示すOID文字列。
dwProvFlagsDWORD4+200+108プロバイダーの動作を制御するフラグ群。
dwFinalErrorDWORD4+204+112最終的なエラーコードを表す。
pRequestUsageCERT_USAGE_MATCH*8/4+208+116要求される証明書用途の照合条件へのポインタ。
dwTrustPubSettingsDWORD4+216+120信頼された発行元に関する設定値。
dwUIStateFlagsDWORD4+220+124UI状態を表すフラグ群。
pSigStateCRYPT_PROVIDER_SIGSTATE*8/4+224+128署名状態(複数署名等)を保持する構造体へのポインタ。
pSigSettingsWINTRUST_SIGNATURE_SETTINGS*8/4+232+132署名検証設定構造体へのポインタ。

共用体: _Anonymous_e__Union x64 8B / x86 4B

フィールドサイズx64x86
pPDSipPROVDATA_SIP*8/4+0+0

各言語での定義

#include <windows.h>

// FILETIME  (x64 8 / x86 8 バイト)
typedef struct FILETIME {
    DWORD dwLowDateTime;
    DWORD dwHighDateTime;
} FILETIME;

// CRYPT_PROVIDER_DATA  (x64 240 / x86 136 バイト)
typedef struct CRYPT_PROVIDER_DATA {
    DWORD cbStruct;
    WINTRUST_DATA* pWintrustData;
    BOOL fOpenedFile;
    HWND hWndParent;
    GUID* pgActionID;
    UINT_PTR hProv;
    DWORD dwError;
    DWORD dwRegSecuritySettings;
    DWORD dwRegPolicySettings;
    CRYPT_PROVIDER_FUNCTIONS* psPfns;
    DWORD cdwTrustStepErrors;
    DWORD* padwTrustStepErrors;
    DWORD chStores;
    HCERTSTORE* pahStores;
    DWORD dwEncoding;
    void* hMsg;
    DWORD csSigners;
    CRYPT_PROVIDER_SGNR* pasSigners;
    DWORD csProvPrivData;
    CRYPT_PROVIDER_PRIVDATA* pasProvPrivData;
    DWORD dwSubjectChoice;
    _Anonymous_e__Union Anonymous;
    LPSTR pszUsageOID;
    BOOL fRecallWithState;
    FILETIME sftSystemTime;
    LPSTR pszCTLSignerUsageOID;
    DWORD dwProvFlags;
    DWORD dwFinalError;
    CERT_USAGE_MATCH* pRequestUsage;
    DWORD dwTrustPubSettings;
    DWORD dwUIStateFlags;
    CRYPT_PROVIDER_SIGSTATE* pSigState;
    WINTRUST_SIGNATURE_SETTINGS* pSigSettings;
} CRYPT_PROVIDER_DATA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct FILETIME
{
    public uint dwLowDateTime;
    public uint dwHighDateTime;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CRYPT_PROVIDER_DATA
{
    public uint cbStruct;
    public IntPtr pWintrustData;
    [MarshalAs(UnmanagedType.Bool)] public bool fOpenedFile;
    public IntPtr hWndParent;
    public IntPtr pgActionID;
    public UIntPtr hProv;
    public uint dwError;
    public uint dwRegSecuritySettings;
    public uint dwRegPolicySettings;
    public IntPtr psPfns;
    public uint cdwTrustStepErrors;
    public IntPtr padwTrustStepErrors;
    public uint chStores;
    public IntPtr pahStores;
    public uint dwEncoding;
    public IntPtr hMsg;
    public uint csSigners;
    public IntPtr pasSigners;
    public uint csProvPrivData;
    public IntPtr pasProvPrivData;
    public uint dwSubjectChoice;
    public _Anonymous_e__Union Anonymous;
    public IntPtr pszUsageOID;
    [MarshalAs(UnmanagedType.Bool)] public bool fRecallWithState;
    public FILETIME sftSystemTime;
    public IntPtr pszCTLSignerUsageOID;
    public uint dwProvFlags;
    public uint dwFinalError;
    public IntPtr pRequestUsage;
    public uint dwTrustPubSettings;
    public uint dwUIStateFlags;
    public IntPtr pSigState;
    public IntPtr pSigSettings;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure FILETIME
    Public dwLowDateTime As UInteger
    Public dwHighDateTime As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CRYPT_PROVIDER_DATA
    Public cbStruct As UInteger
    Public pWintrustData As IntPtr
    <MarshalAs(UnmanagedType.Bool)> Public fOpenedFile As Boolean
    Public hWndParent As IntPtr
    Public pgActionID As IntPtr
    Public hProv As UIntPtr
    Public dwError As UInteger
    Public dwRegSecuritySettings As UInteger
    Public dwRegPolicySettings As UInteger
    Public psPfns As IntPtr
    Public cdwTrustStepErrors As UInteger
    Public padwTrustStepErrors As IntPtr
    Public chStores As UInteger
    Public pahStores As IntPtr
    Public dwEncoding As UInteger
    Public hMsg As IntPtr
    Public csSigners As UInteger
    Public pasSigners As IntPtr
    Public csProvPrivData As UInteger
    Public pasProvPrivData As IntPtr
    Public dwSubjectChoice As UInteger
    Public Anonymous As _Anonymous_e__Union
    Public pszUsageOID As IntPtr
    <MarshalAs(UnmanagedType.Bool)> Public fRecallWithState As Boolean
    Public sftSystemTime As FILETIME
    Public pszCTLSignerUsageOID As IntPtr
    Public dwProvFlags As UInteger
    Public dwFinalError As UInteger
    Public pRequestUsage As IntPtr
    Public dwTrustPubSettings As UInteger
    Public dwUIStateFlags As UInteger
    Public pSigState As IntPtr
    Public pSigSettings As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class FILETIME(ctypes.Structure):
    _fields_ = [
        ("dwLowDateTime", wintypes.DWORD),
        ("dwHighDateTime", wintypes.DWORD),
    ]

class CRYPT_PROVIDER_DATA(ctypes.Structure):
    _fields_ = [
        ("cbStruct", wintypes.DWORD),
        ("pWintrustData", ctypes.c_void_p),
        ("fOpenedFile", wintypes.BOOL),
        ("hWndParent", ctypes.c_void_p),
        ("pgActionID", ctypes.c_void_p),
        ("hProv", ctypes.c_size_t),
        ("dwError", wintypes.DWORD),
        ("dwRegSecuritySettings", wintypes.DWORD),
        ("dwRegPolicySettings", wintypes.DWORD),
        ("psPfns", ctypes.c_void_p),
        ("cdwTrustStepErrors", wintypes.DWORD),
        ("padwTrustStepErrors", ctypes.c_void_p),
        ("chStores", wintypes.DWORD),
        ("pahStores", ctypes.c_void_p),
        ("dwEncoding", wintypes.DWORD),
        ("hMsg", ctypes.c_void_p),
        ("csSigners", wintypes.DWORD),
        ("pasSigners", ctypes.c_void_p),
        ("csProvPrivData", wintypes.DWORD),
        ("pasProvPrivData", ctypes.c_void_p),
        ("dwSubjectChoice", wintypes.DWORD),
        ("Anonymous", _Anonymous_e__Union),
        ("pszUsageOID", ctypes.c_void_p),
        ("fRecallWithState", wintypes.BOOL),
        ("sftSystemTime", FILETIME),
        ("pszCTLSignerUsageOID", ctypes.c_void_p),
        ("dwProvFlags", wintypes.DWORD),
        ("dwFinalError", wintypes.DWORD),
        ("pRequestUsage", ctypes.c_void_p),
        ("dwTrustPubSettings", wintypes.DWORD),
        ("dwUIStateFlags", wintypes.DWORD),
        ("pSigState", ctypes.c_void_p),
        ("pSigSettings", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct FILETIME {
    pub dwLowDateTime: u32,
    pub dwHighDateTime: u32,
}

#[repr(C)]
pub struct CRYPT_PROVIDER_DATA {
    pub cbStruct: u32,
    pub pWintrustData: *mut core::ffi::c_void,
    pub fOpenedFile: i32,
    pub hWndParent: *mut core::ffi::c_void,
    pub pgActionID: *mut core::ffi::c_void,
    pub hProv: usize,
    pub dwError: u32,
    pub dwRegSecuritySettings: u32,
    pub dwRegPolicySettings: u32,
    pub psPfns: *mut core::ffi::c_void,
    pub cdwTrustStepErrors: u32,
    pub padwTrustStepErrors: *mut core::ffi::c_void,
    pub chStores: u32,
    pub pahStores: *mut core::ffi::c_void,
    pub dwEncoding: u32,
    pub hMsg: *mut core::ffi::c_void,
    pub csSigners: u32,
    pub pasSigners: *mut core::ffi::c_void,
    pub csProvPrivData: u32,
    pub pasProvPrivData: *mut core::ffi::c_void,
    pub dwSubjectChoice: u32,
    pub Anonymous: _Anonymous_e__Union,
    pub pszUsageOID: *mut core::ffi::c_void,
    pub fRecallWithState: i32,
    pub sftSystemTime: FILETIME,
    pub pszCTLSignerUsageOID: *mut core::ffi::c_void,
    pub dwProvFlags: u32,
    pub dwFinalError: u32,
    pub pRequestUsage: *mut core::ffi::c_void,
    pub dwTrustPubSettings: u32,
    pub dwUIStateFlags: u32,
    pub pSigState: *mut core::ffi::c_void,
    pub pSigSettings: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type FILETIME struct {
	dwLowDateTime uint32
	dwHighDateTime uint32
}

type CRYPT_PROVIDER_DATA struct {
	cbStruct uint32
	pWintrustData uintptr
	fOpenedFile int32
	hWndParent uintptr
	pgActionID uintptr
	hProv uintptr
	dwError uint32
	dwRegSecuritySettings uint32
	dwRegPolicySettings uint32
	psPfns uintptr
	cdwTrustStepErrors uint32
	padwTrustStepErrors uintptr
	chStores uint32
	pahStores uintptr
	dwEncoding uint32
	hMsg uintptr
	csSigners uint32
	pasSigners uintptr
	csProvPrivData uint32
	pasProvPrivData uintptr
	dwSubjectChoice uint32
	Anonymous _Anonymous_e__Union
	pszUsageOID uintptr
	fRecallWithState int32
	sftSystemTime FILETIME
	pszCTLSignerUsageOID uintptr
	dwProvFlags uint32
	dwFinalError uint32
	pRequestUsage uintptr
	dwTrustPubSettings uint32
	dwUIStateFlags uint32
	pSigState uintptr
	pSigSettings uintptr
}
type
  FILETIME = record
    dwLowDateTime: DWORD;
    dwHighDateTime: DWORD;
  end;

  CRYPT_PROVIDER_DATA = record
    cbStruct: DWORD;
    pWintrustData: Pointer;
    fOpenedFile: BOOL;
    hWndParent: Pointer;
    pgActionID: Pointer;
    hProv: NativeUInt;
    dwError: DWORD;
    dwRegSecuritySettings: DWORD;
    dwRegPolicySettings: DWORD;
    psPfns: Pointer;
    cdwTrustStepErrors: DWORD;
    padwTrustStepErrors: Pointer;
    chStores: DWORD;
    pahStores: Pointer;
    dwEncoding: DWORD;
    hMsg: Pointer;
    csSigners: DWORD;
    pasSigners: Pointer;
    csProvPrivData: DWORD;
    pasProvPrivData: Pointer;
    dwSubjectChoice: DWORD;
    Anonymous: _Anonymous_e__Union;
    pszUsageOID: Pointer;
    fRecallWithState: BOOL;
    sftSystemTime: FILETIME;
    pszCTLSignerUsageOID: Pointer;
    dwProvFlags: DWORD;
    dwFinalError: DWORD;
    pRequestUsage: Pointer;
    dwTrustPubSettings: DWORD;
    dwUIStateFlags: DWORD;
    pSigState: Pointer;
    pSigSettings: Pointer;
  end;
const FILETIME = extern struct {
    dwLowDateTime: u32,
    dwHighDateTime: u32,
};

const CRYPT_PROVIDER_DATA = extern struct {
    cbStruct: u32,
    pWintrustData: ?*anyopaque,
    fOpenedFile: i32,
    hWndParent: ?*anyopaque,
    pgActionID: ?*anyopaque,
    hProv: usize,
    dwError: u32,
    dwRegSecuritySettings: u32,
    dwRegPolicySettings: u32,
    psPfns: ?*anyopaque,
    cdwTrustStepErrors: u32,
    padwTrustStepErrors: ?*anyopaque,
    chStores: u32,
    pahStores: ?*anyopaque,
    dwEncoding: u32,
    hMsg: ?*anyopaque,
    csSigners: u32,
    pasSigners: ?*anyopaque,
    csProvPrivData: u32,
    pasProvPrivData: ?*anyopaque,
    dwSubjectChoice: u32,
    Anonymous: _Anonymous_e__Union,
    pszUsageOID: ?*anyopaque,
    fRecallWithState: i32,
    sftSystemTime: FILETIME,
    pszCTLSignerUsageOID: ?*anyopaque,
    dwProvFlags: u32,
    dwFinalError: u32,
    pRequestUsage: ?*anyopaque,
    dwTrustPubSettings: u32,
    dwUIStateFlags: u32,
    pSigState: ?*anyopaque,
    pSigSettings: ?*anyopaque,
};
type
  FILETIME {.bycopy.} = object
    dwLowDateTime: uint32
    dwHighDateTime: uint32

  CRYPT_PROVIDER_DATA {.bycopy.} = object
    cbStruct: uint32
    pWintrustData: pointer
    fOpenedFile: int32
    hWndParent: pointer
    pgActionID: pointer
    hProv: uint
    dwError: uint32
    dwRegSecuritySettings: uint32
    dwRegPolicySettings: uint32
    psPfns: pointer
    cdwTrustStepErrors: uint32
    padwTrustStepErrors: pointer
    chStores: uint32
    pahStores: pointer
    dwEncoding: uint32
    hMsg: pointer
    csSigners: uint32
    pasSigners: pointer
    csProvPrivData: uint32
    pasProvPrivData: pointer
    dwSubjectChoice: uint32
    Anonymous: _Anonymous_e__Union
    pszUsageOID: pointer
    fRecallWithState: int32
    sftSystemTime: FILETIME
    pszCTLSignerUsageOID: pointer
    dwProvFlags: uint32
    dwFinalError: uint32
    pRequestUsage: pointer
    dwTrustPubSettings: uint32
    dwUIStateFlags: uint32
    pSigState: pointer
    pSigSettings: pointer
struct FILETIME
{
    uint dwLowDateTime;
    uint dwHighDateTime;
}

struct CRYPT_PROVIDER_DATA
{
    uint cbStruct;
    void* pWintrustData;
    int fOpenedFile;
    void* hWndParent;
    void* pgActionID;
    size_t hProv;
    uint dwError;
    uint dwRegSecuritySettings;
    uint dwRegPolicySettings;
    void* psPfns;
    uint cdwTrustStepErrors;
    void* padwTrustStepErrors;
    uint chStores;
    void* pahStores;
    uint dwEncoding;
    void* hMsg;
    uint csSigners;
    void* pasSigners;
    uint csProvPrivData;
    void* pasProvPrivData;
    uint dwSubjectChoice;
    _Anonymous_e__Union Anonymous;
    void* pszUsageOID;
    int fRecallWithState;
    FILETIME sftSystemTime;
    void* pszCTLSignerUsageOID;
    uint dwProvFlags;
    uint dwFinalError;
    void* pRequestUsage;
    uint dwTrustPubSettings;
    uint dwUIStateFlags;
    void* pSigState;
    void* pSigSettings;
}

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_DATA サイズ: 136 バイト(x86)
dim st, 34    ; 4byte整数×34(構造体サイズ 136 / 4 切り上げ)
; cbStruct : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; pWintrustData : WINTRUST_DATA* (+4, 4byte)  varptr(st)+4 を基点に操作(4byte:入れ子/配列)
; fOpenedFile : BOOL (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; hWndParent : HWND (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; pgActionID : GUID* (+16, 4byte)  varptr(st)+16 を基点に操作(4byte:入れ子/配列)
; hProv : UINT_PTR (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; dwError : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; dwRegSecuritySettings : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; dwRegPolicySettings : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; psPfns : CRYPT_PROVIDER_FUNCTIONS* (+36, 4byte)  varptr(st)+36 を基点に操作(4byte:入れ子/配列)
; cdwTrustStepErrors : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; padwTrustStepErrors : DWORD* (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; chStores : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; pahStores : HCERTSTORE* (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; dwEncoding : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; hMsg : void* (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; csSigners : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; pasSigners : CRYPT_PROVIDER_SGNR* (+68, 4byte)  varptr(st)+68 を基点に操作(4byte:入れ子/配列)
; csProvPrivData : DWORD (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; pasProvPrivData : CRYPT_PROVIDER_PRIVDATA* (+76, 4byte)  varptr(st)+76 を基点に操作(4byte:入れ子/配列)
; dwSubjectChoice : DWORD (+80, 4byte)  st.20 = 値  /  値 = st.20   (lpoke/lpeek も可)
; Anonymous : _Anonymous_e__Union (+84, 4byte)  varptr(st)+84 を基点に操作(4byte:入れ子/配列)
; pszUsageOID : LPSTR (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; fRecallWithState : BOOL (+92, 4byte)  st.23 = 値  /  値 = st.23   (lpoke/lpeek も可)
; sftSystemTime : FILETIME (+96, 8byte)  varptr(st)+96 を基点に操作(8byte:入れ子/配列)
; pszCTLSignerUsageOID : LPSTR (+104, 4byte)  st.26 = 値  /  値 = st.26   (lpoke/lpeek も可)
; dwProvFlags : DWORD (+108, 4byte)  st.27 = 値  /  値 = st.27   (lpoke/lpeek も可)
; dwFinalError : DWORD (+112, 4byte)  st.28 = 値  /  値 = st.28   (lpoke/lpeek も可)
; pRequestUsage : CERT_USAGE_MATCH* (+116, 4byte)  varptr(st)+116 を基点に操作(4byte:入れ子/配列)
; dwTrustPubSettings : DWORD (+120, 4byte)  st.30 = 値  /  値 = st.30   (lpoke/lpeek も可)
; dwUIStateFlags : DWORD (+124, 4byte)  st.31 = 値  /  値 = st.31   (lpoke/lpeek も可)
; pSigState : CRYPT_PROVIDER_SIGSTATE* (+128, 4byte)  varptr(st)+128 を基点に操作(4byte:入れ子/配列)
; pSigSettings : WINTRUST_SIGNATURE_SETTINGS* (+132, 4byte)  varptr(st)+132 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; CRYPT_PROVIDER_DATA サイズ: 240 バイト(x64)
dim st, 60    ; 4byte整数×60(構造体サイズ 240 / 4 切り上げ)
; cbStruct : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; pWintrustData : WINTRUST_DATA* (+8, 8byte)  varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; fOpenedFile : BOOL (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; hWndParent : HWND (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; pgActionID : GUID* (+32, 8byte)  varptr(st)+32 を基点に操作(8byte:入れ子/配列)
; hProv : UINT_PTR (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; dwError : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; dwRegSecuritySettings : DWORD (+52, 4byte)  st.13 = 値  /  値 = st.13   (lpoke/lpeek も可)
; dwRegPolicySettings : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; psPfns : CRYPT_PROVIDER_FUNCTIONS* (+64, 8byte)  varptr(st)+64 を基点に操作(8byte:入れ子/配列)
; cdwTrustStepErrors : DWORD (+72, 4byte)  st.18 = 値  /  値 = st.18   (lpoke/lpeek も可)
; padwTrustStepErrors : DWORD* (+80, 8byte)  qpoke st,80,値 / qpeek(st,80)  ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; chStores : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; pahStores : HCERTSTORE* (+96, 8byte)  qpoke st,96,値 / qpeek(st,96)  ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; dwEncoding : DWORD (+104, 4byte)  st.26 = 値  /  値 = st.26   (lpoke/lpeek も可)
; hMsg : void* (+112, 8byte)  qpoke st,112,値 / qpeek(st,112)  ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; csSigners : DWORD (+120, 4byte)  st.30 = 値  /  値 = st.30   (lpoke/lpeek も可)
; pasSigners : CRYPT_PROVIDER_SGNR* (+128, 8byte)  varptr(st)+128 を基点に操作(8byte:入れ子/配列)
; csProvPrivData : DWORD (+136, 4byte)  st.34 = 値  /  値 = st.34   (lpoke/lpeek も可)
; pasProvPrivData : CRYPT_PROVIDER_PRIVDATA* (+144, 8byte)  varptr(st)+144 を基点に操作(8byte:入れ子/配列)
; dwSubjectChoice : DWORD (+152, 4byte)  st.38 = 値  /  値 = st.38   (lpoke/lpeek も可)
; Anonymous : _Anonymous_e__Union (+160, 8byte)  varptr(st)+160 を基点に操作(8byte:入れ子/配列)
; pszUsageOID : LPSTR (+168, 8byte)  qpoke st,168,値 / qpeek(st,168)  ※IronHSPのみ。3.7/3.8は lpoke st,168,下位 : lpoke st,172,上位
; fRecallWithState : BOOL (+176, 4byte)  st.44 = 値  /  値 = st.44   (lpoke/lpeek も可)
; sftSystemTime : FILETIME (+180, 8byte)  varptr(st)+180 を基点に操作(8byte:入れ子/配列)
; pszCTLSignerUsageOID : LPSTR (+192, 8byte)  qpoke st,192,値 / qpeek(st,192)  ※IronHSPのみ。3.7/3.8は lpoke st,192,下位 : lpoke st,196,上位
; dwProvFlags : DWORD (+200, 4byte)  st.50 = 値  /  値 = st.50   (lpoke/lpeek も可)
; dwFinalError : DWORD (+204, 4byte)  st.51 = 値  /  値 = st.51   (lpoke/lpeek も可)
; pRequestUsage : CERT_USAGE_MATCH* (+208, 8byte)  varptr(st)+208 を基点に操作(8byte:入れ子/配列)
; dwTrustPubSettings : DWORD (+216, 4byte)  st.54 = 値  /  値 = st.54   (lpoke/lpeek も可)
; dwUIStateFlags : DWORD (+220, 4byte)  st.55 = 値  /  値 = st.55   (lpoke/lpeek も可)
; pSigState : CRYPT_PROVIDER_SIGSTATE* (+224, 8byte)  varptr(st)+224 を基点に操作(8byte:入れ子/配列)
; pSigSettings : WINTRUST_SIGNATURE_SETTINGS* (+232, 8byte)  varptr(st)+232 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global FILETIME
    #field int dwLowDateTime
    #field int dwHighDateTime
#endstruct

#defstruct global CRYPT_PROVIDER_DATA
    #field int cbStruct
    #field intptr pWintrustData
    #field bool fOpenedFile
    #field intptr hWndParent
    #field intptr pgActionID
    #field intptr hProv
    #field int dwError
    #field int dwRegSecuritySettings
    #field int dwRegPolicySettings
    #field intptr psPfns
    #field int cdwTrustStepErrors
    #field intptr padwTrustStepErrors
    #field int chStores
    #field intptr pahStores
    #field int dwEncoding
    #field intptr hMsg
    #field int csSigners
    #field intptr pasSigners
    #field int csProvPrivData
    #field intptr pasProvPrivData
    #field int dwSubjectChoice
    #field byte Anonymous 8
    #field intptr pszUsageOID
    #field bool fRecallWithState
    #field FILETIME sftSystemTime
    #field intptr pszCTLSignerUsageOID
    #field int dwProvFlags
    #field int dwFinalError
    #field intptr pRequestUsage
    #field int dwTrustPubSettings
    #field int dwUIStateFlags
    #field intptr pSigState
    #field intptr pSigSettings
#endstruct

stdim st, CRYPT_PROVIDER_DATA        ; NSTRUCT 変数を確保
st->cbStruct = 100
mes "cbStruct=" + st->cbStruct
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。