ItsPubPlugin
COM公式ドキュメント
RemoteApp とデスクトップ接続のユーザーが利用できるリソースに関する情報を提供するプロパティとメソッドを公開します。
解説(Remarks)
RemoteApp とデスクトップ接続管理サービスからプラグインが呼び出されるように登録するには
- プラグインを DLL として実装し、Regsvr32.exe ツールを使用して DLL を登録します。
- 次のキーの下に、DLL の CLSID を名前とするサブキーを作成します。
HKEY_LOCAL_MACHINE Software Microsoft Windows NT CurrentVersion Terminal Server CentralizedPublishing Plugins - サブキーに、"IsEnabled" という名前で DWORD 型の値を作成します。サービスがプラグインを呼び出せるようにするには、値を 1 に設定します。プラグインの呼び出しを禁止するには、値を 0 に設定します。サービスはプラグインを自動的に読み込むため、サービスを再起動する必要はありません。
メソッド 6
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
指定したユーザーに割り当てられているリソースの一覧を取得します。(ItsPubPlugin.GetResourceList)
| userID | LPWSTR | in | ユーザーのセキュリティ識別子 (SID)。 |
| pceAppListSize | INT* | out | resourceList の要素数を受け取る LONG 変数へのポインター。 |
| resourceList | pluginResource** | out | 指定したユーザーに割り当てられているリソースを受け取る pluginResource 構造体の配列へのポインターのアドレス。このメモリの割り当てには CoTaskMemAlloc 関数を使用する必要があります。このメモリの解放は呼び出し元の責任です。 |
戻り値
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
このメソッドは予約されており、常に E_NOTIMPL を返す必要があります。(ItsPubPlugin.GetResource)
| alias | LPWSTR | in | このパラメーターは予約されています。 |
| flags | INT | in | このパラメーターは予約されています。 |
| resource | pluginResource* | out | このパラメーターは予約されています。 |
戻り値
このメソッドは常に E_NOTIMPL を返す必要があります。
キャッシュが最後に更新された時刻を返します。
| lastUpdateTime | ULONGLONG* | out | キャッシュが最後に更新された時刻を受け取る unsigned long long 変数へのポインター。 |
戻り値
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
RemoteApp とデスクトップ接続管理サービスは、キャッシュが最後に更新された時刻を取得するためにこのメソッドを呼び出します。プラグインがキャッシュを実装していない場合は、現在のシステム時刻を返してください。これにより、サービスは現在のリソース一覧を取得するために GetResourceList を呼び出す必要があることを認識します。キャッシュを使用するとサービスが GetResourceList を呼び出す回数が減るため、キャッシュを実装したプラグインとして実装することをお勧めします。
プラグインの名前を取得します。
| pVal | LPWSTR* | out | プラグインの名前を受け取る LPWSTR へのポインタである。 |
プラグインのバージョンを取得します。
| pVal | LPWSTR* | out | プラグインのバージョン文字列を受け取る LPWSTR へのポインタである。 |
ユーザーに割り当てられた個人用仮想デスクトップへの接続方法に関する情報を提供します。
| resourceType | DWORD* | out | リソースの種類を受け取る DWORD 変数へのポインター。次のいずれかの値を指定できます。 1プラグインは仮想デスクトッププール用です。 2プラグインは個人用仮想デスクトップ用です。 |
| resourceLocation | LPWSTR | out | リソースプラグインの名前。 |
| endPointName | LPWSTR | out | エンドポイントの名前。個人用仮想デスクトップの場合は、ユーザーに割り当てられているデスクトップの名前を指定します。仮想デスクトッププールの場合は、プールの名前を指定します。 |
| userID | LPWSTR | in | ユーザーのセキュリティ識別子 (SID) を含む文字列へのポインター。 |
| alias | LPWSTR | in | ユーザーのエイリアスを含む文字列へのポインター。 |
戻り値
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
RD 接続ブローカーは、ユーザーをリソースに接続する際に 1 つのプラグインのみを呼び出します。呼び出しを受け取るには、RD 接続ブローカーを起動する前にプラグインを登録するか、クライアントが接続に使用する .rdp ファイルに "LoadBalanceInfo" 設定を追加する必要があります。たとえば、プラグインが個人用仮想デスクトップ用で "plugin1" という名前の場合、.rdp ファイルに次の行を追加します。"LoadBalanceInfo:s:tsv://vmresource1.2.plugin1"
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ItsPubPlugin "{70C04B05-F347-412B-822F-36C99C54CA45}" #usecom global ItsPubPlugin IID_ItsPubPlugin "{}" #comfunc global ItsPubPlugin_GetResourceList 3 wstr,var,var #comfunc global ItsPubPlugin_GetResource 4 wstr,int,var #comfunc global ItsPubPlugin_GetCacheLastUpdateTime 5 var #comfunc global ItsPubPlugin_get_pluginName 6 var #comfunc global ItsPubPlugin_get_pluginVersion 7 var #comfunc global ItsPubPlugin_ResolveResource 8 var,var,var,wstr,wstr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_ItsPubPlugin "{70C04B05-F347-412B-822F-36C99C54CA45}" #usecom global ItsPubPlugin IID_ItsPubPlugin "{}" #comfunc global ItsPubPlugin_GetResourceList 3 wstr,sptr,sptr #comfunc global ItsPubPlugin_GetResource 4 wstr,int,sptr #comfunc global ItsPubPlugin_GetCacheLastUpdateTime 5 sptr #comfunc global ItsPubPlugin_get_pluginName 6 sptr #comfunc global ItsPubPlugin_get_pluginVersion 7 sptr #comfunc global ItsPubPlugin_ResolveResource 8 sptr,sptr,sptr,wstr,wstr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。