ICertPolicy2
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
Certificate Services サーバーエンジンとポリシーモジュールの間の通信を提供します。
解説(Remarks)
ICertPolicy の実装者は、 ICertManageModule も実装する必要があります。さらに、ICertPolicy を実装するクラスの ProgID は命名規則に従わなければなりません。具体的には、ProgID は次の形式でなければなりません:
"MyApp.Policy"
ここで MyApp はアプリケーションを識別する指定子です。たとえば C++ では、ICertPolicy を実装するクラス (CMyCertPolicyModule) の DECLARE_REGISTRY マクロで次のように使用できます。
DECLARE_REGISTRY(
CMyCertPolicyModule,
L"MyCode.Policy.1",
L"MyCode.Policy",
IDS_CERTPOLICYMODULE_DESC,
THREADFLAGS_BOTH);
前述の例では、IDS_CERTPOLICYMODULE_DESC 値は、クラスを説明する文字列に対応する、リソースファイル (.rc) 内のアプリケーション固有の識別子です。
Certmod.h で定義されている文字列定数を使用すると、命名規則への準拠を簡略化できます。
| 定数 | 値 |
|---|---|
| wszCERTPOLICYMODULE_POSTFIX | TEXT(".Policy") |
Certificate Services サーバーには、一度に 2 つ以上の Visual Basic Scripting Edition ポリシーモジュールを登録することはできません。複数のポリシーモジュールが Certificate Services サーバーに登録されていると、証明機関 (CA) MMC スナップイン、Certificate Services アプリケーション、または Certutil ツールでエラーが発生することがあります。Visual Basic Scripting Edition 開発環境では、ビルドが成功すると DLL が自動的に登録される点に注意してください。そのため、ある Visual Basic Scripting Edition ポリシーモジュールが既に登録されている状態で、別の Visual Basic Scripting Edition ポリシーモジュールを作成すると、この状況が発生することがあります。この状況を回避するには、コマンドラインの命令 regsvr32 /u FileName.dll を使用して、いずれかの Visual Basic Scripting Edition ポリシーモジュールの登録を解除する必要があります。ここで FileName.dll は、アクティブにしたくない Visual Basic Scripting Edition ポリシーモジュールの名前です。
Visual Basic Scripting Edition で ICertPolicy を実装する場合は、プロジェクトを次の形式で命名する必要があります:
"MyApp"
ここで MyApp はアプリケーションを識別する指定子です。さらに、ICertPolicy を実装するクラスは "Policy" という名前でなければなりません。
メソッド 1
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
GetManageModule を呼び出し、ICertManageModule へのポインターのアドレスを渡すことによって、ICertPolicy2 インターフェイスに関連付けられた ICertManageModule インターフェイスを取得します。
| ppManageModule | ICertManageModule** | out | ICertPolicy2 インターフェイスに関連付けられた ICertManageModule インターフェイスへのポインター。 |
戻り値
C++
戻り値は HRESULT です。S_OK の値はメソッドが成功したことを示します。VB
戻り値は、ICertPolicy2 インターフェイスに関連付けられた ICertManageModule インターフェイスを格納する Variant です。Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ICertPolicy2 "{3DB4910E-8001-4BF1-AA1B-F43A808317A0}"
#usecom global ICertPolicy2 IID_ICertPolicy2 "{}"
#comfunc global ICertPolicy2_GetManageModule 11 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。
; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。