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

CERT_CHAIN_PARA

構造体
サイズx64: 96 バイト / x86: 52 バイト

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

フィールド

フィールドサイズx64x86説明
cbSizeDWORD4+0+0この構造体のサイズ(バイト単位)。
RequestedUsageCERT_USAGE_MATCH24/12+8+4チェーンに要求する拡張キー用途の照合条件。
RequestedIssuancePolicyCERT_USAGE_MATCH24/12+32+16チェーンに要求する発行ポリシーの照合条件。
dwUrlRetrievalTimeoutDWORD4+56+28URL取得のタイムアウト(ミリ秒単位)。0で既定値。
fCheckRevocationFreshnessTimeBOOL4+60+32失効情報の鮮度を確認するかを示すブール値。
dwRevocationFreshnessTimeDWORD4+64+36許容する失効情報鮮度の最大値(秒単位)。
pftCacheResyncFILETIME*8/4+72+40キャッシュ再同期の基準時刻へのポインタ。NULL可。
pStrongSignParaCERT_STRONG_SIGN_PARA*8/4+80+44強い署名の検証パラメータへのポインタ。NULL可。
dwStrongSignFlagsDWORD4+88+48強い署名検証の動作を制御するフラグ。

各言語での定義

#include <windows.h>

// CTL_USAGE  (x64 16 / x86 8 バイト)
typedef struct CTL_USAGE {
    DWORD cUsageIdentifier;
    LPSTR* rgpszUsageIdentifier;
} CTL_USAGE;

// CERT_USAGE_MATCH  (x64 24 / x86 12 バイト)
typedef struct CERT_USAGE_MATCH {
    DWORD dwType;
    CTL_USAGE Usage;
} CERT_USAGE_MATCH;

// CERT_CHAIN_PARA  (x64 96 / x86 52 バイト)
typedef struct CERT_CHAIN_PARA {
    DWORD cbSize;
    CERT_USAGE_MATCH RequestedUsage;
    CERT_USAGE_MATCH RequestedIssuancePolicy;
    DWORD dwUrlRetrievalTimeout;
    BOOL fCheckRevocationFreshnessTime;
    DWORD dwRevocationFreshnessTime;
    FILETIME* pftCacheResync;
    CERT_STRONG_SIGN_PARA* pStrongSignPara;
    DWORD dwStrongSignFlags;
} CERT_CHAIN_PARA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CTL_USAGE
{
    public uint cUsageIdentifier;
    public IntPtr rgpszUsageIdentifier;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CERT_USAGE_MATCH
{
    public uint dwType;
    public CTL_USAGE Usage;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CERT_CHAIN_PARA
{
    public uint cbSize;
    public CERT_USAGE_MATCH RequestedUsage;
    public CERT_USAGE_MATCH RequestedIssuancePolicy;
    public uint dwUrlRetrievalTimeout;
    [MarshalAs(UnmanagedType.Bool)] public bool fCheckRevocationFreshnessTime;
    public uint dwRevocationFreshnessTime;
    public IntPtr pftCacheResync;
    public IntPtr pStrongSignPara;
    public uint dwStrongSignFlags;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CTL_USAGE
    Public cUsageIdentifier As UInteger
    Public rgpszUsageIdentifier As IntPtr
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CERT_USAGE_MATCH
    Public dwType As UInteger
    Public Usage As CTL_USAGE
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CERT_CHAIN_PARA
    Public cbSize As UInteger
    Public RequestedUsage As CERT_USAGE_MATCH
    Public RequestedIssuancePolicy As CERT_USAGE_MATCH
    Public dwUrlRetrievalTimeout As UInteger
    <MarshalAs(UnmanagedType.Bool)> Public fCheckRevocationFreshnessTime As Boolean
    Public dwRevocationFreshnessTime As UInteger
    Public pftCacheResync As IntPtr
    Public pStrongSignPara As IntPtr
    Public dwStrongSignFlags As UInteger
End Structure
import ctypes
from ctypes import wintypes

class CTL_USAGE(ctypes.Structure):
    _fields_ = [
        ("cUsageIdentifier", wintypes.DWORD),
        ("rgpszUsageIdentifier", ctypes.c_void_p),
    ]

class CERT_USAGE_MATCH(ctypes.Structure):
    _fields_ = [
        ("dwType", wintypes.DWORD),
        ("Usage", CTL_USAGE),
    ]

class CERT_CHAIN_PARA(ctypes.Structure):
    _fields_ = [
        ("cbSize", wintypes.DWORD),
        ("RequestedUsage", CERT_USAGE_MATCH),
        ("RequestedIssuancePolicy", CERT_USAGE_MATCH),
        ("dwUrlRetrievalTimeout", wintypes.DWORD),
        ("fCheckRevocationFreshnessTime", wintypes.BOOL),
        ("dwRevocationFreshnessTime", wintypes.DWORD),
        ("pftCacheResync", ctypes.c_void_p),
        ("pStrongSignPara", ctypes.c_void_p),
        ("dwStrongSignFlags", wintypes.DWORD),
    ]
#[repr(C)]
pub struct CTL_USAGE {
    pub cUsageIdentifier: u32,
    pub rgpszUsageIdentifier: *mut core::ffi::c_void,
}

#[repr(C)]
pub struct CERT_USAGE_MATCH {
    pub dwType: u32,
    pub Usage: CTL_USAGE,
}

#[repr(C)]
pub struct CERT_CHAIN_PARA {
    pub cbSize: u32,
    pub RequestedUsage: CERT_USAGE_MATCH,
    pub RequestedIssuancePolicy: CERT_USAGE_MATCH,
    pub dwUrlRetrievalTimeout: u32,
    pub fCheckRevocationFreshnessTime: i32,
    pub dwRevocationFreshnessTime: u32,
    pub pftCacheResync: *mut core::ffi::c_void,
    pub pStrongSignPara: *mut core::ffi::c_void,
    pub dwStrongSignFlags: u32,
}
import "golang.org/x/sys/windows"

type CTL_USAGE struct {
	cUsageIdentifier uint32
	rgpszUsageIdentifier uintptr
}

type CERT_USAGE_MATCH struct {
	dwType uint32
	Usage CTL_USAGE
}

type CERT_CHAIN_PARA struct {
	cbSize uint32
	RequestedUsage CERT_USAGE_MATCH
	RequestedIssuancePolicy CERT_USAGE_MATCH
	dwUrlRetrievalTimeout uint32
	fCheckRevocationFreshnessTime int32
	dwRevocationFreshnessTime uint32
	pftCacheResync uintptr
	pStrongSignPara uintptr
	dwStrongSignFlags uint32
}
type
  CTL_USAGE = record
    cUsageIdentifier: DWORD;
    rgpszUsageIdentifier: Pointer;
  end;

  CERT_USAGE_MATCH = record
    dwType: DWORD;
    Usage: CTL_USAGE;
  end;

  CERT_CHAIN_PARA = record
    cbSize: DWORD;
    RequestedUsage: CERT_USAGE_MATCH;
    RequestedIssuancePolicy: CERT_USAGE_MATCH;
    dwUrlRetrievalTimeout: DWORD;
    fCheckRevocationFreshnessTime: BOOL;
    dwRevocationFreshnessTime: DWORD;
    pftCacheResync: Pointer;
    pStrongSignPara: Pointer;
    dwStrongSignFlags: DWORD;
  end;
const CTL_USAGE = extern struct {
    cUsageIdentifier: u32,
    rgpszUsageIdentifier: ?*anyopaque,
};

const CERT_USAGE_MATCH = extern struct {
    dwType: u32,
    Usage: CTL_USAGE,
};

const CERT_CHAIN_PARA = extern struct {
    cbSize: u32,
    RequestedUsage: CERT_USAGE_MATCH,
    RequestedIssuancePolicy: CERT_USAGE_MATCH,
    dwUrlRetrievalTimeout: u32,
    fCheckRevocationFreshnessTime: i32,
    dwRevocationFreshnessTime: u32,
    pftCacheResync: ?*anyopaque,
    pStrongSignPara: ?*anyopaque,
    dwStrongSignFlags: u32,
};
type
  CTL_USAGE {.bycopy.} = object
    cUsageIdentifier: uint32
    rgpszUsageIdentifier: pointer

  CERT_USAGE_MATCH {.bycopy.} = object
    dwType: uint32
    Usage: CTL_USAGE

  CERT_CHAIN_PARA {.bycopy.} = object
    cbSize: uint32
    RequestedUsage: CERT_USAGE_MATCH
    RequestedIssuancePolicy: CERT_USAGE_MATCH
    dwUrlRetrievalTimeout: uint32
    fCheckRevocationFreshnessTime: int32
    dwRevocationFreshnessTime: uint32
    pftCacheResync: pointer
    pStrongSignPara: pointer
    dwStrongSignFlags: uint32
struct CTL_USAGE
{
    uint cUsageIdentifier;
    void* rgpszUsageIdentifier;
}

struct CERT_USAGE_MATCH
{
    uint dwType;
    CTL_USAGE Usage;
}

struct CERT_CHAIN_PARA
{
    uint cbSize;
    CERT_USAGE_MATCH RequestedUsage;
    CERT_USAGE_MATCH RequestedIssuancePolicy;
    uint dwUrlRetrievalTimeout;
    int fCheckRevocationFreshnessTime;
    uint dwRevocationFreshnessTime;
    void* pftCacheResync;
    void* pStrongSignPara;
    uint dwStrongSignFlags;
}

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_PARA サイズ: 52 バイト(x86)
dim st, 13    ; 4byte整数×13(構造体サイズ 52 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; RequestedUsage : CERT_USAGE_MATCH (+4, 12byte)  varptr(st)+4 を基点に操作(12byte:入れ子/配列)
; RequestedIssuancePolicy : CERT_USAGE_MATCH (+16, 12byte)  varptr(st)+16 を基点に操作(12byte:入れ子/配列)
; dwUrlRetrievalTimeout : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; fCheckRevocationFreshnessTime : BOOL (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; dwRevocationFreshnessTime : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; pftCacheResync : FILETIME* (+40, 4byte)  varptr(st)+40 を基点に操作(4byte:入れ子/配列)
; pStrongSignPara : CERT_STRONG_SIGN_PARA* (+44, 4byte)  varptr(st)+44 を基点に操作(4byte:入れ子/配列)
; dwStrongSignFlags : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; CERT_CHAIN_PARA サイズ: 96 バイト(x64)
dim st, 24    ; 4byte整数×24(構造体サイズ 96 / 4 切り上げ)
; cbSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; RequestedUsage : CERT_USAGE_MATCH (+8, 24byte)  varptr(st)+8 を基点に操作(24byte:入れ子/配列)
; RequestedIssuancePolicy : CERT_USAGE_MATCH (+32, 24byte)  varptr(st)+32 を基点に操作(24byte:入れ子/配列)
; dwUrlRetrievalTimeout : DWORD (+56, 4byte)  st.14 = 値  /  値 = st.14   (lpoke/lpeek も可)
; fCheckRevocationFreshnessTime : BOOL (+60, 4byte)  st.15 = 値  /  値 = st.15   (lpoke/lpeek も可)
; dwRevocationFreshnessTime : DWORD (+64, 4byte)  st.16 = 値  /  値 = st.16   (lpoke/lpeek も可)
; pftCacheResync : FILETIME* (+72, 8byte)  varptr(st)+72 を基点に操作(8byte:入れ子/配列)
; pStrongSignPara : CERT_STRONG_SIGN_PARA* (+80, 8byte)  varptr(st)+80 を基点に操作(8byte:入れ子/配列)
; dwStrongSignFlags : DWORD (+88, 4byte)  st.22 = 値  /  値 = st.22   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global CTL_USAGE
    #field int cUsageIdentifier
    #field intptr rgpszUsageIdentifier
#endstruct

#defstruct global CERT_USAGE_MATCH
    #field int dwType
    #field CTL_USAGE Usage
#endstruct

#defstruct global CERT_CHAIN_PARA
    #field int cbSize
    #field CERT_USAGE_MATCH RequestedUsage
    #field CERT_USAGE_MATCH RequestedIssuancePolicy
    #field int dwUrlRetrievalTimeout
    #field bool fCheckRevocationFreshnessTime
    #field int dwRevocationFreshnessTime
    #field intptr pftCacheResync
    #field intptr pStrongSignPara
    #field int dwStrongSignFlags
#endstruct

stdim st, CERT_CHAIN_PARA        ; NSTRUCT 変数を確保
st->cbSize = 100
mes "cbSize=" + st->cbSize