IVdsAdmin
COM公式ドキュメント
VDS にプロバイダーを登録します。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
指定されたハードウェアプロバイダーを VDS に登録します。ハードウェアプロバイダーがこのメソッドを呼び出します。
| providerId | GUID | in | ハードウェアプロバイダーの GUID。 |
| providerClsid | GUID | in | ハードウェアプロバイダーの COM クラス識別子 (Clsid)。 |
| pwszName | LPWSTR | in | ハードウェアプロバイダーの名前。ゼロ終端の人間が読める文字列。 |
| type | VDS_PROVIDER_TYPE | in | VDS_PROVIDER_TYPE によって列挙されるプロバイダーの種類。 ハードウェアプロバイダーを VDS に登録するには VDS_PT_HARDWARE 値を使用します。 |
| pwszMachineName | LPWSTR | inoptional | ハードウェアプロバイダーが実行されるコンピューターの名前。null 終端の人間が読める文字列。 現在のコンピューターを参照するには NULL を使用します。 |
| pwszVersion | LPWSTR | in | プロバイダーのバージョン。ゼロ終端の人間が読める文字列。 |
| guidVersionId | GUID | in | このバージョンのプロバイダーの GUID。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値を返すことができます。また、HRESULT_FROM_WIN32 マクロを使用して変換されたシステムエラーコードを返すこともできます。エラーは VDS 自体、または使用されている基盤の VDS プロバイダーから発生する可能性があります。返される可能性のある値には次のものがあります。
| 戻り値/値 | 説明 |
|---|---|
|
providerId は既に登録されています。プロバイダーは、任意の時点で 1 つのバージョンのみを登録できます。 |
解説(Remarks)
必要に応じて、新しいバージョンを登録する前に UnregisterProvider を呼び出してプロバイダーを削除してください。
インプロセスプロバイダーは DllRegisterServer からこのメソッドを呼び出します。一方、アウトオブプロセスプロバイダーは WinMain 関数から呼び出します。
ハードウェアプロバイダーは、VDS の実行中に停止してはなりません。
VDS プロバイダーの登録データを削除します。ハードウェアプロバイダーがこのメソッドを呼び出します。
| providerId | GUID | in | プロバイダーの GUID。 |
戻り値
このメソッドは、E_INVALIDARG や E_OUTOFMEMORY などの標準的な HRESULT 値、および VDS 固有の戻り値を返すことができます。また、HRESULT_FROM_WIN32 マクロを使用して変換されたシステムエラーコードを返すこともできます。エラーは VDS 自体、または使用されている基盤の VDS プロバイダーから発生する可能性があります。
解説(Remarks)
インプロセスプロバイダーは DllRegisterServer 関数からこのメソッドを呼び出します。一方、アウトオブプロセスプロバイダーは WinMain 関数から呼び出します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IVdsAdmin "{D188E97D-85AA-4D33-ABC6-26299A10FFC1}"
#usecom global IVdsAdmin IID_IVdsAdmin "{}"
#comfunc global IVdsAdmin_RegisterProvider 3 int,int,wstr,int,wstr,wstr,int
#comfunc global IVdsAdmin_UnregisterProvider 4 int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。