システムストアから証明書をロードしようとしています。私はCryptoAPIの機能からCertFindCertificateInStore
を使用しています:CryptoAPIを使用してユニコードCNで証明書をロードするにはどうすればよいですか?
std::string certName;
CERT_RDN_ATTR subjCN;
subjCN.pszObjId = szOID_COMMON_NAME;
subjCN.dwValueType = CERT_RDN_PRINTABLE_STRING;
subjCN.Value.cbData = 2*(certName.size());
subjCN.Value.pbData = (BYTE*)certName.c_str();
CERT_RDN rdn;
rdn.cRDNAttr = 1;
rdn.rgRDNAttr = &subjCN;
cert = CertFindCertificateInStore (certStore,
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
CERT_UNICODE_IS_RDN_ATTRS_FLAG ,
CERT_FIND_SUBJECT_ATTR,
&rdn,
NULL);
なぜ私は
CERT_RDN_PRINTABLE_STRING
代わりのCERT_RDN_UNICODE_STRING
にCERT_RDN_ATTR
ためdwValueTypeを設定する必要がありますか? (私はUnicodeを使用しています)CERT_RDN_UNICODE_STRING
でこのコードは機能しません。しかし、空白とロシアのシンボルを含む件名CNを証明書に読み込むことはできません。 "foo"のような単純なCN名の場合、このコードは完璧に動作します。
このようにユニコード名で証明書を読み込むにはどうすればよいですか?