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

CERT_SELECT_CHAIN_PARA

構造体
サイズx64: 40 バイト / x86: 20 バイト

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

フィールド

フィールドサイズx64x86説明
hChainEngineHCERTCHAINENGINE8/4+0+0使用する証明書チェーンエンジンのハンドル。NULLで既定。
pTimeFILETIME*8/4+8+4チェーン検証の基準時刻FILETIME。NULLで現在時刻。
hAdditionalStoreHCERTSTORE8/4+16+8チェーン構築用の追加証明書ストアハンドル。NULL可。
pChainParaCERT_CHAIN_PARA*8/4+24+12チェーン構築パラメータCERT_CHAIN_PARAへのポインタ。
dwFlagsDWORD4+32+16チェーン選択動作を制御するフラグ。

各言語での定義

#include <windows.h>

// CERT_SELECT_CHAIN_PARA  (x64 40 / x86 20 バイト)
typedef struct CERT_SELECT_CHAIN_PARA {
    HCERTCHAINENGINE hChainEngine;
    FILETIME* pTime;
    HCERTSTORE hAdditionalStore;
    CERT_CHAIN_PARA* pChainPara;
    DWORD dwFlags;
} CERT_SELECT_CHAIN_PARA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CERT_SELECT_CHAIN_PARA
{
    public IntPtr hChainEngine;
    public IntPtr pTime;
    public IntPtr hAdditionalStore;
    public IntPtr pChainPara;
    public uint dwFlags;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CERT_SELECT_CHAIN_PARA
    Public hChainEngine As IntPtr
    Public pTime As IntPtr
    Public hAdditionalStore As IntPtr
    Public pChainPara As IntPtr
    Public dwFlags As UInteger
End Structure
import ctypes
from ctypes import wintypes

class CERT_SELECT_CHAIN_PARA(ctypes.Structure):
    _fields_ = [
        ("hChainEngine", ctypes.c_void_p),
        ("pTime", ctypes.c_void_p),
        ("hAdditionalStore", ctypes.c_void_p),
        ("pChainPara", ctypes.c_void_p),
        ("dwFlags", wintypes.DWORD),
    ]
#[repr(C)]
pub struct CERT_SELECT_CHAIN_PARA {
    pub hChainEngine: *mut core::ffi::c_void,
    pub pTime: *mut core::ffi::c_void,
    pub hAdditionalStore: *mut core::ffi::c_void,
    pub pChainPara: *mut core::ffi::c_void,
    pub dwFlags: u32,
}
import "golang.org/x/sys/windows"

type CERT_SELECT_CHAIN_PARA struct {
	hChainEngine uintptr
	pTime uintptr
	hAdditionalStore uintptr
	pChainPara uintptr
	dwFlags uint32
}
type
  CERT_SELECT_CHAIN_PARA = record
    hChainEngine: Pointer;
    pTime: Pointer;
    hAdditionalStore: Pointer;
    pChainPara: Pointer;
    dwFlags: DWORD;
  end;
const CERT_SELECT_CHAIN_PARA = extern struct {
    hChainEngine: ?*anyopaque,
    pTime: ?*anyopaque,
    hAdditionalStore: ?*anyopaque,
    pChainPara: ?*anyopaque,
    dwFlags: u32,
};
type
  CERT_SELECT_CHAIN_PARA {.bycopy.} = object
    hChainEngine: pointer
    pTime: pointer
    hAdditionalStore: pointer
    pChainPara: pointer
    dwFlags: uint32
struct CERT_SELECT_CHAIN_PARA
{
    void* hChainEngine;
    void* pTime;
    void* hAdditionalStore;
    void* pChainPara;
    uint dwFlags;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; CERT_SELECT_CHAIN_PARA サイズ: 20 バイト(x86)
dim st, 5    ; 4byte整数×5(構造体サイズ 20 / 4 切り上げ)
; hChainEngine : HCERTCHAINENGINE (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; pTime : FILETIME* (+4, 4byte)  varptr(st)+4 を基点に操作(4byte:入れ子/配列)
; hAdditionalStore : HCERTSTORE (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; pChainPara : CERT_CHAIN_PARA* (+12, 4byte)  varptr(st)+12 を基点に操作(4byte:入れ子/配列)
; dwFlags : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; CERT_SELECT_CHAIN_PARA サイズ: 40 バイト(x64)
dim st, 10    ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; hChainEngine : HCERTCHAINENGINE (+0, 8byte)  qpoke st,0,値 / qpeek(st,0)  ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; pTime : FILETIME* (+8, 8byte)  varptr(st)+8 を基点に操作(8byte:入れ子/配列)
; hAdditionalStore : HCERTSTORE (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; pChainPara : CERT_CHAIN_PARA* (+24, 8byte)  varptr(st)+24 を基点に操作(8byte:入れ子/配列)
; dwFlags : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global CERT_SELECT_CHAIN_PARA
    #field intptr hChainEngine
    #field intptr pTime
    #field intptr hAdditionalStore
    #field intptr pChainPara
    #field int dwFlags
#endstruct

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