CertCreateCertificateContext 関数 (wincrypt.h)

CertCreateCertificateContext 関数は、エンコードされた証明書から証明書コンテキストを作成します。 作成されたコンテキストは、証明書ストアに永続化されません。 関数は、作成されたコンテキスト内でエンコードされた証明書のコピーを作成します。

構文

PCCERT_CONTEXT CertCreateCertificateContext(
  [in] DWORD      dwCertEncodingType,
  [in] const BYTE *pbCertEncoded,
  [in] DWORD      cbCertEncoded
);

パラメーター

[in] dwCertEncodingType

使用するエンコードの種類を指定します。 次の例に示すように、証明書と メッセージエンコードの両方の種類 をビットごとの OR 操作と組み合わせて指定することは、常に許容されます。

X509_ASN_ENCODING |PKCS_7_ASN_ENCODING 現在定義されているエンコードの種類は次のとおりです。

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

[in] pbCertEncoded

コンテキストの作成元となるエンコードされた証明書を含むバッファーへのポインター。

[in] cbCertEncoded

pbCertEncoded バッファーのサイズ (バイト単位)。

戻り値

関数が成功した場合、関数は読み取り専用 のCERT_CONTEXTへのポインターを返します。 証明書コンテキストの使用が完了したら、 CertFreeCertificateContext 関数を呼び出して解放します。

関数が 証明書コンテキストをデコードして作成できない場合は、 NULL を返します。 拡張エラー情報については、 GetLastError を呼び出します。 考えられるエラー コードの一部を次に示します。

リターン コード 説明
E_INVALIDARG
無効な証明書エンコードの種類が指定されました。 現時点では、X509_ASN_ENCODINGの種類のみがサポートされています。
 

関数が失敗した場合、GetLastError は抽象構文表記 1 (ASN.1) エンコード/デコード エラーを返す可能性があります。 これらのエラーの詳細については、「 ASN.1 エンコード/デコードの戻り値」を参照してください。

解説

CERT_CONTEXTは、CertFreeCertificateContext を呼び出して解放する必要があります。 CertDuplicateCertificateContext を呼び出して重複させることができます。 証明書のプロパティを格納および読み取るために、CertSetCertificateContextProperty と CertGetCertificateContextProperty を呼び出すことができます。

次の例は、エンコードされた証明書から証明書コンテキストを作成する方法を示しています。 作成されたコンテキストは証明書ストアに格納されません。 この関数を使用する別の例については、「 サンプル C プログラム: 証明書ストア操作」を参照してください。

#include <windows.h>
#include <stdio.h>
#include <Wincrypt.h>

#define MY_ENCODING_TYPE  (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING)

void main()
{
	PCCERT_CONTEXT  pCertContext = NULL; 

	//------------------------------------------------------------------ 
	//  Create a new certificate from the encoded part of
	//  an available certificate. pDesiredCert is a previously
	//  assigned PCCERT_CONTEXT variable.
	if(pCertContext = CertCreateCertificateContext(
		MY_ENCODING_TYPE,              // The encoding type
		pDesiredCert->pbCertEncoded,   // The encoded data from
									   // the certificate retrieved
		pDesiredCert->cbCertEncoded))  // The length of the encoded data
	{
		printf("A new certificate has been created.\n");
	 
		// Use the certificate context as needed.
		// ...

		// When finished, free the certificate context.
		CertFreeCertificateContext(pCertContext);
	}
	else
	{
		printf("A new certificate could not be created.\n");
		exit(1);
	}
}

要件

   
サポートされている最小のクライアント Windows XP [デスクトップ アプリ | UWP アプリ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ]
対象プラットフォーム Windows
ヘッダー wincrypt.h
Library Crypt32.lib
[DLL] Crypt32.dll

関連項目

CERT_CONTEXT

CertCreateCRLContext

CertCreateCTLContext

CertDuplicateCertificateContext

CertFreeCertificateContext

CertGetCertificateContextProperty

CertSetCertificateContextProperty

証明書関数