共用方式為


CertAddEncodedCTLToStore 函式 (wincrypt.h)

CertAddEncodedCTLToStore 函式會從編碼 CTL 建立憑證信任清單 (CTL) 內容,並將其新增至證書存儲。 函式會在將 CTL 內容新增至存放區之前建立 CTL 內容的複本。

語法

BOOL CertAddEncodedCTLToStore(
  [in]            HCERTSTORE    hCertStore,
  [in]            DWORD         dwMsgAndCertEncodingType,
  [in]            const BYTE    *pbCtlEncoded,
  [in]            DWORD         cbCtlEncoded,
  [in]            DWORD         dwAddDisposition,
  [out, optional] PCCTL_CONTEXT *ppCtlContext
);

參數

[in] hCertStore

證書存儲的句柄。

[in] dwMsgAndCertEncodingType

指定使用的編碼類型。 憑證和 訊息編碼類型 都必須藉由將它們與位 OR 作業結合來指定,如下列範例所示:

X509_ASN_ENCODING |PKCS_7_ASN_ENCODING

目前定義的編碼類型如下:

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

[in] pbCtlEncoded

緩衝區的指標,其中包含要新增至證書存儲的編碼 CTL。

[in] cbCtlEncoded

pbCtlEncoded 緩衝區的大小,以位元組為單位。

[in] dwAddDisposition

指定如果相符的 CTL 或相符 CTL 的連結已存在於存放區中,所要採取的動作。 目前定義的處置值及其用途如下

意義
CERT_STORE_ADD_ALWAYS
不檢查現有的相符 CTL 或符合 CTL 的連結。 新的 CTL 一律會新增至存放區。 這可能會導致存放區中的重複專案。
CERT_STORE_ADD_NEW
如果相符的 CTL 或相符 CTL 的連結存在,作業就會失敗。 GetLastError 會傳回CRYPT_E_EXISTS程序代碼。
CERT_STORE_ADD_NEWER
如果相符的 CTL 或相符 CTL 的連結存在,則會比較 CTL 上的 ThisUpdate 時間。 如果現有的 CTL 的 ThisUpdate 時間小於新 CTL 上的 ThisUpdate 時間,舊的 CTL 或連結就會取代為 CERT_STORE_ADD_REPLACE_EXISTING。 如果現有 CTL 的 ThisUpdate 時間大於或等於要新增之 CTL 上的 ThisUpdate 時間,則函式會失敗,並傳回CRYPT_E_EXISTS程式代碼的 GetLastError

如果在存放區中找不到相符 CTL 或相符 CTL 的連結,則會將新的 CTL 新增至存放區。

CERT_STORE_ADD_NEWER_INHERIT_PROPERTIES
動作與 CERT_STORE_ADD_NEWER 相同,不同之處在於,如果取代較舊的 CTL,舊版 CTL 的屬性會併入取代 CTL 中。
CERT_STORE_ADD_REPLACE_EXISTING
如果相符的 CTL 或相符 CTL 的連結存在,則會刪除現有的 CTL 或連結,並建立新的 CTL 並新增至存放區。 如果相符的 CTL 或相符 CTL 的連結不存在,則會新增一個。
CERT_STORE_ADD_REPLACE_EXISTING_INHERIT_PROPERTIES
如果存放區中有相符的 CTL,在建立並新增新內容之前,會先刪除該現有內容。 新增的內容會繼承現有 CTL 的屬性。
CERT_STORE_ADD_USE_EXISTING
如果相符的 CTL 或相符 CTL 的連結存在,則會使用現有的 CTL,並新增來自新 CTL 的屬性。 函式不會失敗,但不會新增任何新的 CTL。 如果 ppCertContext 不是 NULL,則會複製現有的內容。

如果相符的 CTL 或相符 CTL 的連結不存在,則會新增新的 CTL。

[out, optional] ppCtlContext

已譯碼 之CTL_CONTEXT 結構的指標。 可為 NULL ,表示呼叫的應用程式不需要新增或現有 CTL 的複本。 如果已建立複本,則必須使用 CertFreeCTLContext 釋放它。

傳回值

如果函式成功,則傳回值為 TRUE

如果函式失敗,則傳回值為 FALSE。 如需擴充錯誤資訊,請呼叫 GetLastError

以下是一些可能的錯誤碼。

傳回碼 Description
CRYPT_E_EXISTS
已設定CERT_STORE_ADD_NEW,且 CTL 已存在於存放區中;或 CERT_STORE_ADD_NEWER已設定,且存放區中有一個 CTL,且此存放區中的 ThisUpdate 時間大於或等於要新增的 CTL 上的 ThisUpdate 時間。
E_INVALIDARG
在 dwAddDisposition 參數中指定無效的處置值,或指定無效的編碼類型。 目前僅支援X509_ASN_ENCODING和PKCS_7_ASN_ENCODING的編碼類型。
 

如果函式失敗, GetLastError 可能會傳回 抽象語法表示法一 (ASN.1) 編碼/譯碼錯誤。 如需這些錯誤的相關信息,請參閱 ASN.1 編碼/譯碼傳回值

規格需求

需求
最低支援的用戶端 Windows XP [傳統型應用程式 |UWP 應用程式]
最低支援的伺服器 Windows Server 2003 [傳統型應用程式 |UWP 應用程式]
目標平台 Windows
標頭 wincrypt.h
程式庫 Crypt32.lib
Dll Crypt32.dll

另請參閱

CertAddCTLContextToStore

CertFreeCTLContext

憑證信任清單函式