共用方式為


CryptQueryObject 函式 (wincrypt.h)

重要 此 API 已被取代。 新的和現有的軟體應該開始使用 密碼編譯新一代 API。 Microsoft 可能會在未來的版本中移除此 API。
 
CryptQueryObject 函式會擷取密碼編譯 API 物件內容的相關信息,例如憑證憑證撤銷清單憑證信任清單。 對象可以位於記憶體中的結構中,或包含在檔案中。

語法

BOOL CryptQueryObject(
  [in]  DWORD      dwObjectType,
  [in]  const void *pvObject,
  [in]  DWORD      dwExpectedContentTypeFlags,
  [in]  DWORD      dwExpectedFormatTypeFlags,
  [in]  DWORD      dwFlags,
  [out] DWORD      *pdwMsgAndCertEncodingType,
  [out] DWORD      *pdwContentType,
  [out] DWORD      *pdwFormatType,
  [out] HCERTSTORE *phCertStore,
  [out] HCRYPTMSG  *phMsg,
  [out] const void **ppvContext
);

參數

[in] dwObjectType

指出要查詢之物件的型別。 這必須是下列其中一個值。

意義
CERT_QUERY_OBJECT_BLOB
物件會儲存在記憶體中的結構中。
CERT_QUERY_OBJECT_FILE
物件會儲存在檔案中。

[in] pvObject

要查詢之物件的指標。 數據指標的類型取決於 dwObjectType 參數的內容。

dwObjectType 意義
CERT_QUERY_OBJECT_BLOB
此參數是包含要查詢之物件的 CERT_BLOB或類似結構指標。
CERT_QUERY_OBJECT_FILE
此參數是 Null 終止 Unicode 字串的指標,其中包含要查詢之檔案的路徑和名稱。

[in] dwExpectedContentTypeFlags

指出預期的內容類型。 這可以是下列其中一個值。

意義
CERT_QUERY_CONTENT_FLAG_ALL
內容可以是任何類型的。 這不包含 CERT_QUERY_CONTENT_FLAG_PFX_AND_LOAD 旗標。

如果指定此旗標,此函式會嘗試取得對象的相關信息,嘗試不同的內容類型,直到找到適當的內容類型或內容類型耗盡為止。 這顯然沒有效率,因此只有在不知道內容類型時,才應該使用此旗標。

CERT_QUERY_CONTENT_FLAG_CERT
內容是單一憑證。
CERT_QUERY_CONTENT_FLAG_CERT_PAIR
內容是 抽象語法表示法一 (ASN.1) 編碼X509_CERT_PAIR (包含正向、反向或反向跨憑證的編碼憑證組) 。
CERT_QUERY_CONTENT_FLAG_CRL
內容是單一CRL。
CERT_QUERY_CONTENT_FLAG_CTL
內容是單一 CTL。
CERT_QUERY_CONTENT_FLAG_PFX
內容是 PFX (PKCS #12) 封包,但此函式不會載入它。 您可以使用 PFXImportCertStore 函式將此載入至存放區。
CERT_QUERY_CONTENT_FLAG_PFX_AND_LOAD
內容是 PFX (PKCS #12) 封包,而且此函式會受限於下列附注中指定的條件載入。
注意  

如果 PFX 封包包含不是空字串或 NULL 的內嵌密碼,且密碼未受到包含呼叫使用者的 Active Directory (AD) 主體保護,則此函式將無法解密 PFX 封包。 不過,如果 PFX 封包建立時所使用的密碼已加密至 AD 主體,而且該主體中的使用者具有解密密碼的許可權,則可以解密封包。 如需詳細資訊,請參閱 pvPara 參數和 PFXExportCertStoreEx 函式的PKCS12_PROTECT_TO_DOMAIN_SIDS旗標。

您可以從 Windows 8 和 Windows Server 2012 開始保護 AD 主體的 PFX 密碼。

 
Windows Server 2003 和 Windows XP: 不支援此值。
CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED
內容是 PKCS #7 簽署的訊息。
CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED
內容是內嵌的 PKCS #7 簽署訊息。
CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED
內容是 PKCS #7 未簽署的訊息。
CERT_QUERY_CONTENT_FLAG_PKCS10
內容是 PKCS #10 訊息。
CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT
內容是串行化的單一憑證。
CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL
內容是串行化的單一 CRL。
CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL
內容會串行化單一 CTL。
CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE
內容是串行化的存放區。

[in] dwExpectedFormatTypeFlags

表示所傳回型別的預期格式。 這可以是下列其中一個值。

意義
CERT_QUERY_FORMAT_FLAG_ALL
內容可以任何格式傳回。
CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED
內容應以 ASCII 十六進位編碼格式傳回,其前置詞為 “{ASN}”。
CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED
內容應該以Base64編碼格式傳回。
CERT_QUERY_FORMAT_FLAG_BINARY
內容應該以二進位格式傳回。

[in] dwFlags

此參數保留供日後使用,且必須設定為零。

[out] pdwMsgAndCertEncodingType

DWORD 值的指標,可接收訊息中使用的編碼類型。 如果不需要這項資訊,請將此參數設定為 NULL

此參數可以接收下列一或多個值的組合。

意義
PKCS_7_ASN_ENCODING
65536 (0x10000)
指定 PKCS 7 訊息編碼。
X509_ASN_ENCODING
1 (0x1)
指定 X.509 憑證編碼。

[out] pdwContentType

接收內容實際類型的 DWORD 值的指標。 如果不需要這項資訊,請將此參數設定為 NULL。 傳回的內容類型可以是下列其中一個值。

意義
CERT_QUERY_CONTENT_CERT
內容是單一憑證。
CERT_QUERY_CONTENT_CERT_PAIR
內容是 ASN.1 編碼X509_CERT_pair。
CERT_QUERY_CONTENT_CRL
內容是單一CRL。
CERT_QUERY_CONTENT_CTL
內容是單一 CTL。
CERT_QUERY_CONTENT_PFX
內容是 PFX (PKCS #12) 封包。 此函式只會驗證物件是否為 PKCS #12 封包。 PKCS #12 封包不會載入證書存儲。
CERT_QUERY_CONTENT_PFX_AND_LOAD
內容是 PFX (PKCS #12) 封包,且已載入證書存儲。

Windows Server 2003 和 Windows XP: 不支援此值。

CERT_QUERY_CONTENT_PKCS7_SIGNED
內容是 PKCS #7 簽署的訊息。
CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED
內容是內嵌的 PKCS #7 簽署訊息。
CERT_QUERY_CONTENT_PKCS7_UNSIGNED
內容是 PKCS #7 未簽署的訊息。
CERT_QUERY_CONTENT_PKCS10
內容是 PKCS #10 訊息。
CERT_QUERY_CONTENT_SERIALIZED_CERT
內容是串行化的單一憑證。
CERT_QUERY_CONTENT_SERIALIZED_CRL
內容是串行化的單一 CRL。
CERT_QUERY_CONTENT_SERIALIZED_CTL
內容是串行化的單一 CTL。
CERT_QUERY_CONTENT_SERIALIZED_STORE
內容是串行化的存放區。

[out] pdwFormatType

接收內容實際格式類型的 DWORD 值的指標。 如果不需要這項資訊,請將此參數設定為 NULL。 傳回的格式類型可以是下列其中一個值。

意義
CERT_QUERY_FORMAT_ASN_ASCII_HEX_ENCODED
內容採用具有 “{ASN}” 前置詞的 ASCII 十六進位編碼格式。
CERT_QUERY_FORMAT_BASE64_ENCODED
內容採用Base64編碼格式。
CERT_QUERY_FORMAT_BINARY
內容格式為二進位格式。

[out] phCertStore

HCERTSTORE 值的指標,這個值會接收憑證存放區的句柄,其中包含物件中的所有憑證、CRL 和 CCL。

dwContentType 參數收到下列其中一個值時,此參數只會接收證書存儲句柄。 此參數會接收所有其他內容類型的 NULL

CERT_QUERY_CONTENT_CERT

CERT_QUERY_CONTENT_CRL

CERT_QUERY_CONTENT_CTL

CERT_QUERY_CONTENT_PFX_AND_LOAD

CERT_QUERY_CONTENT_PKCS7_SIGNED

CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED

CERT_QUERY_CONTENT_SERIALIZED_CERT

CERT_QUERY_CONTENT_SERIALIZED_CRL

CERT_QUERY_CONTENT_SERIALIZED_CTL

CERT_QUERY_CONTENT_SERIALIZED_STORE

當您完成使用句柄時,請將句柄傳遞至 CertCloseStore 函式來釋放它。

如果不需要這項資訊,請將此參數設定為 NULL

[out] phMsg

接收已開啟之訊息句柄的 HCRYPTMSG 值的指標。

此參數只會在 dwContentType 參數收到下列其中一個值時收到訊息句柄。 此參數會接收所有其他內容類型的 NULL

CERT_QUERY_CONTENT_PKCS7_SIGNED

CERT_QUERY_CONTENT_PKCS7_SIGNED_EMBED

CERT_QUERY_CONTENT_PKCS7_UNSIGNED

當您完成使用句柄時,請將句柄傳遞至 CryptMsgClose 函式來釋放它。

如果不需要這項資訊,請將此參數設定為 NULL

[out] ppvContext

指標,可接收物件的其他資訊。

此數據的格式取決於 dwContentType 參數收到的值。 下表列出指定 dwContentType 值的數據格式。

dwContentType 意義
CERT_QUERY_CONTENT_CERT
此參數會接收 CERT_CONTEXT 結構的指標。 當您完成使用 結構時,請將這個指標傳遞至 CertFreeCertificateContext 函式,以釋放它。
CERT_QUERY_CONTENT_CRL
此參數會接收 CRL_CONTEXT 結構的指標。 當您完成使用 結構時,請將此指標傳遞至 CertFreeCRLContext 函式來釋放它。
CERT_QUERY_CONTENT_CTL
此參數會接收 CTL_CONTEXT 結構的指標。 當您完成使用 結構時,請將此指標傳遞至 CertFreeCTLContext 函式來釋放它。
CERT_QUERY_CONTENT_SERIALIZED_CERT
此參數會接收 CERT_CONTEXT 結構的指標。 當您完成使用 結構時,請將這個指標傳遞至 CertFreeCertificateContext 函式,以釋放它。
CERT_QUERY_CONTENT_SERIALIZED_CRL
此參數會接收 CRL_CONTEXT 結構的指標。 當您完成使用 結構時,請將此指標傳遞至 CertFreeCRLContext 函式來釋放它。
CERT_QUERY_CONTENT_SERIALIZED_CTL
此參數會接收 CTL_CONTEXT 結構的指標。 當您完成使用 結構時,請將此指標傳遞至 CertFreeCTLContext 函式來釋放它。
 

如果不需要這項資訊,請將此參數設定為 NULL

傳回值

如果函式成功,函式會傳回非零。

如果函式失敗,它會傳回零。 如需擴充錯誤資訊,請呼叫 GetLastError

規格需求

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

另請參閱

資料管理 函式