使用非托管C+;访问X509证书存储+; 有人知道我如何使用非托管C++来做下面的C代码吗?也就是说,用拇指指纹?< /P>从X509证书存储中查询证书? var store = new X509Store(StoreName.My, StoreLocation.LocalMachine); store.Open(OpenFlags.ReadOnly); var allCerts = store.Certificates; foreach (var certificate in from X509Certificate2 certificate in allCerts where certificate.Thumbprint != null && certificate.Thumbprint.Equals(thumbprint, StringComparison.OrdinalIgnoreCase) select certificate) { return certificate; }

使用非托管C+;访问X509证书存储+; 有人知道我如何使用非托管C++来做下面的C代码吗?也就是说,用拇指指纹?< /P>从X509证书存储中查询证书? var store = new X509Store(StoreName.My, StoreLocation.LocalMachine); store.Open(OpenFlags.ReadOnly); var allCerts = store.Certificates; foreach (var certificate in from X509Certificate2 certificate in allCerts where certificate.Thumbprint != null && certificate.Thumbprint.Equals(thumbprint, StringComparison.OrdinalIgnoreCase) select certificate) { return certificate; },c++,certificate,unmanaged,x509certificate,x509certificate2,C++,Certificate,Unmanaged,X509certificate,X509certificate2,提前谢谢 Dave为了实现您想要的功能,您必须查看Win32 CryptAPI库。这不会像.NET那么容易。调查和调查 您需要打开一个证书存储并将其传递到CertFindCertificateStore,创建一个结构来保存查找证书所需的任何条件。您可以使用序列号、签名等 HCERTSTORE hSysStore = NULL; PCCERT_CONTEXT pDesiredCert = NULL; if(hSysStore = CertOpenStore( CERT_ST

提前谢谢


Dave

为了实现您想要的功能,您必须查看Win32 CryptAPI库。这不会像.NET那么容易。调查和调查

您需要打开一个证书存储并将其传递到CertFindCertificateStore,创建一个结构来保存查找证书所需的任何条件。您可以使用序列号、签名等

    HCERTSTORE hSysStore = NULL;
    PCCERT_CONTEXT  pDesiredCert = NULL;
if(hSysStore = CertOpenStore(
   CERT_STORE_PROV_SYSTEM,          // The store provider type
   0,                               // The encoding type is
                                    // not needed
   NULL,                            // Use the default HCRYPTPROV
   CERT_SYSTEM_STORE_CURRENT_USER,  // Set the store location in a
                                    // registry location
   L"MY"                            // The store name as a Unicode 
                                    // string
   ))
{
    //We have our store, let's do stuff with it
    if (pDesiredCert = CertFindCertificateInStore(.....) {  ..... }
}
else
{
    //Error stuff
}
您需要
#包含
#包含

中的代码在较新的系统上不起作用。在较新版本的Windows上,证书的名称或主题采用Unicode格式,每个字符使用2个字节。以下行:

LPCSTR lpszCertSubject = (LPCSTR) "Cert_subject_1";
必须更改为:

LPCWSTR lpszCertSubject = (LPCWSTR ) L"Cert_subject_1";

LPCTSTR lpszCertSubject=(LPCTSTR)\u T“Cert\u subject\u 1”;//添加#包括
取决于你需要什么

LPCTSTR lpszCertSubject = (LPCTSTR ) _T"Cert_subject_1"; // add #include <tchar.h>