CertFindCertificateInStore查詢證書

2020-08-14 19:09:35

CertFindCertificateInStore

這個函數

 

PCCERT_CONTEXT WINAPI CertFindCertificateInStore(
    HCERTSTORE hCertStore, 
    DWORD dwCertEncodingType, 
    DWORD dwFindFlags, 
    DWORD dwFindType, 
    const void* pvFindPara, 
    PCCERT_CONTEXT pPrevCertContext 
);

在證書管理裡查詢證書是否安裝

 

查詢欄位

dwFindType
指定正在進行的搜尋型別。搜尋型別確定數據型別、內容和pvFindPara的使用。
每個dwFindType值以及pvFindPara參數的相應數據型別。

const void* pvFindPara    查詢的參數值,可以是結構

 

CERT_FIND_ISSUER_NAME

證書頒發者姓名

證書名稱BLOB結構   ,因爲是結構所以不方便查詢

搜尋整個頒發者名稱與CERT_name_BLOB中的名稱完全匹配的證書。搜尋僅限於與dwCertEncodingType匹配的證書。


CERT_FIND_ISSUER_STR

證書查詢頒發者

以空結尾的寬(Unicode)字串   ,方便查詢

搜尋包含指定頒發者名稱字串的證書。證書的頒發者成員使用格式爲CERT_SIMPLE_name_STR的適當格式CertNameToStr轉換爲適當型別的名稱字串。然後執行不區分大小寫的字串內子字串匹配。設定此值後,搜尋將限於編碼型別與dwCertEncodingType匹配的證書。

 

CERT_FIND_SUBJECT_NAME
證書查詢主題名稱

證書名稱BLOB結構 ,因爲是結構所以不方便查詢

搜尋整個使用者名稱與CERT_name_BLOB結構中的名稱完全匹配的證書。搜尋僅限於與dwCertEncodingType值匹配的證書。

 

CERT_FIND_SUBJECT_STR

證書查詢主題

以空結尾的寬(Unicode)字串  ,方便查詢

搜尋包含指定使用者名稱字串的證書。使用格式爲CERT_SIMPLE_name_STR的適當格式將證書的subject成員轉換爲適當型別的名稱字串。然後執行不區分大小寫的字串內子字串匹配。設定此值後,搜尋將限於編碼型別與dwCertEncodingType匹配的證書。

 

    if (pTargetCert = CertFindCertificateInStore(
        m_hSystemStore,                   // 證書庫控制代碼,系統證書庫  
        MY_ENCODING_TYPE,          // 編碼型別  
        0,                                               // 不需要設定標誌位   
        CERT_FIND_SUBJECT_STR_A,   // 查詢標準爲:證書客體名稱爲szSubjectName       
        certName.c_str(),         //szSubjectName,          // 證書客體名稱  
        pTargetCert))              // 上次查詢到的證書, 第一次查詢,從證書庫開始位置查詢  
    {
        //printf("找到了此證書. \n");
    }
    else
    {
        //printf("未能找到所需的證書.");
    }