ICertManageModule
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
Certificate Services のポリシーモジュールまたは Exit モジュールに関する情報を取得するために提供されます。
解説(Remarks)
ICertManageModule インターフェイスは、構成設定の設定および表示を行うためのモジュールのユーザーインターフェイスを呼び出すメソッドを提供します。ポリシーモジュールおよび Exit モジュールの作成者は、(それぞれ ICertPolicy インターフェイスおよび ICertExit インターフェイスに加えて)ICertManageModule インターフェイスを実装する必要があります。エンタープライズの証明機関(CA)では、常に Microsoft が提供するエンタープライズ用のポリシーモジュールと Exit モジュールを使用する必要があります。エンタープライズ CA では追加の Exit モジュールを使用できます。
次に示すのは、ICertManageModule を実装するクラス(CMyCertManagePolicyModule)の DECLARE_REGISTRY マクロで使用できる例です。
DECLARE_REGISTRY(
CMyCertManagePolicyModule,
L"MyCode.PolicyManage.1",
L"MyCode.PolicyManage",
IDS_CERTMANAGEPOLICYMODULE_DESC,
THREADFLAGS_BOTH);
IDS_CERTMANAGEPOLICYMODULE_DESC の値は、クラスを説明するリソースファイル(.rc)内の文字列テーブルの文字列を識別する、アプリケーション固有の識別子です。
ICertManageModule は Certmod.h で定義されています。ただし、プログラムを作成する際は、インクルードファイルとして Certsrv.h を使用してください。
Certificate Services のインターフェイスは、アパートメントスレッドモデルとフリースレッドモデルの両方をサポートします。スループットを向上させるには、フリースレッドを推奨します。
Visual Basic Scripting Edition では、ICertManageModule を実装するクラスの名前は、作成するモジュールの種類に応じて "PolicyManage" または "PolicyExit" のいずれかである必要があります。命名規則に従いやすくするために、Certmod.h で定義された次の文字列定数を使用できます。
| 定数 | 値 |
|---|---|
| wszCERTMANAGEEXIT_POSTFIX | TEXT(".ExitManage") |
| wszCERTMANAGEPOLICY_POSTFIX | TEXT(".PolicyManage") |
メソッド 3
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
モジュールのプロパティ値を取得します。
| strConfig | LPWSTR | in | COMPUTERNAME\CANAME の形式で Certificate Services サーバーの構成文字列を表します。COMPUTERNAME は Certificate Services サーバーのネットワーク名であり、CANAME は Certificate Services のセットアップ時に CA に対して入力された証明機関(CA)の共通名です。構成文字列名の詳細については、 ICertConfig を参照してください。 | ||||||||||||
| strStorageLocation | LPWSTR | in | プロパティ値の格納場所を HKEY_LOCAL_MACHINE ハイブ内で示すレジストリキーです。この値は次の形式です: SYSTEM CurrentControlSet Services CertSvc Configuration CAName PolicyOrExitModules MyModule.PolicyOrExit CAName は証明機関の構成文字列の名前であり、PolicyOrExitModules は(この ICertManageModule の実装にポリシーモジュールと Exit モジュールのどちらが適用されるかに応じて)"Policy" または "Exit" のいずれかになります。MyModule.PolicyOrExit はモジュールのアプリケーション固有の識別子です。CAName は証明機関のサニタイズされた名前であることに注意してください。サニタイズされた名前の詳細については、 ICertConfig::GetConfig を参照してください。この格納場所は将来の使用のために用意されています。 | ||||||||||||
| strPropertyName | LPWSTR | in | 照会するプロパティの名前です。ポリシーモジュールと Exit モジュールは次のプロパティをサポートする必要があります。
| ||||||||||||
| Flags | INT | in | このパラメーターは予約されており、ゼロに設定する必要があります。 | ||||||||||||
| pvarProperty | VARIANT* | out | strPropertyName で指定されたプロパティの取得値である VARIANT へのポインターです。 |
戻り値
C++
メソッドが成功した場合、メソッドは S_OK を返します。メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
VB
戻り値は、strPropertyName という名前のプロパティの値を表す Variant です。解説(Remarks)
ICertManageModule を実装すると、Certificate Services マネージャーは GetProperty を呼び出してモジュールのプロパティを取得できます。取得したプロパティは、ポリシーモジュールおよび Exit モジュール用の Certificate Services マネージャーのプロパティページに表示できます。Certificate Services マネージャーは strStorageLocation で参照される場所をこのモジュールに渡し、将来のバージョンでは、このメソッドの実装が必要に応じてこの場所を使用できます。次の例では strStorageLocation を使用せず、代わりにプロパティ値をメモリ内で保持します。
例
#include <windows.h>
#include <Certmod.h>
HRESULT CCertManagePolicyModule::GetProperty(
/* [in] */ const BSTR strConfig,
/* [in] */ BSTR strStorageLocation,
/* [in] */ BSTR strPropertyName,
/* [in] */ LONG Flags,
/* [retval][out] */ VARIANT *pvarProperty)
{
// Array of property Names.
// These values are defined in Certmod.h.
wchar_t const * awszPropName[] =
{
wszCMM_PROP_NAME,
wszCMM_PROP_DESCRIPTION,
wszCMM_PROP_COPYRIGHT,
wszCMM_PROP_FILEVER,
wszCMM_PROP_PRODUCTVER
};
// Array of property Values.
// These values are module-specific, and
// correspond to the property names in
// awszPropName (same index).
wchar_t const * awszPropValue[] =
{
L"MyModule", // NAME
L"Description of MyModule", // DESCRIPTION
L"Copyright 1998", // COPYRIGHT
L"1.0", // FILE VERSION
L"1.0" // PRODUCT VERSION
};
int i;
bool bFound = FALSE;
HRESULT hr;
// Return appropriate error if strPropertyName is NULL.
if (NULL == strPropertyName)
return E_INVALIDARG;
// Return appropriate error if pvarProperty is NULL.
if (NULL == pvarProperty)
return E_POINTER;
// Determine whether the requested property is in the Name array.
for (i=0; i<sizeof(awszPropName)/sizeof(wchar_t *); i++)
if (!wcscmp( strPropertyName, awszPropName[i]))
{
bFound = TRUE; // Found the index for the property.
break;
}
if ( !bFound )
return S_FALSE; // Requested property not found.
// Allocate storage for the property value.
pvarProperty->bstrVal = SysAllocString(awszPropValue[i]);
if (NULL == pvarProperty->bstrVal)
return E_OUTOFMEMORY;
pvarProperty->vt = VT_BSTR;
return S_OK;
}
モジュールがプロパティ値を設定できるようにします。
| strConfig | LPWSTR | in | COMPUTERNAME\CANAME の形式で Certificate Services サーバーの構成文字列を表します。COMPUTERNAME は Certificate Services サーバーのネットワーク名であり、CANAME は Certificate Services のセットアップ時に CA に対して入力された証明機関(CA)の共通名です。構成文字列名の詳細については、 ICertConfig を参照してください。 | ||||||||||||
| strStorageLocation | LPWSTR | in | プロパティ値を格納する場所を提供する場所であり、 ICertManageModule::GetProperty の strStorageLocation の定義で説明されているとおりです。 | ||||||||||||
| strPropertyName | LPWSTR | in | 値が割り当てられるプロパティの名前です。ポリシーモジュールと Exit モジュールは、Certificate Services マネージャーで使用される次のプロパティをサポートする必要があります。
| ||||||||||||
| Flags | INT | in | このパラメーターは予約されており、ゼロに設定する必要があります。 | ||||||||||||
| pvarProperty | VARIANT* | in | strPropertyName で指定されたプロパティに割り当てられる値です。 |
戻り値
VB
メソッドが成功した場合、メソッドは S_OK を返します。メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
解説(Remarks)
このメソッドは将来の機能のために用意されています。ただし、ICertManageModule インターフェイスの要件を満たすために、最小限の実装が必要です。
例
#include <windows.h>
#include <Certmod.h>
HRESULT CCertManagePolicyModule::SetProperty(
/* [in] */ const BSTR strConfig,
/* [in] */ BSTR strStorageLocation,
/* [in] */ BSTR strPropertyName,
/* [in] */ LONG Flags,
/* [in] */ const VARIANT *pvarProperty)
{
// This implementation fulfills the minimal requirement
// needed for ICertManageModule::SetProperty.
return S_OK;
}
モジュールのユーザーインターフェイスを表示します。
| strConfig | LPWSTR | in | COMPUTERNAME\CANAME の形式で Certificate Services サーバーの構成文字列を表します。COMPUTERNAME は Certificate Services サーバーのネットワーク名であり、CANAME は Certificate Services のセットアップ時に CA に対して入力された証明機関(CA)の共通名です。構成文字列名の詳細については、 ICertConfig を参照してください。 |
| strStorageLocation | LPWSTR | in | プロパティ値を格納する場所を提供する場所であり、 ICertManageModule::GetProperty の strStorageLocation の定義で説明されているとおりです。 |
| Flags | INT | in | 構成インターフェイスをユーザーに表示するかどうかを決定するために使用される値です。この値がゼロの場合、モジュールを構成するためのインターフェイスがユーザーに表示されます。この値が CMM_REFRESHONLY の場合、Certificate Services はユーザーインターフェイスを表示しませんが、モジュールの構成に対する最新の変更は、以降の証明書要求が処理されるときに有効になります(これにより、ユーザーインターフェイスへの応答を必要とせずに変更を反映できます)。 |
戻り値
VB
メソッドが成功した場合、メソッドは S_OK を返します。メソッドが失敗した場合は、エラーを示す HRESULT 値を返します。一般的なエラーコードの一覧については、Common HRESULT Values を参照してください。
解説(Remarks)
Configure メソッドは、モジュールのユーザーインターフェイス(存在する場合)を表示し、ユーザーがモジュールの構成可能な項目を表示および変更できるようにします。 ICertManageModule を実装するモジュールは、Certificate Services マネージャーのポリシーモジュールまたは Exit モジュールのプロパティページがアクティブで、ユーザーが Configure ボタンを選択したときに、その Configure メソッドを呼び出すことができます。Certificate Services マネージャーは strStorageLocation で参照される場所をこのモジュールに渡し、このメソッドの実装は必要に応じてこの場所を使用できます。モジュールに構成可能な項目がない場合(したがって、ユーザーインターフェイスが不要な場合)もありますが、その場合でもこのメソッドを実装する必要があることに注意してください。以下の例では、ユーザーが構成を変更することはできませんが、このメソッドを実装しています。
例
#include <windows.h>
#include <Certmod.h>
HRESULT CCertManagePolicyModule::Configure(
/* [in] */ const BSTR strConfig,
/* [in] */ BSTR strStorageLocation,
/* [in] */ LONG Flags)
{
if ( CMM_REFRESHONLY != Flags )
MessageBox(NULL,
L"This module has no configurable items",
L"MyModule",
(MB_OK|MB_ICONINFORMATION));
return S_OK;
}
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ICertManageModule "{E7D7AD42-BD3D-11D1-9A4D-00C04FC297EB}" #usecom global ICertManageModule IID_ICertManageModule "{}" #comfunc global ICertManageModule_GetProperty 7 wstr,wstr,wstr,int,var #comfunc global ICertManageModule_SetProperty 8 wstr,wstr,wstr,int,var #comfunc global ICertManageModule_Configure 9 wstr,wstr,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_ICertManageModule "{E7D7AD42-BD3D-11D1-9A4D-00C04FC297EB}" #usecom global ICertManageModule IID_ICertManageModule "{}" #comfunc global ICertManageModule_GetProperty 7 wstr,wstr,wstr,int,sptr #comfunc global ICertManageModule_SetProperty 8 wstr,wstr,wstr,int,sptr #comfunc global ICertManageModule_Configure 9 wstr,wstr,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。