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

IUPnPRegistrar

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

公式ドキュメント

IUPnPRegistrar インターフェイスは、デバイスホストのコンテキストで実行されるデバイスを登録します。

メソッド 6

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

vtbl 3 HRESULT RegisterDevice(LPWSTR bstrXMLDesc, LPWSTR bstrProgIDDeviceControlClass, LPWSTR bstrInitString, LPWSTR bstrContainerId, LPWSTR bstrResourcePath, INT nLifeTime, LPWSTR* pbstrDeviceIdentifier)

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

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

戻り値

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

戻り値 説明
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)

制御要求またはイベント要求を受信すると、デバイスがインスタンス化され、 IUPnPDeviceControl::Initialize が呼び出されます。

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

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

vtbl 4 HRESULT RegisterRunningDevice(LPWSTR bstrXMLDesc, IUnknown* punkDeviceControl, LPWSTR bstrInitString, LPWSTR bstrResourcePath, INT nLifeTime, LPWSTR* pbstrDeviceIdentifier)

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

bstrXMLDescLPWSTRin登録するデバイスの XML デバイス記述テンプレートを指定します。
punkDeviceControlIUnknown*inデバイスのデバイス制御オブジェクトへの IUnknown ポインターを指定します。
bstrInitStringLPWSTRinデバイス固有の初期化文字列を指定します。この文字列は後で IUPnPDeviceControl::Initialize に渡されます。
bstrResourcePathLPWSTRinデバイスのリソースディレクトリの場所を指定します。このリソースディレクトリには、デバイス記述テンプレート bstrXMLDesc で指定されたアイコンファイルとサービス記述が含まれます。
nLifeTimeINTinデバイスアナウンスの有効期間を秒単位で指定します。タイムアウトが経過すると、アナウンスは更新されます。ゼロを指定した場合は、既定値の 1800 (30 分) が使用されます。指定できる最小値は 900 (15 分) で、900 未満の値を指定するとエラーが返されます。
pbstrDeviceIdentifierLPWSTR*outデバイス識別子を受け取ります。デバイスの登録解除または再登録の際にこの識別子を使用します。このデバイス ID は保存してください。 UnregisterDevice を呼び出す際に必要になります。

戻り値

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

bstrResourcePath が長すぎる場合、このメソッドは値 0x80070002 を返します。
戻り値 説明
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 を偽装 (impersonate) できる必要があります。

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

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

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

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

vtbl 5 HRESULT RegisterDeviceProvider(LPWSTR bstrProviderName, LPWSTR bstrProgIDProviderClass, LPWSTR bstrInitString, LPWSTR bstrContainerId)

RegisterDeviceProvider メソッドは、デバイスプロバイダーをデバイスホストに登録します。デバイスプロバイダー自体はネットワーク上に公開されません。代わりに、デバイスプロバイダーは動的にデバイスを作成し、RegisterRunningDevice を使用してそれらを登録します。

bstrProviderNameLPWSTRinデバイスプロバイダーの名前を指定します。
bstrProgIDProviderClassLPWSTRinIUPnPDeviceProvider インターフェイスを実装するオブジェクトの ProgID を指定します。このオブジェクトはあらかじめ COM に登録されている必要があります。また、インプロセス COM サーバー (CLSCTX_INPROC_SERVER) である必要があり、LocalService からアクセス可能である必要があります。
bstrInitStringLPWSTRinデバイスプロバイダー固有の初期化文字列を指定します。
bstrContainerIdLPWSTRinデバイスプロバイダーが属するプロセスグループを識別する文字列を指定します。同じコンテナー ID を持つすべてのデバイスおよびデバイスプロバイダーは、同じプロセス内に格納されます。

戻り値

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

解説(Remarks)

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

vtbl 6 HRESULT GetUniqueDeviceName(LPWSTR bstrDeviceIdentifier, LPWSTR bstrTemplateUDN, LPWSTR* pbstrUDN)

GetUniqueDeviceName メソッドは、指定されたデバイスの UDN を取得します。

bstrDeviceIdentifierLPWSTRinRegisterDevice または RegisterRunningDevice から返された識別子を指定します。
bstrTemplateUDNLPWSTRinデバイス記述テンプレート内の UDN を指定します。
pbstrUDNLPWSTR*outデバイスホストによって生成された、デバイスの UDN を受け取ります。

戻り値

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

解説(Remarks)

デバイス記述テンプレート内でデバイスに指定された各 UDN は、登録時に置き換えられます。デバイスホストは、各 UDN をグローバルに一意な値に置き換えます。

vtbl 7 HRESULT UnregisterDevice(LPWSTR bstrDeviceIdentifier, BOOL fPermanent)

UnregisterDevice メソッドは、デバイスホストからデバイスの登録を解除します。デバイスの登録解除は、一時的または恒久的のいずれかで行われます。

bstrDeviceIdentifierLPWSTRin登録を解除するデバイスのデバイス識別子を指定します。このデバイス識別子は、 RegisterDevice または RegisterRunningDevice の以前の呼び出しで返されたものです。
fPermanentBOOLinデバイスの登録を恒久的に解除するか一時的に解除するかを指定します。デバイスホストからデバイスの登録を恒久的に解除するには TRUE を指定します。一時的に解除するには FALSE を指定します。

戻り値

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

解説(Remarks)

このメソッドは、デバイスホストからデバイスを削除します。fPermanentTRUE の場合、デバイスの登録は恒久的に解除されます。それ以外の場合、デバイス識別子 ( RegisterDevice または RegisterRunningDevice から返された値) とデバイスホストが生成した UDN とのマッピングは、デバイスホスト内に保持されます。デバイスの登録を一時的に解除した場合、そのデバイスを再登録するときには、以前にデバイスに関連付けられていた UDN を使用します。

vtbl 8 HRESULT UnregisterDeviceProvider(LPWSTR bstrProviderName)

UnregisterDeviceProvider メソッドは、デバイスホストからデバイスプロバイダーの登録を恒久的に解除し、アンロードします。IUPnPDeviceProvider::Stop メソッドが呼び出されます。

bstrProviderNameLPWSTRinプロバイダー名を指定します。 RegisterDeviceProvider の呼び出しで使用したものと同じ名前を使用してください。

戻り値

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

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IUPnPRegistrar "{204810B6-73B2-11D4-BF42-00B0D0118B56}"
#usecom global IUPnPRegistrar IID_IUPnPRegistrar "{204810B9-73B2-11D4-BF42-00B0D0118B56}"
#comfunc global IUPnPRegistrar_RegisterDevice            3 wstr,wstr,wstr,wstr,wstr,int,var
#comfunc global IUPnPRegistrar_RegisterRunningDevice     4 wstr,sptr,wstr,wstr,int,var
#comfunc global IUPnPRegistrar_RegisterDeviceProvider    5 wstr,wstr,wstr,wstr
#comfunc global IUPnPRegistrar_GetUniqueDeviceName       6 wstr,wstr,var
#comfunc global IUPnPRegistrar_UnregisterDevice          7 wstr,int
#comfunc global IUPnPRegistrar_UnregisterDeviceProvider  8 wstr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。