ホーム › Security.WinTrust › CRYPT_PROVIDER_DATA
CRYPT_PROVIDER_DATA
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| cbStruct | DWORD | 4 | +0 | +0 | この構造体のサイズ (バイト単位)。 | ||||||||||||
| pWintrustData | WINTRUST_DATA* | 8/4 | +8 | +4 | 検証する情報を格納する WINTRUST_DATA 構造体へのポインター。 | ||||||||||||
| fOpenedFile | BOOL | 4 | +16 | +8 | 該当する場合に、信頼プロバイダーがファイル ハンドルを開いたかどうかを示すブール値。 | ||||||||||||
| hWndParent | HWND | 8/4 | +24 | +12 | 親ウィンドウへのハンドル。指定されていない場合は、デスクトップ ウィンドウへのハンドルが使用されます。 | ||||||||||||
| pgActionID | GUID* | 8/4 | +32 | +16 | アクションと、そのアクションをサポートする信頼プロバイダーを識別する GUID 構造体へのポインター。 | ||||||||||||
| hProv | UINT_PTR | 8/4 | +40 | +20 | 暗号化サービス プロバイダー (CSP) へのハンドル。このパラメーターが NULL の場合、オペレーティング システムが既定の CSP を提供します。 | ||||||||||||
| dwError | DWORD | 4 | +48 | +24 | 低レベルのシステム エラーが発生した場合のエラー レベル。 | ||||||||||||
| dwRegSecuritySettings | DWORD | 4 | +52 | +28 | レジストリのセキュリティ設定。 | ||||||||||||
| dwRegPolicySettings | DWORD | 4 | +56 | +32 | レジストリのポリシー設定。 | ||||||||||||
| psPfns | CRYPT_PROVIDER_FUNCTIONS* | 8/4 | +64 | +36 | CRYPT_PROVIDER_FUNCTIONS 構造体へのポインター。 | ||||||||||||
| cdwTrustStepErrors | DWORD | 4 | +72 | +40 | padwTrustStepErrors 配列の要素数。 | ||||||||||||
| padwTrustStepErrors | DWORD* | 8/4 | +80 | +44 | 信頼ステップのエラーを指定する DWORD 値の配列。 | ||||||||||||
| chStores | DWORD | 4 | +88 | +48 | pahStores 配列の要素数。 | ||||||||||||
| pahStores | HCERTSTORE* | 8/4 | +96 | +52 | 証明書ストア ハンドルの配列。 | ||||||||||||
| dwEncoding | DWORD | 4 | +104 | +56 | エンコードの種類を指定する値。 | ||||||||||||
| hMsg | void* | 8/4 | +112 | +60 | 暗号化メッセージへのハンドル。 | ||||||||||||
| csSigners | DWORD | 4 | +120 | +64 | pasSigners 配列の要素数。 | ||||||||||||
| pasSigners | CRYPT_PROVIDER_SGNR* | 8/4 | +128 | +68 | CRYPT_PROVIDER_SGNR 構造体の配列へのポインター。 | ||||||||||||
| csProvPrivData | DWORD | 4 | +136 | +72 | pasProvPrivData 配列の要素数。 | ||||||||||||
| pasProvPrivData | CRYPT_PROVIDER_PRIVDATA* | 8/4 | +144 | +76 | CRYPT_PROVIDER_PRIVDATA 構造体の配列へのポインター。 | ||||||||||||
| dwSubjectChoice | DWORD | 4 | +152 | +80 | サブジェクトの選択を指定する値。 | ||||||||||||
| Anonymous | _Anonymous_e__Union | 8/4 | +160 | +84 | サブジェクト固有情報(SIP等)を保持する共用体。 | ||||||||||||
| pszUsageOID | LPSTR | 8/4 | +168 | +88 | 使用法 オブジェクト識別子 (OID) を格納する、null 終端文字列へのポインター。 | ||||||||||||
| fRecallWithState | BOOL | 4 | +176 | +92 | カタログ ファイルの状態が保持されたかどうかを示すブール値。 | ||||||||||||
| sftSystemTime | FILETIME | 8 | +180 | +96 | システム時刻。 | ||||||||||||
| pszCTLSignerUsageOID | LPSTR | 8/4 | +192 | +104 | 証明書信頼リスト (CTL) の署名者使用法 OID を表す、null 終端文字列へのポインター。 | ||||||||||||
| dwProvFlags | DWORD | 4 | +200 | +108 | 次のフラグの 1 つ以上のビット単位の組み合わせ。
| ||||||||||||
| dwFinalError | DWORD | 4 | +204 | +112 | 最終的なエラーを表す値。 | ||||||||||||
| pRequestUsage | CERT_USAGE_MATCH* | 8/4 | +208 | +116 | CERT_USAGE_MATCH 構造体へのポインター。 | ||||||||||||
| dwTrustPubSettings | DWORD | 4 | +216 | +120 | 信頼された発行元の設定を表す値。 | ||||||||||||
| dwUIStateFlags | DWORD | 4 | +220 | +124 | 信頼プロバイダーとユーザー インターフェイスの間で受け渡される状態データを指定する DWORD 値。 Windows XP with SP1 および Windows XP: このメンバーは無視されます。 | ||||||||||||
| pSigState | CRYPT_PROVIDER_SIGSTATE* | 8/4 | +224 | +128 | 署名状態(複数署名等)を保持する構造体へのポインタ。 | ||||||||||||
| pSigSettings | WINTRUST_SIGNATURE_SETTINGS* | 8/4 | +232 | +132 | 署名検証設定構造体へのポインタ。 |
共用体: _Anonymous_e__Union x64 8B / x86 4B
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| pPDSip | PROVDATA_SIP* | 8/4 | +0 | +0 | _PROVDATA_SIP 構造体へのポインター。 |
公式ドキュメント
[CRYPT_PROVIDER_DATA 構造体は、要件セクションに記載されているオペレーティング システムで使用できます。以降のバージョンでは変更されるか、使用できなくなる可能性があります。]
CRYPT_PROVIDER_DATA 構造体は、WinVerifyTrust と信頼プロバイダーの間でデータを受け渡すために使用されます。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#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 Structureimport 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: pointerstruct 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 非対応)。必要に応じ手動でアクセス。