ホーム › Security.Cryptography.UI › CERT_VERIFY_CERTIFICATE_TRUST
CERT_VERIFY_CERTIFICATE_TRUST
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| cbSize | DWORD | 4 | +0 | +0 | この構造体のバイト単位サイズ。呼び出し前に設定する。 |
| pccert | CERT_CONTEXT* | 8/4 | +8 | +4 | 検証対象の証明書コンテキストへのポインタ。 |
| dwFlags | DWORD | 4 | +16 | +8 | 信頼検証の動作を制御するフラグ。 |
| dwIgnoreErr | DWORD | 4 | +20 | +12 | 無視するエラーを指定するビットマスク。 |
| pdwErrors | DWORD* | 8/4 | +24 | +16 | 検出されたエラーを受け取るDWORDへのポインタ。 |
| pszUsageOid | LPSTR | 8/4 | +32 | +20 | 検証する用途のOIDを示すANSI文字列。NULL可。 |
| hprov | UINT_PTR | 8/4 | +40 | +24 | 暗号化サービスプロバイダーのハンドル。 |
| cRootStores | DWORD | 4 | +48 | +28 | rghstoreRoots配列のルートストア数。 |
| rghstoreRoots | HCERTSTORE* | 8/4 | +56 | +32 | ルート証明書ストアハンドルの配列。 |
| cStores | DWORD | 4 | +64 | +36 | rghstoreCAs配列の中間CAストア数。 |
| rghstoreCAs | HCERTSTORE* | 8/4 | +72 | +40 | 中間CA証明書ストアハンドルの配列。 |
| cTrustStores | DWORD | 4 | +80 | +44 | rghstoreTrust配列の信頼ストア数。 |
| rghstoreTrust | HCERTSTORE* | 8/4 | +88 | +48 | 信頼された証明書ストアハンドルの配列。 |
| lCustData | LPARAM | 8/4 | +96 | +52 | コールバックに渡されるユーザー定義データ。 |
| pfnTrustHelper | PFNTRUSTHELPER | 8/4 | +104 | +56 | 信頼判定を補助するコールバック関数ポインタ。NULL可。 |
| pcChain | DWORD* | 8/4 | +112 | +60 | 構築されたチェーン数を受け取るポインタ(出力)。 |
| prgChain | CERT_CONTEXT*** | 8/4 | +120 | +64 | 構築された証明書チェーン配列へのポインタ(出力)。 |
| prgdwErrors | DWORD** | 8/4 | +128 | +68 | 各チェーンのエラー配列へのポインタ(出力)。 |
| prgpbTrustInfo | CRYPT_INTEGER_BLOB** | 8/4 | +136 | +72 | 各チェーンの信頼情報BLOB配列へのポインタ(出力)。 |
各言語での定義
#include <windows.h>
// CERT_VERIFY_CERTIFICATE_TRUST (x64 144 / x86 76 バイト)
typedef struct CERT_VERIFY_CERTIFICATE_TRUST {
DWORD cbSize;
CERT_CONTEXT* pccert;
DWORD dwFlags;
DWORD dwIgnoreErr;
DWORD* pdwErrors;
LPSTR pszUsageOid;
UINT_PTR hprov;
DWORD cRootStores;
HCERTSTORE* rghstoreRoots;
DWORD cStores;
HCERTSTORE* rghstoreCAs;
DWORD cTrustStores;
HCERTSTORE* rghstoreTrust;
LPARAM lCustData;
PFNTRUSTHELPER pfnTrustHelper;
DWORD* pcChain;
CERT_CONTEXT*** prgChain;
DWORD** prgdwErrors;
CRYPT_INTEGER_BLOB** prgpbTrustInfo;
} CERT_VERIFY_CERTIFICATE_TRUST;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CERT_VERIFY_CERTIFICATE_TRUST
{
public uint cbSize;
public IntPtr pccert;
public uint dwFlags;
public uint dwIgnoreErr;
public IntPtr pdwErrors;
public IntPtr pszUsageOid;
public UIntPtr hprov;
public uint cRootStores;
public IntPtr rghstoreRoots;
public uint cStores;
public IntPtr rghstoreCAs;
public uint cTrustStores;
public IntPtr rghstoreTrust;
public IntPtr lCustData;
public IntPtr pfnTrustHelper;
public IntPtr pcChain;
public IntPtr prgChain;
public IntPtr prgdwErrors;
public IntPtr prgpbTrustInfo;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CERT_VERIFY_CERTIFICATE_TRUST
Public cbSize As UInteger
Public pccert As IntPtr
Public dwFlags As UInteger
Public dwIgnoreErr As UInteger
Public pdwErrors As IntPtr
Public pszUsageOid As IntPtr
Public hprov As UIntPtr
Public cRootStores As UInteger
Public rghstoreRoots As IntPtr
Public cStores As UInteger
Public rghstoreCAs As IntPtr
Public cTrustStores As UInteger
Public rghstoreTrust As IntPtr
Public lCustData As IntPtr
Public pfnTrustHelper As IntPtr
Public pcChain As IntPtr
Public prgChain As IntPtr
Public prgdwErrors As IntPtr
Public prgpbTrustInfo As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class CERT_VERIFY_CERTIFICATE_TRUST(ctypes.Structure):
_fields_ = [
("cbSize", wintypes.DWORD),
("pccert", ctypes.c_void_p),
("dwFlags", wintypes.DWORD),
("dwIgnoreErr", wintypes.DWORD),
("pdwErrors", ctypes.c_void_p),
("pszUsageOid", ctypes.c_void_p),
("hprov", ctypes.c_size_t),
("cRootStores", wintypes.DWORD),
("rghstoreRoots", ctypes.c_void_p),
("cStores", wintypes.DWORD),
("rghstoreCAs", ctypes.c_void_p),
("cTrustStores", wintypes.DWORD),
("rghstoreTrust", ctypes.c_void_p),
("lCustData", ctypes.c_ssize_t),
("pfnTrustHelper", ctypes.c_void_p),
("pcChain", ctypes.c_void_p),
("prgChain", ctypes.c_void_p),
("prgdwErrors", ctypes.c_void_p),
("prgpbTrustInfo", ctypes.c_void_p),
]#[repr(C)]
pub struct CERT_VERIFY_CERTIFICATE_TRUST {
pub cbSize: u32,
pub pccert: *mut core::ffi::c_void,
pub dwFlags: u32,
pub dwIgnoreErr: u32,
pub pdwErrors: *mut core::ffi::c_void,
pub pszUsageOid: *mut core::ffi::c_void,
pub hprov: usize,
pub cRootStores: u32,
pub rghstoreRoots: *mut core::ffi::c_void,
pub cStores: u32,
pub rghstoreCAs: *mut core::ffi::c_void,
pub cTrustStores: u32,
pub rghstoreTrust: *mut core::ffi::c_void,
pub lCustData: isize,
pub pfnTrustHelper: *mut core::ffi::c_void,
pub pcChain: *mut core::ffi::c_void,
pub prgChain: *mut core::ffi::c_void,
pub prgdwErrors: *mut core::ffi::c_void,
pub prgpbTrustInfo: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type CERT_VERIFY_CERTIFICATE_TRUST struct {
cbSize uint32
pccert uintptr
dwFlags uint32
dwIgnoreErr uint32
pdwErrors uintptr
pszUsageOid uintptr
hprov uintptr
cRootStores uint32
rghstoreRoots uintptr
cStores uint32
rghstoreCAs uintptr
cTrustStores uint32
rghstoreTrust uintptr
lCustData uintptr
pfnTrustHelper uintptr
pcChain uintptr
prgChain uintptr
prgdwErrors uintptr
prgpbTrustInfo uintptr
}type
CERT_VERIFY_CERTIFICATE_TRUST = record
cbSize: DWORD;
pccert: Pointer;
dwFlags: DWORD;
dwIgnoreErr: DWORD;
pdwErrors: Pointer;
pszUsageOid: Pointer;
hprov: NativeUInt;
cRootStores: DWORD;
rghstoreRoots: Pointer;
cStores: DWORD;
rghstoreCAs: Pointer;
cTrustStores: DWORD;
rghstoreTrust: Pointer;
lCustData: NativeInt;
pfnTrustHelper: Pointer;
pcChain: Pointer;
prgChain: Pointer;
prgdwErrors: Pointer;
prgpbTrustInfo: Pointer;
end;const CERT_VERIFY_CERTIFICATE_TRUST = extern struct {
cbSize: u32,
pccert: ?*anyopaque,
dwFlags: u32,
dwIgnoreErr: u32,
pdwErrors: ?*anyopaque,
pszUsageOid: ?*anyopaque,
hprov: usize,
cRootStores: u32,
rghstoreRoots: ?*anyopaque,
cStores: u32,
rghstoreCAs: ?*anyopaque,
cTrustStores: u32,
rghstoreTrust: ?*anyopaque,
lCustData: isize,
pfnTrustHelper: ?*anyopaque,
pcChain: ?*anyopaque,
prgChain: ?*anyopaque,
prgdwErrors: ?*anyopaque,
prgpbTrustInfo: ?*anyopaque,
};type
CERT_VERIFY_CERTIFICATE_TRUST {.bycopy.} = object
cbSize: uint32
pccert: pointer
dwFlags: uint32
dwIgnoreErr: uint32
pdwErrors: pointer
pszUsageOid: pointer
hprov: uint
cRootStores: uint32
rghstoreRoots: pointer
cStores: uint32
rghstoreCAs: pointer
cTrustStores: uint32
rghstoreTrust: pointer
lCustData: int
pfnTrustHelper: pointer
pcChain: pointer
prgChain: pointer
prgdwErrors: pointer
prgpbTrustInfo: pointerstruct CERT_VERIFY_CERTIFICATE_TRUST
{
uint cbSize;
void* pccert;
uint dwFlags;
uint dwIgnoreErr;
void* pdwErrors;
void* pszUsageOid;
size_t hprov;
uint cRootStores;
void* rghstoreRoots;
uint cStores;
void* rghstoreCAs;
uint cTrustStores;
void* rghstoreTrust;
ptrdiff_t lCustData;
void* pfnTrustHelper;
void* pcChain;
void* prgChain;
void* prgdwErrors;
void* prgpbTrustInfo;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; CERT_VERIFY_CERTIFICATE_TRUST サイズ: 76 バイト(x86)
dim st, 19 ; 4byte整数×19(構造体サイズ 76 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; pccert : CERT_CONTEXT* (+4, 4byte) varptr(st)+4 を基点に操作(4byte:入れ子/配列)
; dwFlags : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; dwIgnoreErr : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; pdwErrors : DWORD* (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; pszUsageOid : LPSTR (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; hprov : UINT_PTR (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; cRootStores : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; rghstoreRoots : HCERTSTORE* (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; cStores : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; rghstoreCAs : HCERTSTORE* (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; cTrustStores : DWORD (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; rghstoreTrust : HCERTSTORE* (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; lCustData : LPARAM (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; pfnTrustHelper : PFNTRUSTHELPER (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; pcChain : DWORD* (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; prgChain : CERT_CONTEXT*** (+64, 4byte) varptr(st)+64 を基点に操作(4byte:入れ子/配列)
; prgdwErrors : DWORD** (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; prgpbTrustInfo : CRYPT_INTEGER_BLOB** (+72, 4byte) varptr(st)+72 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; CERT_VERIFY_CERTIFICATE_TRUST サイズ: 144 バイト(x64)
dim st, 36 ; 4byte整数×36(構造体サイズ 144 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; pccert : CERT_CONTEXT* (+8, 8byte) varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; dwFlags : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; dwIgnoreErr : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; pdwErrors : DWORD* (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; pszUsageOid : LPSTR (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; hprov : UINT_PTR (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; cRootStores : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; rghstoreRoots : HCERTSTORE* (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; cStores : DWORD (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; rghstoreCAs : HCERTSTORE* (+72, 8byte) qpoke st,72,値 / qpeek(st,72) ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; cTrustStores : DWORD (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; rghstoreTrust : HCERTSTORE* (+88, 8byte) qpoke st,88,値 / qpeek(st,88) ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; lCustData : LPARAM (+96, 8byte) qpoke st,96,値 / qpeek(st,96) ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; pfnTrustHelper : PFNTRUSTHELPER (+104, 8byte) qpoke st,104,値 / qpeek(st,104) ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; pcChain : DWORD* (+112, 8byte) qpoke st,112,値 / qpeek(st,112) ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; prgChain : CERT_CONTEXT*** (+120, 8byte) varptr(st)+120 を基点に操作(8byte:入れ子/配列)
; prgdwErrors : DWORD** (+128, 8byte) qpoke st,128,値 / qpeek(st,128) ※IronHSPのみ。3.7/3.8は lpoke st,128,下位 : lpoke st,132,上位
; prgpbTrustInfo : CRYPT_INTEGER_BLOB** (+136, 8byte) varptr(st)+136 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global CERT_VERIFY_CERTIFICATE_TRUST
#field int cbSize
#field intptr pccert
#field int dwFlags
#field int dwIgnoreErr
#field intptr pdwErrors
#field intptr pszUsageOid
#field intptr hprov
#field int cRootStores
#field intptr rghstoreRoots
#field int cStores
#field intptr rghstoreCAs
#field int cTrustStores
#field intptr rghstoreTrust
#field intptr lCustData
#field intptr pfnTrustHelper
#field intptr pcChain
#field intptr prgChain
#field intptr prgdwErrors
#field intptr prgpbTrustInfo
#endstruct
stdim st, CERT_VERIFY_CERTIFICATE_TRUST ; NSTRUCT 変数を確保
st->cbSize = 100
mes "cbSize=" + st->cbSize