Win32 API 日本語リファレンス
ホームSecurity.Cryptography.Certificates › ICertAdmin

ICertAdmin

COMIDispatch (デュアル)
IDispatch を実装(デュアルインターフェース)。HSP では comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。
IID34df6950-7fb6-11d0-8817-00a0c903b83c継承元IDispatch呼び出し名前(IDispatch) または vtbl自前メソッド開始 vtbl7

公式ドキュメント

適切に承認されたクライアントに管理機能を提供します。

メソッド 10

vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。

vtbl 7 HRESULT IsValidCertificate(LPWSTR strConfig, LPWSTR strSerialNumber, INT* pDisposition)

証明機関(CA)のキーに対して証明書を検証し、その証明書が失効していないことを確認します。このメソッドは ICertAdmin インターフェイスで最初に定義されました。

strConfigLPWSTRin

CA の有効な構成文字列を COMPUTERNAME\CANAME の形式で表します。COMPUTERNAME は Certificate Services サーバーのネットワーク名、CANAME は Certificate Services のセットアップ時に入力した証明機関の共通名です。構成文字列名については、 ICertConfig を参照してください。

重要 IsValidCertificate は、構成文字列が変更されても内部キャッシュをクリアしません。CA の構成文字列を変更する場合は、新しい ICertAdmin オブジェクトをインスタンス化し、新しい構成文字列でこのメソッドを再度呼び出す必要があります。
strSerialNumberLPWSTRin確認対象の証明書を識別するシリアル番号を指定します。文字列では、シリアル番号を偶数桁の 16 進数で指定する必要があります。必要に応じて、桁数を偶数にするために先頭に 0 を付加できます。先頭に付加できる 0 は 1 つまでです。
pDispositionINT*out処理状況の値を受け取る LONG へのポインターです。

戻り値

C++

メソッドが成功し、pDisposition パラメーターが次のいずれかの値に設定された場合、メソッドは S_OK を返します。

メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。

VB

戻り値は証明書の処理状況を指定します。この値は次のいずれかの値です。(これらの値は Certadm.h で定義されています。)
リターンコード 説明
CA_DISP_INCOMPLETE
呼び出しが完了しませんでした。
CA_DISP_ERROR
呼び出しが失敗しました。
CA_DISP_REVOKED
証明書は失効しています。
CA_DISP_VALID
証明書はまだ有効です。
CA_DISP_INVALID
証明書は発行されていません。
CA_DISP_UNDER_SUBMISSION
証明書は保留中です。

解説(Remarks)

このメソッドは、証明書が発行済みで現在失効していないかどうかのみを判断します。現在の日時が証明書の有効期間(証明書の NotBefore プロパティおよび NotAfter プロパティ)内にあるかどうかは確認しません。このメソッドを使用するアプリケーションは、証明書の有効期限の確認も行う必要があります。

管理タスクは DCOM を使用します。以前のバージョンの Certadm.h で定義されているこのインターフェイスのメソッドを呼び出すコードは、クライアントとサーバーが両方とも同じ Windows オペレーティングシステムを実行している限り、Windows ベースのサーバーで動作します。

    BSTR       bstrCA = NULL;      // Machine\CAName
    BSTR       bstrSerial = NULL;  // Contains the certificate 
                             // serial number
    long       nDisp;              // Contains the certificate
                             // disposition
    HRESULT    hr;

    bstrCA = SysAllocString(L"<COMPUTERNAMEHERE>\\<CANAMEHERE>");
    bstrSerial = SysAllocString(L"<SERIALNUMBERHERE>");

    if (NULL == bstrCA || NULL == bstrSerial)
    {
        printf("Memory allocation failed\n");
        goto error;
    }

    //  Determine whether the certificate is valid.
    //  pCertAdmin is a previously instantiated ICertAdmin 
    //  object pointer.
    hr = pCertAdmin->IsValidCertificate(bstrCA, bstrSerial, &nDisp);
    if (FAILED(hr))
    {
        printf("Failed IsValidCertificate [%x]\n", hr);
        goto error;
    }
    //  Use nDisp as needed.

    //  Done processing.

error:

    //  Free BSTR values.
    if (NULL != bstrCA)
        SysFreeString(bstrCA);

    if (NULL != bstrSerial)
        SysFreeString(bstrSerial);
vtbl 8 HRESULT GetRevocationReason(INT* pReason)

証明書が失効した理由を返します。このメソッドは ICertAdmin インターフェイスで最初に定義されました。

pReasonINT*out失効理由を受け取る変数へのポインターです。

戻り値

C++

メソッドが成功すると、メソッドは S_OK を返し、pReason パラメーターは次の表に示すいずれかの値に設定されます。

メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。

VB

証明書が失効した理由を指定する値を返します。値は次の失効理由コード(Wincrypt.h で定義)のいずれかになります。
リターンコード 説明
CRL_REASON_UNSPECIFIED
失効の理由が指定されていません。
CRL_REASON_KEY_COMPROMISE
サブジェクトの秘密キー、または証明書で検証されたサブジェクトのその他の側面が、侵害されていることが判明している、またはその疑いがあります。
CRL_REASON_CA_COMPROMISE
CA の秘密キー、または証明書で検証された CA のその他の側面が、侵害されていることが判明している、またはその疑いがあります。
CRL_REASON_AFFILIATION_CHANGED
証明書内のサブジェクト名またはその他の情報が変更されましたが、秘密キーが侵害されたと疑う理由はありません。
CRL_REASON_SUPERSEDED
証明書は置き換えられましたが、秘密キーが侵害されたと疑う理由はありません。
CRL_REASON_CESSATION_OF_OPERATION
証明書は発行された目的にはもはや必要ありませんが、秘密キーが侵害されたと疑う理由はありません。
CRL_REASON_CERTIFICATE_HOLD
証明書は保留状態にされています。

解説(Remarks)

GetRevocationReason を呼び出す前に、 IsValidCertificate メソッドを呼び出して証明書の処理状況を取得します。GetRevocationReason を呼び出すには、この事前の呼び出しから証明書の処理状況 CA_DISP_REVOKED を受け取り、証明書が失効していることが示されている必要があります。IsValidCertificate の呼び出しによって、失効理由を取得する対象の証明書が特定されます。

管理タスクは DCOM を使用します。以前のバージョンの Certadm.h で定義されているこのインターフェイスのメソッドを呼び出すコードは、クライアントとサーバーが両方とも同じ Windows オペレーティングシステムを実行している限り、Windows ベースのサーバーで動作します。

// The value for nDisp was set by 
// a call to ICertAdmin2::IsValidCertificate.
if (CA_DISP_REVOKED == nDisp)
{
    // Variable to contain revocation reason.
    long       nReason;

    // Retrieve the revocation reason.
    hr = pCertAdmin->GetRevocationReason(&nReason);
    if (FAILED(hr))
    {
        printf("Failed GetRevocationReason [%x]\n", hr);
        goto error;
    }
    else
        printf("Revocation reason = %d\n", nReason );
}
vtbl 9 HRESULT RevokeCertificate(LPWSTR strConfig, LPWSTR strSerialNumber, INT Reason, DOUBLE Date)

指定した日付または即時に証明書を失効させます。このメソッドは ICertAdmin インターフェイスで最初に定義されました。

strConfigLPWSTRin

証明機関(CA)サーバーの有効な構成文字列を COMPUTERNAME\CANAME の形式で表します。COMPUTERNAME は Certificate Services サーバーのネットワーク名、CANAME は Certificate Services のセットアップ時に入力した証明機関の共通名です。構成文字列名については、ICertConfig を参照してください。

重要 RevokeCertificate は、構成文字列が変更されても内部キャッシュをクリアしません。CA の構成文字列を変更する場合は、新しい ICertAdmin オブジェクトをインスタンス化し、新しい構成文字列でこのメソッドを再度呼び出す必要があります。
strSerialNumberLPWSTRin失効させる証明書を識別するシリアル番号を指定します。文字列では、シリアル番号を偶数桁の 16 進数で指定する必要があります。必要に応じて、桁数を偶数にするために先頭に 0 を付加できます。ただし、先頭に付加できる 0 は 1 つまでです。
ReasonINTin

失効の理由を指定します。 次の値(Wincrypt.h で定義)が サポートされている理由コードです。

CRL_REASON_UNSPECIFIED (0)

CRL_REASON_KEY_COMPROMISE (1)

CRL_REASON_CA_COMPROMISE (2)

CRL_REASON_AFFILIATION_CHANGED (3)

CRL_REASON_SUPERSEDED (4)

CRL_REASON_CESSATION_OF_OPERATION (5)

CRL_REASON_CERTIFICATE_HOLD (6)

CRL_REASON_CERTIFICATE_HOLD 失効理由コードで失効させた証明書は、Reason の値として MAXDWORD を指定して RevokeCertificate を呼び出すことで復元できます。CRL_REASON_CERTIFICATE_HOLD 以外の理由コードで失効させた証明書は復元できないことに注意してください。

DateDOUBLEin失効が有効になる日付を協定世界時(グリニッジ標準時)で指定します。値 0 は現在の協定世界時を示し、証明書は即時に失効します。Date の値は、(証明機関 MMC スナップインで)失効した証明書の [有効な失効日] 列に表示されます。

戻り値

VB

メソッドが成功すると、メソッドは S_OK を返します。

メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。

解説(Remarks)

このメソッドは同じ証明書に対して複数回呼び出すことができ、これにより有効な失効日と失効理由を変更できます。

現在失効している証明書の理由コードが CRL_REASON_CERTIFICATE_HOLD である場合、理由コード(Reason パラメーター)の値として MAXDWORD(Winnt.h で定義)を指定して RevokeCertificate を呼び出すことで、その証明書を復元できます。復元後、その証明書は今後の CRL には表示されません。

管理タスクは DCOM を使用します。以前のバージョンの Certadm.h で定義されているこのインターフェイスのメソッドを呼び出すコードは、クライアントとサーバーが両方とも同じ Windows オペレーティングシステムを実行している限り、Windows ベースのサーバーで動作します。

    BSTR bstrCA = NULL;
    BSTR bstrSerial = NULL;  // certificate serial number
    long nReason;
    DATE RevokeDate;         // revocation date
    SYSTEMTIME st;

    bstrSerial = SysAllocString(L"<SERIALNUMBERHERE>");
    bstrCA = SysAllocString(L"<COMPUTERNAMEHERE>\\<CANAMEHERE>");
    if (NULL == bstrCA || NULL == bstrSerial)
    {
        printf("Memory allocation failed\n");
        goto error;
    }
    
    nReason = CRL_REASON_AFFILIATION_CHANGED;  // Defined
                                          // in Wincrypt.h

    //  Specify when the cert should be revoked.
    //  Note: To revoke immediately, set RevokeDate to zero.
    //  This example sets the revoke date to noon on 1/1/2001.
    //  Zero out values first (avoids setting minutes, seconds,
    //  and so on).
    memset(&st, 0, sizeof(SYSTEMTIME));
    st.wYear = 2001;
    st.wMonth = 1;     // Jan
    st.wDay = 1;       // 1st day of month
    st.wHour = 12;     // Noon

    //  Place the date in the required format.
    if (!SystemTimeToVariantTime(&st, &RevokeDate))
    {
        printf("Unable to convert time.\n");
        goto error;
    }

    //  Revoke the certificate.
    //  pCertAdmin is a previously instantiated ICertAdmin object.
    hr = pCertAdmin->RevokeCertificate( bstrCA,
                                        bstrSerial,
                                        nReason,
                                        RevokeDate );
    if (FAILED(hr))
    {
        printf("Failed RevokeCertificate. [%x]\n", hr);
        goto error;
    }
    else
        printf("Certificate %ws revoked.\n", bstrSerial );

    //  Done processing.

error:

    //  Free resources.
    if (bstrSerial)
        SysFreeString( bstrSerial );
    if (bstrCA)
        SysFreeString( bstrCA );
vtbl 10 HRESULT SetRequestAttributes(LPWSTR strConfig, INT RequestId, LPWSTR strAttributes)

指定した保留中の証明書要求に属性を設定します。このメソッドは ICertAdmin インターフェイスで最初に定義されました。

strConfigLPWSTRin

証明機関(CA)サーバーの有効な構成文字列を COMPUTERNAME\CANAME の形式で表します。COMPUTERNAME は Certificate Services サーバーのネットワーク名、CANAME は Certificate Services のセットアップ時に入力した証明機関の共通名です。構成文字列名については、 ICertConfig を参照してください。

重要 SetRequestAttributes は、構成文字列が変更されても内部キャッシュをクリアしません。CA の構成文字列を変更する場合は、新しい ICertAdmin オブジェクトをインスタンス化し、新しい構成文字列でこのメソッドを再度呼び出す必要があります。
RequestIdINTin属性を受け取る要求の ID を指定します。
strAttributesLPWSTRin

属性データを指定します。各属性は名前と値の文字列のペアです。コロン文字が名前と値を区切り、改行文字が複数の名前と値のペアを区切ります。次に例を示します。

C++ AttributeName1:AttributeValue1\nAttributeName2:AttributeValue2
VB AttributeName1:AttributeValue1 & vbNewLine & AttributeName2:AttributeValue2
要求に追加できる要求属性の数に上限はありません。

Certificate Services は属性名を解析するとき、スペース、ハイフン(マイナス記号)、および大文字と小文字の違いを無視します。たとえば、AttributeName1Attribute Name1Attribute-name1 はすべて同等です。属性値については、Certificate Services は先頭と末尾の空白を無視します。

注意 属性名の最大長は、NULL 以外の文字で 127 文字です。属性値の最大長は、NULL 以外の文字で 4,096 文字です。

戻り値

VB

メソッドが成功すると、メソッドは S_OK を返します。

メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。

解説(Remarks)

SetRequestAttributes を呼び出して追加または更新した属性は、証明書要求に関連付けられた初期の未解析の属性文字列を変更しません。証明書要求の未解析の属性文字列は、証明書が要求された後は変更できません( ICertRequest::Submit メソッドを使用すると、証明書の要求時に属性を指定できます)。

初期の未解析の要求属性文字列を表示するには、証明機関 MMC スナップインを使用できます。

解析済みの属性を表示すると、SetRequestAttributes の呼び出しによる変更も確認できます。

解析済みの属性を表示するには

  1. 証明機関 MMC スナップインを開きます。
  2. [保留中の要求] フォルダーを開きます。
  3. 要求を右クリックし、[すべてのタスク] をポイントして、[属性/拡張の表示] をクリックします。
SetRequestAttributes によって追加されたものを含め、解析済みのすべての属性を列挙または表示するには、 IEnumCERTVIEWATTRIBUTE インターフェイスを使用することもできます。

管理タスクは DCOM を使用します。以前のバージョンの Certadm.h で定義されているこのインターフェイスのメソッドを呼び出すコードは、クライアントとサーバーが両方とも同じ Windows オペレーティングシステムを実行している限り、Windows ベースのサーバーで動作します。

    BSTR bstrAttribs = NULL;
    BSTR bstrCA = NULL;
    long nReqID;  // request ID

    //  Specify the attributes.
    //  For example, "AttName1:AttValue1\nAttName2:AttValue2". 
    bstrAttribs = SysAllocString(L"<ATTRIBUTESHERE>");
    if (NULL == bstrAttribs)
    {
        printf("Memory allocation failed for bstrAttribs.\n");
        goto error;
    }
    
    bstrCA = SysAllocString(L"<COMPUTERNAMEHERE>\\<CANAMEHERE>");
    if (NULL == bstrCA)
    {
        printf("Memory allocation failed for bstrCA.\n");
        goto error;
    }

    //  Request ID to receive the attributes.
    nReqID = <REQUESTIDHERE>;

    //  Add these attributes to the certificate.
    //  pCertAdmin is a previously instantiated
    //  ICertAdmin object pointer. 
    hr = pCertAdmin->SetRequestAttributes( bstrCA,
                                           nReqID,
                                           bstrAttribs );
    if (FAILED(hr))
        printf("Failed SetRequestAttributes [%x]\n", hr);
    else
        printf("SetRequestAttributes succeeded\n");

    //  Done processing.

error:

    if (bstrAttribs)
        SysFreeString(bstrAttribs);
    if (bstrCA)
        SysFreeString(bstrCA);
    //  Free other resources.
vtbl 11 HRESULT SetCertificateExtension(LPWSTR strConfig, INT RequestId, LPWSTR strExtensionName, CERT_PROPERTY_TYPE Type, INT Flags, VARIANT* pvarValue)

証明書要求に応じて発行される証明書に新しい拡張を追加します。このメソッドは ICertAdmin インターフェイスで最初に定義されました。

strConfigLPWSTRin

証明機関(CA)サーバーの有効な構成文字列を COMPUTERNAME\CANAME の形式で表します。COMPUTERNAME は Certificate Services サーバーのネットワーク名、CANAME は Certificate Services のセットアップ時に入力した証明機関の共通名です。構成文字列名については、 ICertConfig を参照してください。

重要 SetCertificateExtension は、構成文字列が変更されても内部キャッシュをクリアしません。CA の構成文字列を変更する場合は、新しい ICertAdmin オブジェクトをインスタンス化し、新しい構成文字列でこのメソッドを再度呼び出す必要があります。
RequestIdINTin証明書要求の ID を指定します。
strExtensionNameLPWSTRin設定する拡張のオブジェクト識別子(OID)を指定します。文字列の長さは、NULL 以外の文字で 31 文字以下である必要があります。
TypeCERT_PROPERTY_TYPEin

設定する拡張の種類を指定します。Type パラメーターは、pvarValue パラメーターのデータ型と一致している必要があります。このデータ型は、VARIANT 構造体の vt フィールドに設定されます。

このパラメーターには、次のいずれかの値を指定できます。

意味
PROPTYPE_LONG
符号付き long データ
PROPTYPE_DATE
日付/時刻
PROPTYPE_BINARY
拡張の値はそのまま設定され、必要に応じて ASN.1 エンコードされているものと見なされます。
PROPTYPE_STRING
拡張の値は、新しい証明書に配置される前に IA5 文字列として ASN.1 エンコードされます。
注意 単一の URL で構成される拡張の値に PROPTYPE_STRING を使用するのは、その URL を IA5 文字列として自動的にエンコードしたい場合のみにしてください。それ以外の場合は、URL を自分で IA5 文字列としてエンコードし、エンコードした値を PROPTYPE_BINARY として渡してください。
FlagsINTin

設定する拡張のフラグを指定します。フラグを設定しない場合は、値 0 を使用します。これらのフラグは、ビットごとの OR 演算で組み合わせることができ、ポリシープライベート拡張フラグ(EXTENSION_POLICY_MASK フィールドの上位 8 ビット)と組み合わせることもできます。

注意 Flags パラメーターが EXTENSION_DISABLE_FLAG に設定されている場合、拡張はサーバーログで無効になり、証明書には追加されません。
意味
EXTENSION_CRITICAL_FLAG
これはクリティカルな拡張です。
EXTENSION_DISABLE_FLAG
この拡張は使用されません。
pvarValueVARIANT*in拡張に関連付けられる値を指定します。

戻り値

VB

メソッドが成功すると、メソッドは S_OK を返します。

メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。

解説(Remarks)

管理タスクは DCOM を使用します。以前のバージョンの Certadm.h で定義されているこのインターフェイスのメソッドを呼び出すコードは、クライアントとサーバーが両方とも同じ Windows オペレーティングシステムを実行している限り、Windows ベースのサーバーで動作します。

vtbl 12 HRESULT DenyRequest(LPWSTR strConfig, INT RequestId)

保留中の指定した証明書要求を拒否します。

strConfigLPWSTRin

証明機関(CA)の有効な構成文字列を COMPUTERNAME\CANAME の形式で表します。COMPUTERNAME は Certificate Services サーバーのネットワーク名、CANAME は Certificate Services のセットアップ時に入力した証明機関の共通名です。構成文字列については、ICertConfig を参照してください。

重要 DenyRequest は、構成文字列が変更されても内部キャッシュをクリアしません。CA の構成文字列を変更する場合は、新しい ICertAdmin オブジェクトをインスタンス化し、新しい構成文字列でこのメソッドを再度呼び出す必要があります。
RequestIdINTin拒否する保留中の要求の ID を指定します。

解説(Remarks)

管理タスクは DCOM を使用します。以前のバージョンの Certadm.h で定義されているこのインターフェイスのメソッドを呼び出すコードは、クライアントとサーバーが両方とも同じ Windows オペレーティングシステムを実行している限り、Windows ベースのサーバーで動作します。

次の例では、必要な変数を宣言し、COM を初期化して、CertAdmin クラスのインスタンスを作成します。次に DenyRequest を呼び出し、成功または失敗を画面に出力します。最後にリソースを解放します。

//  Pointer to an interface object.
ICertAdmin * pCertAdmin = NULL;

    BSTR       bstrCA = NULL;  // variable for machine\CAName
    long       nReqID;         // variable for Request ID
    HRESULT    hr;

    //  Initialize COM.
    hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
    if (FAILED(hr))
    {
        printf("Failed CoInitializeEx [%x]\n", hr);
        goto error;
    }

    //  Create the CertAdmin object
    //  and get a pointer to its ICertAdmin interface.
    hr = CoCreateInstance( CLSID_CCertAdmin,
                           NULL,
                           CLSCTX_INPROC_SERVER,
                           IID_ICertAdmin,
                           (void **)&pCertAdmin);
    if (FAILED(hr))
    {
        printf("Failed CoCreateInstance pCertAdmin [%x]\n", hr);
        goto error;
    }

    //  Note the use of two '\' in C++ to produce one '\'.
    bstrCA = SysAllocString(L"<COMPUTERNAMEHERE>\\<CANAMEHERE>");
    if (NULL == bstrCA)
    {
        printf("Failed to allocate memory for bstrCA\n");
        goto error;
    }

    //  nReqID is RequestID to be denied.
    nReqID = <REQUESTIDHERE>;

    //  Deny the request.
    hr = pCertAdmin->DenyRequest( bstrCA, nReqID );
    if (FAILED(hr))
    {
        printf("Failed DenyRequest %ws %d [%x]\n",
               bstrCA, nReqID, hr);
        goto error;
    }
    else
        printf("Denied request %ws %d\n",
                bstrCA, nReqID );

    //  Done processing.

    
error:

    //  Free BSTR values.
    if (NULL != bstrCA)
        SysFreeString(bstrCA);

    //  Clean up object resources.
    if (NULL != pCertAdmin)
        pCertAdmin->Release();

    //  Free COM resources.
    CoUninitialize(); 
vtbl 13 HRESULT ResubmitRequest(LPWSTR strConfig, INT RequestId, INT* pDisposition)

指定した証明書要求を、指定した証明機関のポリシーモジュールに送信します。このメソッドは ICertAdmin インターフェイスで最初に導入されました。

strConfigLPWSTRin

証明機関(CA)の有効な構成文字列を COMPUTERNAME\CANAME の形式で表します。COMPUTERNAME は Certificate Services サーバーのネットワーク名、CANAME は Certificate Services のセットアップ時に入力した証明機関の共通名です。構成文字列名については、 ICertConfig を参照してください。

重要 ResubmitRequest は、構成文字列が変更されても内部キャッシュをクリアしません。CA の構成文字列を変更する場合は、新しい ICertAdmin オブジェクトをインスタンス化し、新しい構成文字列でこのメソッドを再度呼び出す必要があります。
RequestIdINTin再送信する要求の ID を指定します。
pDispositionINT*out要求の処理状況へのポインターです。

戻り値

C++

メソッドが成功し、pDisposition パラメーターが要求の処理状況を指定する次のいずれかの値に設定された場合、メソッドは S_OK を返します。

メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。

VB

戻り値は要求の処理状況を指定します。この値は次のいずれかの値です。
リターンコード 説明
CR_DISP_INCOMPLETE
要求が完了しませんでした。
CR_DISP_ERROR
要求が失敗しました。
CR_DISP_DENIED
要求が拒否されました。
CR_DISP_ISSUED
証明書が発行されました。
CR_DISP_ISSUED_OUT_OF_BAND
証明書が個別に発行されました。
CR_DISP_UNDER_SUBMISSION
要求が送信中として受け付けられました。

解説(Remarks)

管理タスクは DCOM を使用します。以前のバージョンの Certadm.h で定義されているこのインターフェイスのメソッドを呼び出すコードは、クライアントとサーバーが両方とも同じ Windows オペレーティングシステムを実行している限り、Windows ベースのサーバーで動作します。

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


    long nDisp;  // disposition value
    long nReqID = <REQUESTIDHERE>;
    BSTR bstrCA = NULL;

    bstrCA = SysAllocString(L"<COMPUTERNAMEHERE>\\<CANAMEHERE>");
    if (NULL == bstrCA)
    {
        printf("Memory allocation failed\n");
        goto error;
    }

    //  pCertAdmin is a previously instantiated ICertAdmin object.
    hr = pCertAdmin->ResubmitRequest(bstrCA, nReqID, &nDisp);
    if (FAILED(hr))
    {
        printf("Failed ResubmitRequest [%x]\n", hr);
        goto error;
    }
    else
        printf("ResubmitRequest disposition is %d\n", nDisp);

error:
    //  Free resources.
    if (bstrCA)
        SysFreeString(bstrCA);
vtbl 14 HRESULT PublishCRL(LPWSTR strConfig, DOUBLE Date)

Certificate Services の証明機関(CA)に対して、新しい証明書失効リスト(CRL)を発行する要求を送信します。このメソッドは ICertAdmin インターフェイスで最初に導入されました。

strConfigLPWSTRin

CA の有効な構成文字列を COMPUTERNAME\CANAME の形式で表します。COMPUTERNAME は Certificate Services サーバーのネットワーク名、CANAME は Certificate Services のセットアップ時に入力した証明機関の共通名です。構成文字列名については、ICertConfig を参照してください。

重要 PublishCRL は、構成文字列が変更されても内部キャッシュをクリアしません。CA の構成文字列を変更する場合は、新しい ICertAdmin オブジェクトをインスタンス化し、新しい構成文字列でこのメソッドを再度呼び出す必要があります。

DateDOUBLEinCRL の次回更新日時を協定世界時(グリニッジ標準時)で指定します。 Date が 0 以外の場合、CRL の次回更新日時は Date になりますが、Certificate Services によって適用される丸めや上限の制約を受けます。Date が 0 の場合、CRL の次回更新日時は既定の CRL 発行期間から計算されます。

戻り値

VB

メソッドが成功すると、メソッドは S_OK を返します。

メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。

解説(Remarks)

管理タスクは DCOM を使用します。以前のバージョンの Certadm.h で定義されているこのインターフェイスのメソッドを呼び出すコードは、クライアントとサーバーが両方とも同じ Windows オペレーティングシステムを実行している限り、Windows ベースのサーバーで動作します。

次の例は、CRL の発行を示しています。

    DATE ExpDate;  // CRL expiration date
    SYSTEMTIME st;
    BSTR bstrCA = NULL;

    //  Set the CRL Expiration Date to Noon on Jan. 1, 2005 GMT.
    //  Zero out values first 
    //  (avoids setting minutes, seconds, and so on).
    memset(&st, 0, sizeof(SYSTEMTIME));
    st.wYear = 2005;
    st.wMonth = 1;     // Jan
    st.wDay = 1;       // 1st day of month
    st.wHour = 12;     // Noon

    //  Place the date in required format.
    if (!SystemTimeToVariantTime(&st, &ExpDate))
    {
        printf("Unable to convert time\n");
        goto error;
    }

    bstrCA = SysAllocString(L"<COMPUTERNAMEHERE>\\<CANAMEHERE>");
    if (NULL == bstrCA)
    {
        printf("Memory allocation failed\n");
        goto error;
    }

    //  Publish the CRL.
    //  pCertAdmin is a previously instantiated ICertAdmin object.
    hr = pCertAdmin->PublishCRL(bstrCA, ExpDate);
    if (FAILED(hr))
    {
        printf("Failed PublishCRL [%x]\n", hr);
        goto error;
    }
    else
        printf("PublishCRL succeeded\n");
vtbl 15 HRESULT GetCRL(LPWSTR strConfig, INT Flags, LPWSTR* pstrCRL)

Certificate Services の証明機関(CA)の現在の証明書失効リスト(CRL)を取得します。

strConfigLPWSTRin

CRL を取得する対象の CA の有効な構成文字列を表します。この文字列は COMPUTERNAME\CANAME の形式で、COMPUTERNAME は Certificate Services サーバーのネットワーク名、CANAME は Certificate Services のセットアップ時に入力した CA の共通名です。構成文字列名については、ICertConfig を参照してください。

重要 GetCRL は、構成文字列が変更されても内部キャッシュをクリアしません。CA の構成文字列を変更する場合は、新しい ICertAdmin オブジェクトをインスタンス化し、新しい構成文字列でこのメソッドを再度呼び出す必要があります。
FlagsINTin

返される CRL の形式を指定します。このパラメーターには、次のいずれかのフラグを指定できます。

意味
CR_OUT_BASE64HEADER
begin/end 付きの BASE64 形式。
CR_OUT_BASE64
begin/end なしの BASE64 形式。
CR_OUT_BINARY
バイナリ形式。
pstrCRLLPWSTR*out

CRL を受け取る BSTR へのポインターです。

このメソッドを使用するときは、BSTR 型の変数を作成し、その変数を NULL に設定して、その変数のアドレスを pbstrCRL パラメーターに渡します。BSTR 変数の使用が終わったら、SysFreeString 関数を呼び出して解放します。

戻り値

関数が成功すると、関数は S_OK を返します。

関数が失敗した場合は、エラーを示す HRESULT 値を返します。取り得る値には、次の表に示すものが含まれますが、これらに限定されません。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。

リターンコード 説明
E_POINTER
strConfig パラメーターを NULL にすることはできません。または、CRL が見つかりませんでした。

解説(Remarks)

管理タスクは DCOM を使用します。以前のバージョンの Certadm.h で定義されているこのインターフェイスのメソッドを呼び出すコードは、クライアントとサーバーが両方とも同じ Windows オペレーティングシステムを実行している限り、Windows ベースのサーバーで動作します。

次の例では、必要な変数を宣言し、COM を初期化して、CertAdmin クラスのインスタンスを作成します。次に GetCRL を呼び出し、成功または失敗を画面に出力します。最後にリソースを解放します。

    ICertAdmin * pCertAdmin = NULL;  // pointer to interface object
    BSTR bstrCA = NULL;              // variable for machine\CAName
    BSTR bstrCRL = NULL;             // variable to contain
                                     // the retrieved CRL

    HRESULT hr;

    //  Initialize COM.
    hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
    if (FAILED(hr))
    {
        printf("Failed CoInitializeEx [%x]\n", hr);
        goto error;
    }

    //  Create the CertAdmin object
    //  and get a pointer to its ICertAdmin interface.
    hr = CoCreateInstance( CLSID_CCertAdmin,
                           NULL,
                           CLSCTX_INPROC_SERVER,
                           IID_ICertAdmin,
                           (void **)&pCertAdmin);
    if (FAILED(hr))
    {
        printf("Failed CoCreateInstance pCertAdmin [%x]\n", hr);
        goto error;
    }

    //  Note the use of two backslashes (\\) 
   //  in C++ to produce one backslash (\).
    bstrCA = SysAllocString(L"<COMPUTERNAMEHERE>\\<CANAMEHERE>");
    if (FAILED(hr))
    {
        printf("Failed to allocate memory for bstrCA\n");
        goto error;
    }

    //  Retrieve the CRL.
    hr = pCertAdmin->GetCRL( bstrCA, CR_OUT_BINARY, &bstrCRL );
    if (FAILED(hr))
    {
        printf("Failed GetCRL [%x]\n", hr);
        goto error;
    }
    else
        printf("CRL retrieved successfully\n");
        //  Use the CRL as needed.

    //  Done processing.

error:

    //  Free BSTR values.
    if (NULL != bstrCA)
        SysFreeString(bstrCA);

    if (NULL != bstrCRL)
        SysFreeString(bstrCRL);

    //  Clean up object resources.
    if (NULL != pCertAdmin)
        pCertAdmin->Release();

    //  Free COM resources.
    CoUninitialize();
vtbl 16 HRESULT ImportCertificate(LPWSTR strConfig, LPWSTR strCertificate, CERT_IMPORT_FLAGS Flags, INT* pRequestId)

以前に発行された証明書を取得し、証明機関(CA)のデータベースにインポートします。このメソッドは ICertAdmin インターフェイスで最初に定義されました。

strConfigLPWSTRin

証明機関の有効な構成文字列を COMPUTERNAME\CANAME の形式で表します。COMPUTERNAME は Certificate Services サーバーのネットワーク名、CANAME は Certificate Services のセットアップ時に入力した証明機関の共通名です。構成文字列名については、 ICertConfig を参照してください。

重要 ImportCertificate は、構成文字列が変更されても内部キャッシュをクリアしません。CA の構成文字列を変更する場合は、新しい ICertAdmin オブジェクトをインスタンス化し、新しい構成文字列でこのメソッドを再度呼び出す必要があります。
strCertificateLPWSTRinインポートする証明書のバイナリ表現です。
FlagsCERT_IMPORT_FLAGSin

証明書の形式を指定します。このパラメーターには、次のいずれかの値を指定できます。

意味
CR_IN_BASE64HEADER
begin/end 付きの BASE64 形式。
CR_IN_BASE64
begin/end なしの BASE64 形式。
CR_IN_BINARY
バイナリ形式。
pRequestIdINT*outインポートされた証明書に対してデータベースが割り当てた要求 ID を受け取る LONG 値へのポインターです。

戻り値

C++

メソッドが成功し、pRequestID パラメーターにインポートされた証明書のデータベースが割り当てた要求 ID の値が設定された場合、メソッドは S_OK を返します。

メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。

VB

戻り値は、インポートされた証明書に対してデータベースが割り当てた要求 ID です。

解説(Remarks)

ImportCertificate メソッドは、バックアップから部分的に復元された証明機関の場合に役立ちます。証明機関の復元に使用したバックアップテープに証明書が含まれていないが、ファイルとして存在する場合、このメソッドを使用してその証明書をインポートできます。

このメソッドを成功させるには、インポートする証明書が、strConfig で指定した証明機関によって以前に発行されたものである必要があります。復元された証明機関は証明書の署名を検証し、署名が無効な場合、メソッドの呼び出しは失敗します。

さらに、証明書がデータベースに既に存在する場合はインポートできません。データベース内の各証明書は一意である必要があります。データベースは、証明書のシリアル番号を確認することで一意性を保証します。

// This code imports a binary certificate file.
BSTR   bstrCert = NULL;  // Variable for certificate.
HANDLE hFile;  
DWORD  cchFile, cbRead;
LONG   nID;  // Variable for request ID.

// Open the file that contains the certificate.
hFile = CreateFile((LPCSTR) "d:\\cert1.cer",
                  GENERIC_READ,
                  FILE_SHARE_READ,
                  NULL,
                  OPEN_EXISTING,
                  0,
                  NULL);
if (INVALID_HANDLE_VALUE == hFile)
{
    printf("Unable to open file\n");
    // Take error action as needed.
}
// Determine the file size.
cchFile = GetFileSize(hFile, NULL);
if ( (DWORD)-1 == cchFile )
{
    printf("Failed GetFileSize\n");
    CloseHandle(hFile);
    // Take error action as needed.
}
// Allocate the memory for the certificate.
bstrCert = SysAllocStringByteLen(NULL, cchFile);
if (NULL == bstrCert)
{
    printf("Failed SysAllocStringByteLen\n");
    CloseHandle(hFile);
    // Take error action as needed.
}
// Read in the certificate.
if (!ReadFile(hFile,
             (char *)bstrCert,
             cchFile,
             &cbRead,
             NULL) || (cbRead != cchFile))
{
    printf("Failed to successfully read file\n");
    CloseHandle(hFile);
    SysFreeString(bstrCert);
    // Take error action as needed.
}
// Close the file.
CloseHandle(hFile);

// Import the certificate.
bstrCA = SysAllocString(L"<COMPUTERNAMEHERE>\\<CANAMEHERE>");
if (FAILED(hr))
{
    printf("Failed to allocate memory for bstrCA\n");
    SysFreeString(bstrCert);
    // Take error action as needed.
}

hr = pCertAdmin->ImportCertificate(bstrCA,
                                   bstrCert,
                                   CR_IN_BINARY,
                                   &nID);
if (FAILED(hr))
    printf("Failed ImportCertificate [%x]\n", hr);
else
    printf("Imported certificated has Request ID: %d\n", nID);

SysFreeString(bstrCert);
SysFreeString(bstrCA);
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_ICertAdmin "{34DF6950-7FB6-11D0-8817-00A0C903B83C}"
#usecom global ICertAdmin IID_ICertAdmin "{}"
#comfunc global ICertAdmin_IsValidCertificate       7 wstr,wstr,var
#comfunc global ICertAdmin_GetRevocationReason      8 var
#comfunc global ICertAdmin_RevokeCertificate        9 wstr,wstr,int,double
#comfunc global ICertAdmin_SetRequestAttributes     10 wstr,int,wstr
#comfunc global ICertAdmin_SetCertificateExtension  11 wstr,int,wstr,int,int,var
#comfunc global ICertAdmin_DenyRequest              12 wstr,int
#comfunc global ICertAdmin_ResubmitRequest          13 wstr,int,var
#comfunc global ICertAdmin_PublishCRL               14 wstr,double
#comfunc global ICertAdmin_GetCRL                   15 wstr,int,var
#comfunc global ICertAdmin_ImportCertificate        16 wstr,wstr,int,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。