ホーム › 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 | UI表示時の親ウィンドウハンドル。 |
| pgActionID | GUID* | 8/4 | +32 | +16 | 実行中のアクションを識別するGUIDへのポインタ。 |
| hProv | UINT_PTR | 8/4 | +40 | +20 | 暗号サービスプロバイダー(CSP)のハンドル。 |
| dwError | DWORD | 4 | +48 | +24 | 現在のエラーコードを表す。 |
| dwRegSecuritySettings | DWORD | 4 | +52 | +28 | レジストリから取得したセキュリティ設定値。 |
| dwRegPolicySettings | DWORD | 4 | +56 | +32 | レジストリから取得したポリシー設定値。 |
| psPfns | CRYPT_PROVIDER_FUNCTIONS* | 8/4 | +64 | +36 | プロバイダーのコールバック関数群へのポインタ。 |
| cdwTrustStepErrors | DWORD | 4 | +72 | +40 | padwTrustStepErrors配列の要素数。 |
| padwTrustStepErrors | DWORD* | 8/4 | +80 | +44 | 各信頼検証ステップのエラーコード配列。 |
| 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 | 署名者情報構造体の配列へのポインタ。 |
| csProvPrivData | DWORD | 4 | +136 | +72 | pasProvPrivData配列の要素数。 |
| pasProvPrivData | CRYPT_PROVIDER_PRIVDATA* | 8/4 | +144 | +76 | プロバイダー固有のプライベートデータ配列。 |
| dwSubjectChoice | DWORD | 4 | +152 | +80 | Anonymous共用体のどのサブジェクト情報を使うかを示す選択値。 |
| Anonymous | _Anonymous_e__Union | 8/4 | +160 | +84 | サブジェクト固有情報(SIP等)を保持する共用体。 |
| pszUsageOID | LPSTR | 8/4 | +168 | +88 | 要求される証明書の用途を示すOID文字列。 |
| fRecallWithState | BOOL | 4 | +176 | +92 | 状態を保持して再呼び出しするかを示すフラグ。 |
| sftSystemTime | FILETIME | 8 | +180 | +96 | 検証時のシステム時刻をFILETIME形式で表す。 |
| pszCTLSignerUsageOID | LPSTR | 8/4 | +192 | +104 | CTL署名者の用途を示すOID文字列。 |
| dwProvFlags | DWORD | 4 | +200 | +108 | プロバイダーの動作を制御するフラグ群。 |
| dwFinalError | DWORD | 4 | +204 | +112 | 最終的なエラーコードを表す。 |
| pRequestUsage | CERT_USAGE_MATCH* | 8/4 | +208 | +116 | 要求される証明書用途の照合条件へのポインタ。 |
| dwTrustPubSettings | DWORD | 4 | +216 | +120 | 信頼された発行元に関する設定値。 |
| dwUIStateFlags | DWORD | 4 | +220 | +124 | UI状態を表すフラグ群。 |
| 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 |
各言語での定義
#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 非対応)。必要に応じ手動でアクセス。