ICEnroll2
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
ICEnroll2 インターフェイスは、Certificate Enrollment Control を表す複数のインターフェイスの 1 つです。
メソッド 6
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
証明書テンプレートを要求に追加します(エンタープライズ証明機関(CA)をサポートするために使用します)。このメソッドは ICEnroll2 インターフェイスで最初に定義されました。
| CertType | LPWSTR | in | 証明書要求に追加される証明書テンプレートの完全修飾名。この値は証明機関によって解釈されます。 |
戻り値
VB
戻り値は HRESULT で、呼び出しが成功すると S_OK が返されます。解説(Remarks)
要求に対して複数の証明書テンプレートが必要な場合は、このメソッドを複数回呼び出すことができます。
属性の認証された名前と値のペアを要求に追加します。名前と値のペアの意味をどう解釈するかは証明機関(CA)に委ねられます。
| Name | LPWSTR | in | 属性の名前。たとえば国/地域名を表す "2.5.4.6" など。 |
| Value | LPWSTR | in | 属性の値。たとえば "US" など。 |
戻り値
VB
戻り値は HRESULT で、呼び出しが成功すると S_OK が返されます。解説(Remarks)
addNameValuePairToSignature メソッドは、要求に属性を追加するために使用します。
例
BSTR bstrName = NULL;
BSTR bstrValue = NULL;
HRESULT hr;
// Allocate the name. Alternatively, (L"2.5.4.6").
bstrName = SysAllocString(TEXT(szOID_COUNTRY_NAME));
// Allocate the value.
bstrValue = SysAllocString(L"US");
if (NULL == bstrName || NULL == bstrValue)
{
// handle error
}
// add the name-value pair to the signature
// pEnroll is previously instantiated ICEnroll4 interface pointer
hr = pEnroll->addNameValuePairToSignature( bstrName, bstrValue );
if ( FAILED( hr ) )
printf("Failed addNameValuePairToSignature - %x\n", hr );
else
printf("addNameValuePairToSignature(%ws, %ws) succeeded\n",
bstrName,
bstrValue );
// free BSTRs
if (bstrName )
SysFreeString( bstrName );
if (bstrValue )
SysFreeString( bstrValue );
証明書をユーザーの Active Directory ストアに書き込むかどうかを決定するブール値を設定または取得します。(Get)
| fBool | BOOL* | out | 証明書をユーザーのディレクトリサービス(DS)エントリに書き込むかどうかを受け取る BOOL へのポインタである。 |
解説(Remarks)
WriteCertToUserDS は、次のメソッドの動作に影響します。
Certificate Enrollment Control がスクリプト化されたコントロールとして実行される場合、このプロパティを設定する機能は無効になります。
例
BOOL bWriteUserDS;
HRESULT hr;
// pEnroll is previously instantiated ICEnroll2 interface pointer
// get the WriteCertToUserDS value
hr = pEnroll->get_WriteCertToUserDS( &bWriteUserDS );
if (FAILED( hr ))
printf("Failed get_WriteCertToUserDS - %x\n", hr );
else
printf( "WriteCertToUserDS: %d\n", bWriteUserDS );
// set the WriteCertToUserDS value
hr = pEnroll->put_WriteCertToUserDS( TRUE );
if (FAILED( hr ))
printf("Failed put_WriteCertToUserDS - %x\n", hr );
else
printf( "WriteCertToUserDS set to TRUE\n" );
証明書をユーザーの Active Directory ストアに書き込むかどうかを決定するブール値を設定または取得します。(Put)
| fBool | BOOL | in | 証明書をユーザーのディレクトリサービス(DS)エントリに書き込むかどうかを指定する BOOL 値を渡す。 |
解説(Remarks)
WriteCertToUserDS は、次のメソッドの動作に影響します。
Certificate Enrollment Control がスクリプト化されたコントロールとして実行される場合、このプロパティを設定する機能は無効になります。
例
BOOL bWriteUserDS;
HRESULT hr;
// pEnroll is previously instantiated ICEnroll2 interface pointer
// get the WriteCertToUserDS value
hr = pEnroll->get_WriteCertToUserDS( &bWriteUserDS );
if (FAILED( hr ))
printf("Failed get_WriteCertToUserDS - %x\n", hr );
else
printf( "WriteCertToUserDS: %d\n", bWriteUserDS );
// set the WriteCertToUserDS value
hr = pEnroll->put_WriteCertToUserDS( TRUE );
if (FAILED( hr ))
printf("Failed put_WriteCertToUserDS - %x\n", hr );
else
printf( "WriteCertToUserDS set to TRUE\n" );
ICEnroll4 の EnableT61DNEncoding プロパティは、要求内の識別名を Unicode 文字列ではなく T61 文字列としてエンコードするかどうかを決定するブール値を設定または取得します。(Get)
| fBool | BOOL* | out | 識別名に T61 エンコードを使用するかどうかを受け取る BOOL へのポインタである。 |
解説(Remarks)
EnableT61DNEncoding プロパティは、次のメソッドの動作に影響します。
例
BOOL bT61DN;
HRESULT hr;
// pEnroll is a previously instantiated ICEnroll2 interface pointer.
// Get the EnableT61DNEncoding Boolean value.
hr = pEnroll->get_EnableT61DNEncoding( &bT61DN );
if ( FAILED ( hr ) )
printf("Failed get_EnableT61DNEncoding - %x\n", hr );
else
printf( "T61DNEncoding: %s\n",
( bT61DN ? "Enabled" : "Disabled" ) );
// Set the EnableT61DNEncoding value.
hr = pEnroll->put_EnableT61DNEncoding( TRUE );
if ( FAILED ( hr ) )
printf("Failed Setting EnableT61DNEncoding - %x\n", hr );
else
printf( "EnableT61DNEncoding was set to TRUE\n" );
ICEnroll4 の EnableT61DNEncoding プロパティは、要求内の識別名を Unicode 文字列ではなく T61 文字列としてエンコードするかどうかを決定するブール値を設定または取得します。(Put)
| fBool | BOOL | in | 識別名に T61 エンコードを使用するかどうかを指定する BOOL 値を渡す。 |
解説(Remarks)
EnableT61DNEncoding プロパティは、次のメソッドの動作に影響します。
例
BOOL bT61DN;
HRESULT hr;
// pEnroll is a previously instantiated ICEnroll2 interface pointer.
// Get the EnableT61DNEncoding Boolean value.
hr = pEnroll->get_EnableT61DNEncoding( &bT61DN );
if ( FAILED ( hr ) )
printf("Failed get_EnableT61DNEncoding - %x\n", hr );
else
printf( "T61DNEncoding: %s\n",
( bT61DN ? "Enabled" : "Disabled" ) );
// Set the EnableT61DNEncoding value.
hr = pEnroll->put_EnableT61DNEncoding( TRUE );
if ( FAILED ( hr ) )
printf("Failed Setting EnableT61DNEncoding - %x\n", hr );
else
printf( "EnableT61DNEncoding was set to TRUE\n" );
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ICEnroll2 "{704CA730-C90B-11D1-9BEC-00C04FC295E1}" #usecom global ICEnroll2 IID_ICEnroll2 "{127698E4-E730-4E5C-A2B1-21490A70C8A1}" #comfunc global ICEnroll2_addCertTypeToRequest 63 wstr #comfunc global ICEnroll2_addNameValuePairToSignature 64 wstr,wstr #comfunc global ICEnroll2_get_WriteCertToUserDS 65 var #comfunc global ICEnroll2_put_WriteCertToUserDS 66 int #comfunc global ICEnroll2_get_EnableT61DNEncoding 67 var #comfunc global ICEnroll2_put_EnableT61DNEncoding 68 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_ICEnroll2 "{704CA730-C90B-11D1-9BEC-00C04FC295E1}" #usecom global ICEnroll2 IID_ICEnroll2 "{127698E4-E730-4E5C-A2B1-21490A70C8A1}" #comfunc global ICEnroll2_addCertTypeToRequest 63 wstr #comfunc global ICEnroll2_addNameValuePairToSignature 64 wstr,wstr #comfunc global ICEnroll2_get_WriteCertToUserDS 65 sptr #comfunc global ICEnroll2_put_WriteCertToUserDS 66 int #comfunc global ICEnroll2_get_EnableT61DNEncoding 67 sptr #comfunc global ICEnroll2_put_EnableT61DNEncoding 68 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。