IUPnPReregistrar
COM公式ドキュメント
IUPnPReregistrar インターフェイスを使用すると、アプリケーションは UPnP ベースのデバイスをデバイスホストに再登録できます。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ReregisterDevice メソッドは、デバイスをデバイスホストに再登録します。デバイス情報はデバイスホストによって保存されます。その後、デバイスホストはデバイス識別子を返し、ネットワーク上でデバイスを公開してアナウンスします。
| bstrDeviceIdentifier | LPWSTR | in | デバイスのデバイス識別子を指定します。 IUPnPRegistrar::RegisterDevice が返した識別子を使用してください。 |
| bstrXMLDesc | LPWSTR | in | 登録するデバイスの XML デバイス記述テンプレートを指定します。 |
| bstrProgIDDeviceControlClass | LPWSTR | in | IUPnPDeviceControl インターフェイスを実装するデバイス制御オブジェクトの ProgID を指定します。このインターフェイスはインプロセス COM サーバー (CLSCTX_INPROC_SERVER) である必要があり、LocalService からアクセス可能である必要があります。 |
| bstrInitString | LPWSTR | in | デバイス固有の初期化文字列を指定します。この文字列は後で IUPnPDeviceControl::Initialize に渡されます。 |
| bstrContainerId | LPWSTR | in | デバイスが属するプロセスグループを識別する文字列を指定します。同じコンテナー ID を持つすべてのデバイスは、同一のプロセス内に含まれます。 |
| bstrResourcePath | LPWSTR | in | デバイスのリソースディレクトリの場所を指定します。このリソースディレクトリには、デバイス記述テンプレート bstrXMLDesc で指定されたアイコンファイルとサービス記述が含まれます。リソースディレクトリにはプレゼンテーションファイルを含めることもできますが、これは省略可能です。 |
| nLifeTime | INT | in | デバイスアナウンスの有効期間を秒単位で指定します。タイムアウトが経過すると、アナウンスは更新されます。ゼロを指定した場合は、既定値の 1800 (30 分) が使用されます。指定可能な最小値は 900 (15 分) であり、900 未満の値を指定するとエラーが返されます。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、メソッドは WinError.h で定義されている COM エラーコード、または以下の UPnP 固有のエラーコードのいずれかを返します。
| 戻り値 | 説明 |
|---|---|
| デバイスが登録されていません。未登録のデバイスを登録するには RegisterRunningDevice を使用してください。 | |
| デバイスは現在実行中です。実行中のデバイスを再登録するには ReregisterRunningDevice を使用してください。 | |
| 重複する要素が存在します。 | |
| 同一の親デバイス内のサービスに対して重複するサービス ID が存在します。 | |
| デバイス記述が有効ではありません。 | |
| デバイス記述の icon 要素にエラーがあります。 | |
| デバイス記述の service 要素にエラーがあります。 | |
| 必須の要素が欠落しています。 |
解説(Remarks)
IUPnPRegistrar::UnregisterDevice を呼び出す際には、pbstrDeviceIdentifier で返された識別子を使用してください。
この関数の呼び出し時に発生し得る一般的なエラーには、次のものがあります。
- 必要な COM オブジェクトが見つからなかった。
- LocalService から COM オブジェクトにアクセスできない。
- 下位の COM インターフェイスに関する問題。
- XML 記述の制限 ( Creating a Device Description を参照)。
ReregisterRunningDevice メソッドは、実行中のデバイスをデバイスホストに再登録します。
| bstrDeviceIdentifier | LPWSTR | in | デバイスのデバイス識別子を指定します。これは IUPnPRegistrar::RegisterRunningDevice が pbstrDeviceIdentifier パラメーターで返した識別子と同一である必要があります。 |
| bstrXMLDesc | LPWSTR | in | 登録するデバイスの XML デバイス記述テンプレートを指定します。 |
| punkDeviceControl | IUnknown* | in | デバイスのデバイス制御オブジェクトへの IUnknown ポインターを指定します。 |
| bstrInitString | LPWSTR | in | デバイス固有の初期化文字列を指定します。この文字列は後で IUPnPDeviceControl::Initialize に渡されます。 |
| bstrResourcePath | LPWSTR | in | デバイスのリソースディレクトリの場所を指定します。このリソースディレクトリには、デバイス記述テンプレート bstrXMLDesc で指定されたアイコンファイルとサービス記述が含まれます。 |
| nLifeTime | INT | in | デバイスアナウンスの有効期間を秒単位で指定します。タイムアウトが経過すると、アナウンスは更新されます。ゼロを指定した場合は、既定値の 1800 (30 分) が使用されます。指定可能な最小値は 900 (15 分) であり、900 未満の値を指定するとエラーが返されます。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、メソッドは WinError.h で定義されている COM エラーコード、または以下の UPnP 固有のエラーコードのいずれかを返します。
| 戻り値 | 説明 |
|---|---|
| デバイスが登録されていません。未登録のデバイスを登録するには RegisterRunningDevice を使用してください。 | |
| 重複する要素が存在します。 | |
| 同一の親デバイス内のサービスに対して重複するサービス ID が存在します。 | |
| デバイス記述が有効ではありません。 | |
| デバイス記述の icon 要素にエラーがあります。 | |
| デバイス記述の service 要素にエラーがあります。 | |
| 必須の要素が欠落しています。 |
解説(Remarks)
このメソッドを呼び出すクライアントは、処理を完了するために LocalService を偽装できる必要があります。
IUPnPDeviceControl::Initialize メソッドは、最初の制御要求またはイベント要求を受信した時点で呼び出されます。
このデバイスの登録は、システムの再起動をまたいで保持されません。
この関数の呼び出し時に発生し得る一般的なエラーには、次のものがあります。
- 必要な COM オブジェクトが見つからなかった。
- LocalService から COM オブジェクトにアクセスできない。
- 下位の COM インターフェイスに関する問題。
- XML 記述の制限 ( Creating a Device Description を参照)。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IUPnPReregistrar "{204810B7-73B2-11D4-BF42-00B0D0118B56}"
#usecom global IUPnPReregistrar IID_IUPnPReregistrar "{}"
#comfunc global IUPnPReregistrar_ReregisterDevice 3 wstr,wstr,wstr,wstr,wstr,wstr,int
#comfunc global IUPnPReregistrar_ReregisterRunningDevice 4 wstr,wstr,sptr,wstr,wstr,int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。