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

CERT_STORE_PROV_FIND_INFO

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

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

フィールド

フィールドサイズx64x86説明
cbSizeDWORD4+0+0構造体のサイズ。
dwMsgAndCertEncodingTypeDWORD4+4+4

メッセージおよび証明書に使用されるエンコード種別を指定します。証明書のエンコード種別とメッセージのエンコード種別は、ビット単位の OR 演算で組み合わせることができます。定義されているエンコード種別は次のとおりです。

dwFindFlagsDWORD4+8+8一部の dwFindType の値と組み合わせて、検索条件を変更するために使用します。ほとんどの dwFindType の値では dwFindFlags は使用されず、0 を設定してください。
dwFindTypeDWORD4+12+12

実行する検索の種類を指定します。検索の種類によって、pvFindPara のデータ型、内容、および使用方法が決まります。現在定義されている dwFindType の値と、それぞれが pvFindPara に必要とするデータ型は次のとおりです。

意味
CERT_FIND_ANY
NULLpvFindPara は使用されません
検索条件を使用しません。ストア内の次の証明書を返します。
CERT_FIND_CERT_ID
CERT_ID 構造体
指定された CERT_ID で識別される証明書を検索します。
CERT_FIND_CTL_USAGE
CTL_USAGE 構造体
CTL_USAGE 構造体の pszUsageIdentifier メンバーと一致する szOID_ENHANCED_KEY_USAGE 拡張または CERT_CTL_PROP_ID を持つ証明書を検索します。
CERT_FIND_ENHKEY_USAGE
CERT_ENHKEY_USAGE 構造体
拡張キー使用法拡張または拡張キー使用法プロパティのいずれかを持ち、かつ CERT_ENHKEY_USAGE 構造体の pszUsageIdentifier メンバーと一致する使用法識別子を持つ証明書を、ストア内で検索します。

証明書が pszObjId メンバーに szOID_ENHANCED_KEY_USAGE が設定された CERT_EXTENSION 構造体を持つ場合、その証明書は拡張キー使用法拡張を持ちます。証明書に CERT_ENHKEY_USAGE_PROP_ID 識別子が設定されている場合、その証明書は拡張キー使用法プロパティを持ちます。

pvFindParaNULL であるか、CERT_ENHKEY_USAGEcUsageIdentifier メンバーが 0 の場合、拡張キー使用法拡張または拡張キー使用法プロパティのいずれかを持つ証明書はすべて選択条件を満たします。

pvFindParaNULL であるか、CERT_ENHKEY_USAGE 構造体の cUsageIdentifier メンバーが 0 の場合、拡張キー使用法を持つ証明書はすべて一致します。

dwFindFlagsCERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG が設定されている場合、キー使用法の拡張やプロパティを持たない証明書も一致します。このフラグの設定は、pvFindParaNULL を渡すことよりも優先されます。

CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG が設定されている場合、キー使用法拡張に対してのみ一致判定が行われます。

検索条件に対するフラグによる変更については、「解説」を参照してください。

CERT_FIND_EXISTING
CERT_CONTEXT 構造体
指定された証明書コンテキストと完全に一致する証明書を検索します。
CERT_FIND_HASH
CRYPT_HASH_BLOB 構造体
CRYPT_HASH_BLOB 構造体内のハッシュと一致する SHA1 ハッシュを持つ証明書を検索します。
CERT_FIND_ISSUER_ATTR
CERT_RDN 構造体
CERT_RDN 構造体内の属性と一致する、指定された発行者属性を持つ証明書を検索します。これらの値が設定されている場合、関数は証明書内の発行者の属性を、この CERT_RDN 構造体内の CERT_RDN_ATTR 配列の要素と比較します。比較は CERT_RDN_ATTR の各属性を順に処理し、証明書の発行者属性との一致を探します。

CERT_RDN_ATTRpszObjId メンバーが NULL の場合、属性のオブジェクト識別子は無視されます。

CERT_RDN_ATTRdwValueType メンバーが CERT_RDN_ANY_TYPE の場合、値の型は無視されます。

CERT_RDN_VALUE_BLOBpbData メンバーが NULL の場合、任意の値が一致とみなされます。

現在のところ、大文字と小文字を区別する完全一致のみがサポートされています。Unicode に関するオプションについては、「解説」を参照してください。これらの値が設定されている場合、検索は dwMsgAndCertEncodingType と一致するエンコード種別を持つ証明書に限定されます。

CERT_FIND_ISSUER_NAME
CERT_NAME_BLOB 構造体
発行者名全体が CERT_NAME_BLOB 内の名前と完全に一致する証明書を検索します。検索は dwMsgAndCertEncodingType と一致する証明書に限定されます。
CERT_FIND_ISSUER_OF
CERT_CONTEXT 構造体
CERT_CONTEXT 内の発行者と一致する発行者を持つ証明書を検索します。

この値を CertFindCertificateInStore 関数と共に使用する代わりに、 CertGetCertificateChain 関数を使用してください。

CERT_FIND_ISSUER_STR
Null で終わるワイド (Unicode) 文字列
指定された発行者名の文字列を含む証明書を検索します。証明書の発行者メンバーは、 CertNameToStr の適切な形式を使用して CERT_SIMPLE_NAME_STR 形式の適切な種類の名前文字列に変換されます。その後、大文字と小文字を区別しない部分文字列の一致判定が行われます。この値が設定されている場合、検索は dwMsgAndCertEncodingType と一致するエンコード種別を持つ証明書に限定されます。
CERT_FIND_KEY_IDENTIFIER
CRYPT_HASH_BLOB 構造体
CRYPT_HASH_BLOB 内のキー識別子と一致する CERT_KEY_IDENTIFIER_PROP_ID プロパティを持つ証明書を検索します。
CERT_FIND_KEY_SPEC
キー仕様を格納した DWORD
pvFindPara 内のキー仕様と一致する CERT_KEY_SPEC_PROP_ID プロパティを持つ証明書を検索します。
CERT_FIND_MD5_HASH
CRYPT_HASH_BLOB 構造体
CRYPT_HASH_BLOB 内のハッシュと一致する MD5 ハッシュを持つ証明書を検索します。
CERT_FIND_PROPERTY
プロパティ識別子を格納した DWORD
pvFindPara 内の DWORD で指定されたプロパティ識別子と一致するプロパティを持つ証明書を検索します。
CERT_FIND_PUBLIC_KEY
CERT_PUBLIC_KEY_INFO 構造体
CERT_PUBLIC_KEY_INFO 構造体内の公開キーと一致する公開キーを持つ証明書を検索します。
CERT_FIND_SHA1_HASH
CRYPT_HASH_BLOB 構造体
CRYPT_HASH_BLOB 構造体内のハッシュと一致する SHA1 ハッシュを持つ証明書を検索します。
CERT_FIND_SIGNATURE_HASH
CRYPT_HASH_BLOB 構造体
CRYPT_HASH_BLOB 構造体内の署名ハッシュと一致する署名ハッシュを持つ証明書を検索します。
CERT_FIND_SUBJECT_ATTR
CERT_RDN 構造体
CERT_RDN 構造体内の属性と一致する、指定されたサブジェクト属性を持つ証明書を検索します。RDN の値が設定されている場合、関数は証明書内のサブジェクトの属性を、この CERT_RDN 構造体内の CERT_RDN_ATTR 配列の要素と比較します。比較は CERT_RDN_ATTR の各属性を順に処理し、証明書のサブジェクトの属性との一致を探します。

CERT_RDN_ATTRpszObjId メンバーが NULL の場合、属性のオブジェクト識別子は無視されます。

CERT_RDN_ATTRdwValueType メンバーが CERT_RDN_ANY_TYPE の場合、値の型は無視されます。

CERT_RDN_VALUE_BLOBpbData メンバーが NULL の場合、任意の値が一致とみなされます。

現在のところ、大文字と小文字を区別する完全一致のみがサポートされています。

Unicode に関するオプションについては、「解説」を参照してください。これらの値が設定されている場合、検索は dwMsgAndCertEncodingType と一致するエンコード種別を持つ証明書に限定されます。

CERT_FIND_SUBJECT_CERT
CERT_INFO 構造体
CERT_INFO 構造体内の発行者およびシリアル番号の両方と一致する発行者とシリアル番号を持つ証明書を検索します。
CERT_FIND_SUBJECT_NAME
CERT_NAME_BLOB 構造体
サブジェクト名全体が CERT_NAME_BLOB 構造体内の名前と完全に一致する証明書を検索します。検索は dwMsgAndCertEncodingType の値と一致する証明書に限定されます。
CERT_FIND_SUBJECT_STR
Null で終わるワイド (Unicode) 文字列
指定されたサブジェクト名の文字列を含む証明書を検索します。証明書のサブジェクトメンバーは、 CertNameToStr の適切な形式を使用して CERT_SIMPLE_NAME_STR 形式の適切な種類の名前文字列に変換されます。その後、大文字と小文字を区別しない部分文字列の一致判定が行われます。この値が設定されている場合、検索は dwMsgAndCertEncodingType と一致するエンコード種別を持つ証明書に限定されます。
dwFindType の値には、pvFindPara に文字列を渡す別の形式があります。一方は Unicode 文字列を使用し、もう一方は ASCII 文字列を使用します。"_W" で終わる値、または接尾辞のない値は Unicode を使用します。"_A" で終わる値は ASCII 文字列を使用します。
pvFindParavoid*8/4+16+16dwFindType の値で示される検索の種類に応じて使用されるデータ項目または構造体へのポインターです。

公式ドキュメント

CERT_STORE_PROV_FIND_INFO 構造体は、多くのストアプロバイダーコールバック関数で使用されます。この構造体には、証明書ストア内で証明書証明書失効リスト (CRL)、または証明書信頼リスト (CTL) を検索するための検索条件が格納されます。

解説(Remarks)

dwFindFlags メンバーは、一部の検索種別の条件を変更するために使用します。

dwFindFlags の値 CERT_UNICODE_IS_RDN_ATTRS_FLAG は、dwFindTypeCERT_FIND_SUBJECT_ATTR および CERT_FIND_ISSUER_ATTR の場合にのみ使用します。pvFindPara が指す CERT_RDN_ATTR 構造体が Unicode 文字列で初期化されている場合、CERT_UNICODE_IS_RDN_ATTRS_FLAG を設定しなければなりません。比較が行われる前に、照合対象の文字列は X509_UNICODE_NAME を使用して変換され、Unicode での比較が可能になります。

次の dwFindFlags の値は、dwFindType が CERT_FIND_ENKEY_USAGE の場合にのみ使用します。

意味
CERT_FIND_OR_ENHKEY_USAGE_FLAG 1 つ以上のフラグを設定することで検索条件を変更できます。既定では、pvFindPara が指す CERT_ENHKEY_USAGE 構造体の pszUsageIdentifier メンバーを照合する場合、検索条件を満たすにはすべての識別子が一致しなければなりません。ただし、CERT_FIND_OR_ENHKEY_USAGE_FLAG が設定されている場合は、ビット単位の OR 演算で結合されたすべての識別子に対して照合が行われるため、いずれか 1 つの識別子が一致すれば十分です。
CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG このフラグが設定されている場合、通常の一致に加えて、拡張キー使用法拡張も拡張キー使用法プロパティも持たない証明書が検索条件を満たします。
CERT_FIND_NO_ENHKEY_USAGE_FLAG このフラグが設定されている場合、拡張キー使用法も拡張キー使用法プロパティも持たない証明書のみが一致します。このフラグの設定は、pvFindParaNULL であることよりも優先されます。
CERT_FIND_VALID_ENHKEY_USAGE_FLAG このフラグが設定されている場合、関数は指定された使用法に対して有効な証明書のみを一致とみなします。既定では、一致するためには証明書がすべての使用法に対して有効でなければなりません。

指定された使用法のいずれか 1 つに対して有効であればよい場合は、CERT_FIND_OR_ENHKEY_USAGE_FLAG も設定できます。証明書の有効な用途の一覧を取得するために CertGetValidUsages が呼び出される点に注意してください。CERT_FIND_VALID_ENHKEY_USAGE_FLAG が設定されている場合に併用できるのは CERT_FIND_OR_ENHKEY_USAGE_FLAG のみです。

CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG このフラグが設定されている場合、照合処理では拡張の使用法識別子のみが対象となります。pvFindParaNULL であるか、pvFindPara が指す CERT_ENHKEY_USAGE 構造体の cUsageIdentifier メンバーが 0 の場合、拡張キー使用法拡張を持つ証明書はすべて一致します。CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG も設定されている場合は、拡張キー使用法拡張を持たない証明書も一致します。CERT_FIND_NO_ENHKEY_USAGE_FLAG も設定されている場合は、拡張キー使用法拡張を持たない証明書のみが一致します。
CERT_FIND_EXT_PROP_ENHKEY_USAGE_FLAG このフラグが設定されている場合、照合処理ではプロパティである使用法識別子のみが対象となります。pvFindParaNULL であるか、cUsageIdentifier が 0 に設定されている場合、拡張キー使用法プロパティを持つ証明書はすべて一致します。CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG も設定されている場合は、拡張キー使用法プロパティを持たない証明書も一致します。CERT_FIND_NO_ENHKEY_USAGE_FLAG が設定されている場合は、拡張キー使用法プロパティを持たない証明書のみが一致します。
CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG dwFindTypeCERT_FIND_SUBJECT_ATTR および CERT_FIND_ISSUER-ATTR の場合にのみ使用します。既定では、大文字と小文字を区別する完全一致が行われます。このフラグが設定されている場合、一致判定は大文字と小文字を区別しません。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// CERT_STORE_PROV_FIND_INFO  (x64 24 / x86 20 バイト)
typedef struct CERT_STORE_PROV_FIND_INFO {
    DWORD cbSize;
    DWORD dwMsgAndCertEncodingType;
    DWORD dwFindFlags;
    DWORD dwFindType;
    void* pvFindPara;
} CERT_STORE_PROV_FIND_INFO;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct CERT_STORE_PROV_FIND_INFO
{
    public uint cbSize;
    public uint dwMsgAndCertEncodingType;
    public uint dwFindFlags;
    public uint dwFindType;
    public IntPtr pvFindPara;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure CERT_STORE_PROV_FIND_INFO
    Public cbSize As UInteger
    Public dwMsgAndCertEncodingType As UInteger
    Public dwFindFlags As UInteger
    Public dwFindType As UInteger
    Public pvFindPara As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class CERT_STORE_PROV_FIND_INFO(ctypes.Structure):
    _fields_ = [
        ("cbSize", wintypes.DWORD),
        ("dwMsgAndCertEncodingType", wintypes.DWORD),
        ("dwFindFlags", wintypes.DWORD),
        ("dwFindType", wintypes.DWORD),
        ("pvFindPara", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct CERT_STORE_PROV_FIND_INFO {
    pub cbSize: u32,
    pub dwMsgAndCertEncodingType: u32,
    pub dwFindFlags: u32,
    pub dwFindType: u32,
    pub pvFindPara: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type CERT_STORE_PROV_FIND_INFO struct {
	cbSize uint32
	dwMsgAndCertEncodingType uint32
	dwFindFlags uint32
	dwFindType uint32
	pvFindPara uintptr
}
type
  CERT_STORE_PROV_FIND_INFO = record
    cbSize: DWORD;
    dwMsgAndCertEncodingType: DWORD;
    dwFindFlags: DWORD;
    dwFindType: DWORD;
    pvFindPara: Pointer;
  end;
const CERT_STORE_PROV_FIND_INFO = extern struct {
    cbSize: u32,
    dwMsgAndCertEncodingType: u32,
    dwFindFlags: u32,
    dwFindType: u32,
    pvFindPara: ?*anyopaque,
};
type
  CERT_STORE_PROV_FIND_INFO {.bycopy.} = object
    cbSize: uint32
    dwMsgAndCertEncodingType: uint32
    dwFindFlags: uint32
    dwFindType: uint32
    pvFindPara: pointer
struct CERT_STORE_PROV_FIND_INFO
{
    uint cbSize;
    uint dwMsgAndCertEncodingType;
    uint dwFindFlags;
    uint dwFindType;
    void* pvFindPara;
}

HSP用 定義

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

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

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