CERT_CHAIN_ENGINE_CONFIG
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| cbSize | DWORD | 4 | +0 | +0 | この構造体のサイズ (バイト単位)。 | ||||||||||||||
| hRestrictedRoot | HCERTSTORE | 8/4 | +8 | +4 | この構成パラメーターは、ルートストアを制限するために使用できます。使用する場合は、ルートストア内の証明書の真部分集合のみを含む任意の HCERTSTORE のハンドルを指定できます。 | ||||||||||||||
| hRestrictedTrust | HCERTSTORE | 8/4 | +16 | +8 | ストアのハンドル。使用する場合、CTL を検索する対象のストアを制限します。 | ||||||||||||||
| hRestrictedOther | HCERTSTORE | 8/4 | +24 | +12 | ストアのハンドル。使用する場合、証明書および CRL の検索対象となるストアを制限します。 | ||||||||||||||
| cAdditionalStore | DWORD | 4 | +32 | +16 | チェーンの構築に必要な証明書および CRL を検索する、追加のストアの数。 | ||||||||||||||
| rghAdditionalStore | HCERTSTORE* | 8/4 | +40 | +20 | チェーンの構築時に検索する追加のストアのハンドルの配列へのポインター。 | ||||||||||||||
| dwFlags | DWORD | 4 | +48 | +24 | 次のフラグが定義されています。
| ||||||||||||||
| dwUrlRetrievalTimeout | DWORD | 4 | +52 | +28 | ネットワーク経由の URL オブジェクト取得がタイムアウトするまでのミリ秒数。既定の制限を使用するには 0 を設定できます。 | ||||||||||||||
| MaximumCachedCertificates | DWORD | 4 | +56 | +32 | チェーンの構築時にキャッシュできる証明書数の上限。既定の制限を使用するには 0 を設定できます。 | ||||||||||||||
| CycleDetectionModulus | DWORD | 4 | +60 | +36 | チェーン内に証明書の循環があるかどうかを確認するまでに、チェーンに追加される証明書の数。循環とは、同じ証明書がチェーン内の 2 つの異なる場所に存在する状態と定義できます。 値が小さいほど、確認はより頻繁に行われます。証明書の循環を追加で確認すると、処理はかなり遅くなります。このパラメーターには、既定の制限を使用するために 0 を設定できます。 | ||||||||||||||
| hExclusiveRoot | HCERTSTORE | 8/4 | +64 | +40 | 排他的なトラストアンカーを含む証明書ストアへのハンドル。hExclusiveRoot メンバーまたは hExclusiveTrustedPeople メンバーのいずれかが有効なストアを指している場合、チェーンの構築には排他的信頼モードが使用されます。 Windows 7 および Windows Server 2008 R2: このバージョンからこのメンバーがサポートされます。 | ||||||||||||||
| hExclusiveTrustedPeople | HCERTSTORE | 8/4 | +72 | +44 | アプリケーション固有のピア信頼された証明書を含む証明書ストアへのハンドル。hExclusiveRoot メンバーまたは hExclusiveTrustedPeople メンバーのいずれかが有効なストアを指している場合、チェーンの構築には排他的信頼モードが使用されます。 Windows 7 および Windows Server 2008 R2: このバージョンからこのメンバーがサポートされます。 | ||||||||||||||
| dwExclusiveFlags | DWORD | 4 | +80 | +48 | 次のフラグを設定できます。このフラグは、hExclusiveRoot または hExclusiveTrustedPeople、あるいはその両方が NULL でない場合にのみ適用されます。 Windows 8 および Windows Server 2012: このバージョンからこのメンバーがサポートされます。
|
公式ドキュメント
CERT_CHAIN_ENGINE_CONFIG 構造体は、既定以外の証明書チェーンエンジンを構築するためのパラメーターを設定します。使用するエンジンによって、証明書チェーンの構築方法が決まります。
解説(Remarks)
チェーン構築エンジンは、チェーンの構築時に 4 つの証明書ストアを使用します。これらは hRoot、hWorld、hTrust、および hOther です。これらのストアのハンドルは、チェーンエンジンの作成時にこの構造体の情報を使用して決定されます。
hRoot は hRestrictedRoot のストアハンドルです。hRestrictedRoot が NULL の場合は、システムストア "Root" のハンドルになります。
hWorld は、兄弟ストアである hRoot、"CA"、"My"、"Trust"、および rghAdditionalStore が指す配列にハンドルが格納されている追加のストアを含む、コレクション証明書ストアです。
hTrust は hRestrictedTrust のストアハンドルです。hRestrictedTrust が NULL の場合は hWorld になります。
hOther は hRestrictedOther と hRoot を合わせたものです。hRestrictedTrust が NULL でない場合は、hWorld コレクションストアと hRestrictedTrust のストアハンドルを合わせたものになります。
排他的信頼モードでは、アプリケーションが証明書チェーンの検証に使用するトラストアンカーとピア信頼された証明書を指定できます。排他的信頼モードでは、システム上のルートストアおよび信頼された人ストアは無視され、代わりに hExclusiveRoot メンバーと hExclusiveTrustedPeople メンバーが指すアンカーと証明書が使用されます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// CERT_CHAIN_ENGINE_CONFIG (x64 88 / x86 52 バイト)
typedef struct CERT_CHAIN_ENGINE_CONFIG {
DWORD cbSize;
HCERTSTORE hRestrictedRoot;
HCERTSTORE hRestrictedTrust;
HCERTSTORE hRestrictedOther;
DWORD cAdditionalStore;
HCERTSTORE* rghAdditionalStore;
DWORD dwFlags;
DWORD dwUrlRetrievalTimeout;
DWORD MaximumCachedCertificates;
DWORD CycleDetectionModulus;
HCERTSTORE hExclusiveRoot;
HCERTSTORE hExclusiveTrustedPeople;
DWORD dwExclusiveFlags;
} CERT_CHAIN_ENGINE_CONFIG;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CERT_CHAIN_ENGINE_CONFIG
{
public uint cbSize;
public IntPtr hRestrictedRoot;
public IntPtr hRestrictedTrust;
public IntPtr hRestrictedOther;
public uint cAdditionalStore;
public IntPtr rghAdditionalStore;
public uint dwFlags;
public uint dwUrlRetrievalTimeout;
public uint MaximumCachedCertificates;
public uint CycleDetectionModulus;
public IntPtr hExclusiveRoot;
public IntPtr hExclusiveTrustedPeople;
public uint dwExclusiveFlags;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CERT_CHAIN_ENGINE_CONFIG
Public cbSize As UInteger
Public hRestrictedRoot As IntPtr
Public hRestrictedTrust As IntPtr
Public hRestrictedOther As IntPtr
Public cAdditionalStore As UInteger
Public rghAdditionalStore As IntPtr
Public dwFlags As UInteger
Public dwUrlRetrievalTimeout As UInteger
Public MaximumCachedCertificates As UInteger
Public CycleDetectionModulus As UInteger
Public hExclusiveRoot As IntPtr
Public hExclusiveTrustedPeople As IntPtr
Public dwExclusiveFlags As UInteger
End Structureimport ctypes
from ctypes import wintypes
class CERT_CHAIN_ENGINE_CONFIG(ctypes.Structure):
_fields_ = [
("cbSize", wintypes.DWORD),
("hRestrictedRoot", ctypes.c_void_p),
("hRestrictedTrust", ctypes.c_void_p),
("hRestrictedOther", ctypes.c_void_p),
("cAdditionalStore", wintypes.DWORD),
("rghAdditionalStore", ctypes.c_void_p),
("dwFlags", wintypes.DWORD),
("dwUrlRetrievalTimeout", wintypes.DWORD),
("MaximumCachedCertificates", wintypes.DWORD),
("CycleDetectionModulus", wintypes.DWORD),
("hExclusiveRoot", ctypes.c_void_p),
("hExclusiveTrustedPeople", ctypes.c_void_p),
("dwExclusiveFlags", wintypes.DWORD),
]#[repr(C)]
pub struct CERT_CHAIN_ENGINE_CONFIG {
pub cbSize: u32,
pub hRestrictedRoot: *mut core::ffi::c_void,
pub hRestrictedTrust: *mut core::ffi::c_void,
pub hRestrictedOther: *mut core::ffi::c_void,
pub cAdditionalStore: u32,
pub rghAdditionalStore: *mut core::ffi::c_void,
pub dwFlags: u32,
pub dwUrlRetrievalTimeout: u32,
pub MaximumCachedCertificates: u32,
pub CycleDetectionModulus: u32,
pub hExclusiveRoot: *mut core::ffi::c_void,
pub hExclusiveTrustedPeople: *mut core::ffi::c_void,
pub dwExclusiveFlags: u32,
}import "golang.org/x/sys/windows"
type CERT_CHAIN_ENGINE_CONFIG struct {
cbSize uint32
hRestrictedRoot uintptr
hRestrictedTrust uintptr
hRestrictedOther uintptr
cAdditionalStore uint32
rghAdditionalStore uintptr
dwFlags uint32
dwUrlRetrievalTimeout uint32
MaximumCachedCertificates uint32
CycleDetectionModulus uint32
hExclusiveRoot uintptr
hExclusiveTrustedPeople uintptr
dwExclusiveFlags uint32
}type
CERT_CHAIN_ENGINE_CONFIG = record
cbSize: DWORD;
hRestrictedRoot: Pointer;
hRestrictedTrust: Pointer;
hRestrictedOther: Pointer;
cAdditionalStore: DWORD;
rghAdditionalStore: Pointer;
dwFlags: DWORD;
dwUrlRetrievalTimeout: DWORD;
MaximumCachedCertificates: DWORD;
CycleDetectionModulus: DWORD;
hExclusiveRoot: Pointer;
hExclusiveTrustedPeople: Pointer;
dwExclusiveFlags: DWORD;
end;const CERT_CHAIN_ENGINE_CONFIG = extern struct {
cbSize: u32,
hRestrictedRoot: ?*anyopaque,
hRestrictedTrust: ?*anyopaque,
hRestrictedOther: ?*anyopaque,
cAdditionalStore: u32,
rghAdditionalStore: ?*anyopaque,
dwFlags: u32,
dwUrlRetrievalTimeout: u32,
MaximumCachedCertificates: u32,
CycleDetectionModulus: u32,
hExclusiveRoot: ?*anyopaque,
hExclusiveTrustedPeople: ?*anyopaque,
dwExclusiveFlags: u32,
};type
CERT_CHAIN_ENGINE_CONFIG {.bycopy.} = object
cbSize: uint32
hRestrictedRoot: pointer
hRestrictedTrust: pointer
hRestrictedOther: pointer
cAdditionalStore: uint32
rghAdditionalStore: pointer
dwFlags: uint32
dwUrlRetrievalTimeout: uint32
MaximumCachedCertificates: uint32
CycleDetectionModulus: uint32
hExclusiveRoot: pointer
hExclusiveTrustedPeople: pointer
dwExclusiveFlags: uint32struct CERT_CHAIN_ENGINE_CONFIG
{
uint cbSize;
void* hRestrictedRoot;
void* hRestrictedTrust;
void* hRestrictedOther;
uint cAdditionalStore;
void* rghAdditionalStore;
uint dwFlags;
uint dwUrlRetrievalTimeout;
uint MaximumCachedCertificates;
uint CycleDetectionModulus;
void* hExclusiveRoot;
void* hExclusiveTrustedPeople;
uint dwExclusiveFlags;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; CERT_CHAIN_ENGINE_CONFIG サイズ: 52 バイト(x86)
dim st, 13 ; 4byte整数×13(構造体サイズ 52 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; hRestrictedRoot : HCERTSTORE (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; hRestrictedTrust : HCERTSTORE (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; hRestrictedOther : HCERTSTORE (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; cAdditionalStore : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; rghAdditionalStore : HCERTSTORE* (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; dwFlags : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; dwUrlRetrievalTimeout : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; MaximumCachedCertificates : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; CycleDetectionModulus : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; hExclusiveRoot : HCERTSTORE (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; hExclusiveTrustedPeople : HCERTSTORE (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; dwExclusiveFlags : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; CERT_CHAIN_ENGINE_CONFIG サイズ: 88 バイト(x64)
dim st, 22 ; 4byte整数×22(構造体サイズ 88 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; hRestrictedRoot : HCERTSTORE (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; hRestrictedTrust : HCERTSTORE (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; hRestrictedOther : HCERTSTORE (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; cAdditionalStore : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; rghAdditionalStore : HCERTSTORE* (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; dwFlags : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; dwUrlRetrievalTimeout : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; MaximumCachedCertificates : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; CycleDetectionModulus : DWORD (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; hExclusiveRoot : HCERTSTORE (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; hExclusiveTrustedPeople : HCERTSTORE (+72, 8byte) qpoke st,72,値 / qpeek(st,72) ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; dwExclusiveFlags : DWORD (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global CERT_CHAIN_ENGINE_CONFIG
#field int cbSize
#field intptr hRestrictedRoot
#field intptr hRestrictedTrust
#field intptr hRestrictedOther
#field int cAdditionalStore
#field intptr rghAdditionalStore
#field int dwFlags
#field int dwUrlRetrievalTimeout
#field int MaximumCachedCertificates
#field int CycleDetectionModulus
#field intptr hExclusiveRoot
#field intptr hExclusiveTrustedPeople
#field int dwExclusiveFlags
#endstruct
stdim st, CERT_CHAIN_ENGINE_CONFIG ; NSTRUCT 変数を確保
st->cbSize = 100
mes "cbSize=" + st->cbSize