假設有憑證,譯碼憑證 BLOB 的第一個步驟是呼叫 CertCreateCertificateContext,並將指標傳遞給編碼憑證 (BLOB)。 呼叫此函式時,它會建立編碼憑證的複本、建立類型為 CERT_CONTEXT的結構,並建立類型為 CERT_INFO的結構。 如下圖所示,憑證內容 包含原始憑證 BLOB、類型為 CERT_CONTEXT的 C 結構,以及類型為 CERT_INFO的 C 結構。 CERT_CONTEXT 結構的其中一個成員會指向 CERT_INFO 結構,另一個則指向編碼的憑證 BLOB。
編碼的物件(數據成員)一律會以輸入的形式提供給 CryptDecodeObject 函式,而輸出是 C 結構,視您目前的程式而定,可能或可能沒有編碼成員。
有一個其他成員需要一些譯碼,也就是 Extension 成員。 雖然它不是在 CERT_INFO 層級編碼,但它確實包含一些編碼的資訊。 若要譯碼這項資訊,請繼續進行,如下圖所示。
在 CERT_INFO 結構中,成員 rgExtension 是 CERT_EXTENSION 結構的陣列指標。 每個 CERT_EXTENSION 結構都有一個 Value 成員,其格式為編碼,且必須譯碼。 Value 成員會傳遞至 CryptDecodeObject 函式,然後函式的輸出取決於 pszObjId 成員 的值。 請注意,在圖例中,會產生兩個不同的結構,其中一種是類型 CERT_BASIC_CONSTRAINTS_INFO,另一種是類型 CERT_AUTHORITY_KEY_ID_INFO,取決於 pszObjId 的值。