Win32 API 日本語リファレンス
ホームDevices.Enumeration.Pnp › IUPnPReregistrar

IUPnPReregistrar

COM
IID204810b7-73b2-11d4-bf42-00b0d0118b56継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IUPnPReregistrar インターフェイスを使用すると、アプリケーションは UPnP ベースのデバイスをデバイスホストに再登録できます。

メソッド 2

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT ReregisterDevice(LPWSTR bstrDeviceIdentifier, LPWSTR bstrXMLDesc, LPWSTR bstrProgIDDeviceControlClass, LPWSTR bstrInitString, LPWSTR bstrContainerId, LPWSTR bstrResourcePath, INT nLifeTime)

ReregisterDevice メソッドは、デバイスをデバイスホストに再登録します。デバイス情報はデバイスホストによって保存されます。その後、デバイスホストはデバイス識別子を返し、ネットワーク上でデバイスを公開してアナウンスします。

bstrDeviceIdentifierLPWSTRinデバイスのデバイス識別子を指定します。 IUPnPRegistrar::RegisterDevice が返した識別子を使用してください。
bstrXMLDescLPWSTRin登録するデバイスの XML デバイス記述テンプレートを指定します。
bstrProgIDDeviceControlClassLPWSTRinIUPnPDeviceControl インターフェイスを実装するデバイス制御オブジェクトの ProgID を指定します。このインターフェイスはインプロセス COM サーバー (CLSCTX_INPROC_SERVER) である必要があり、LocalService からアクセス可能である必要があります。
bstrInitStringLPWSTRinデバイス固有の初期化文字列を指定します。この文字列は後で IUPnPDeviceControl::Initialize に渡されます。
bstrContainerIdLPWSTRinデバイスが属するプロセスグループを識別する文字列を指定します。同じコンテナー ID を持つすべてのデバイスは、同一のプロセス内に含まれます。
bstrResourcePathLPWSTRinデバイスのリソースディレクトリの場所を指定します。このリソースディレクトリには、デバイス記述テンプレート bstrXMLDesc で指定されたアイコンファイルとサービス記述が含まれます。リソースディレクトリにはプレゼンテーションファイルを含めることもできますが、これは省略可能です。
nLifeTimeINTinデバイスアナウンスの有効期間を秒単位で指定します。タイムアウトが経過すると、アナウンスは更新されます。ゼロを指定した場合は、既定値の 1800 (30 分) が使用されます。指定可能な最小値は 900 (15 分) であり、900 未満の値を指定するとエラーが返されます。

戻り値

メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、メソッドは WinError.h で定義されている COM エラーコード、または以下の UPnP 固有のエラーコードのいずれかを返します。

戻り値 説明
UPNP_E_DEVICE_NOTREGISTERED
デバイスが登録されていません。未登録のデバイスを登録するには RegisterRunningDevice を使用してください。
UPNP_E_DEVICE_RUNNING
デバイスは現在実行中です。実行中のデバイスを再登録するには ReregisterRunningDevice を使用してください。
UPNP_E_DUPLICATE_NOT_ALLOWED
重複する要素が存在します。
UPNP_E_DUPLICATE_SERVICE_ID
同一の親デバイス内のサービスに対して重複するサービス ID が存在します。
UPNP_E_INVALID_DESCRIPTION
デバイス記述が有効ではありません。
UPNP_E_INVALID_ICON
デバイス記述の icon 要素にエラーがあります。
UPNP_E_INVALID_SERVICE
デバイス記述の service 要素にエラーがあります。
UPNP_E_REQUIRED_ELEMENT_ERROR
必須の要素が欠落しています。

解説(Remarks)

IUPnPRegistrar::UnregisterDevice を呼び出す際には、pbstrDeviceIdentifier で返された識別子を使用してください。

この関数の呼び出し時に発生し得る一般的なエラーには、次のものがあります。

vtbl 4 HRESULT ReregisterRunningDevice(LPWSTR bstrDeviceIdentifier, LPWSTR bstrXMLDesc, IUnknown* punkDeviceControl, LPWSTR bstrInitString, LPWSTR bstrResourcePath, INT nLifeTime)

ReregisterRunningDevice メソッドは、実行中のデバイスをデバイスホストに再登録します。

bstrDeviceIdentifierLPWSTRinデバイスのデバイス識別子を指定します。これは IUPnPRegistrar::RegisterRunningDevicepbstrDeviceIdentifier パラメーターで返した識別子と同一である必要があります。
bstrXMLDescLPWSTRin登録するデバイスの XML デバイス記述テンプレートを指定します。
punkDeviceControlIUnknown*inデバイスのデバイス制御オブジェクトへの IUnknown ポインターを指定します。
bstrInitStringLPWSTRinデバイス固有の初期化文字列を指定します。この文字列は後で IUPnPDeviceControl::Initialize に渡されます。
bstrResourcePathLPWSTRinデバイスのリソースディレクトリの場所を指定します。このリソースディレクトリには、デバイス記述テンプレート bstrXMLDesc で指定されたアイコンファイルとサービス記述が含まれます。
nLifeTimeINTinデバイスアナウンスの有効期間を秒単位で指定します。タイムアウトが経過すると、アナウンスは更新されます。ゼロを指定した場合は、既定値の 1800 (30 分) が使用されます。指定可能な最小値は 900 (15 分) であり、900 未満の値を指定するとエラーが返されます。

戻り値

メソッドが成功した場合、戻り値は S_OK です。それ以外の場合、メソッドは WinError.h で定義されている COM エラーコード、または以下の UPnP 固有のエラーコードのいずれかを返します。

戻り値 説明
UPNP_E_DEVICE_NOTREGISTERED
デバイスが登録されていません。未登録のデバイスを登録するには RegisterRunningDevice を使用してください。
UPNP_E_DUPLICATE_NOT_ALLOWED
重複する要素が存在します。
UPNP_E_DUPLICATE_SERVICE_ID
同一の親デバイス内のサービスに対して重複するサービス ID が存在します。
UPNP_E_INVALID_DESCRIPTION
デバイス記述が有効ではありません。
UPNP_E_INVALID_ICON
デバイス記述の icon 要素にエラーがあります。
UPNP_E_INVALID_SERVICE
デバイス記述の service 要素にエラーがあります。
UPNP_E_REQUIRED_ELEMENT_ERROR
必須の要素が欠落しています。

解説(Remarks)

このメソッドを呼び出すクライアントは、処理を完了するために LocalService を偽装できる必要があります。

IUPnPDeviceControl::Initialize メソッドは、最初の制御要求またはイベント要求を受信した時点で呼び出されます。

このデバイスの登録は、システムの再起動をまたいで保持されません。

この関数の呼び出し時に発生し得る一般的なエラーには、次のものがあります。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。