Win32 API 日本語リファレンス
ホームSecurity.Cryptography.UI › CERT_VERIFY_CERTIFICATE_TRUST

CERT_VERIFY_CERTIFICATE_TRUST

構造体
サイズx64: 144 バイト / x86: 76 バイト

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

フィールド

フィールドサイズx64x86説明
cbSizeDWORD4+0+0この構造体のバイト単位サイズ。呼び出し前に設定する。
pccertCERT_CONTEXT*8/4+8+4検証対象の証明書コンテキストへのポインタ。
dwFlagsDWORD4+16+8信頼検証の動作を制御するフラグ。
dwIgnoreErrDWORD4+20+12無視するエラーを指定するビットマスク。
pdwErrorsDWORD*8/4+24+16検出されたエラーを受け取るDWORDへのポインタ。
pszUsageOidLPSTR8/4+32+20検証する用途のOIDを示すANSI文字列。NULL可。
hprovUINT_PTR8/4+40+24暗号化サービスプロバイダーのハンドル。
cRootStoresDWORD4+48+28rghstoreRoots配列のルートストア数。
rghstoreRootsHCERTSTORE*8/4+56+32ルート証明書ストアハンドルの配列。
cStoresDWORD4+64+36rghstoreCAs配列の中間CAストア数。
rghstoreCAsHCERTSTORE*8/4+72+40中間CA証明書ストアハンドルの配列。
cTrustStoresDWORD4+80+44rghstoreTrust配列の信頼ストア数。
rghstoreTrustHCERTSTORE*8/4+88+48信頼された証明書ストアハンドルの配列。
lCustDataLPARAM8/4+96+52コールバックに渡されるユーザー定義データ。
pfnTrustHelperPFNTRUSTHELPER8/4+104+56信頼判定を補助するコールバック関数ポインタ。NULL可。
pcChainDWORD*8/4+112+60構築されたチェーン数を受け取るポインタ(出力)。
prgChainCERT_CONTEXT***8/4+120+64構築された証明書チェーン配列へのポインタ(出力)。
prgdwErrorsDWORD**8/4+128+68各チェーンのエラー配列へのポインタ(出力)。
prgpbTrustInfoCRYPT_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 Structure
import 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: pointer
struct 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