ホストされたデバイスをデバイス ホストに登録する
ホストされたデバイスを登録するということは、デバイスホストにデバイスの説明とそのデバイス制御オブジェクトを提供することを意味します。 その後、デバイス ホストは、完全な UPnP デバイス記述を構築し、それを発行し、UPnP 検出プロトコルを使用してネットワーク上のデバイスを読み上げる。 デバイスが発行されると、コントロール ポイントで使用できるようになります。
デバイスは、次の 2 つの方法で登録されます。
- アプリケーションは、デバイス コントロール オブジェクトのインスタンスを作成し、そのオブジェクトへのポインターをデバイス ホストに渡します。
- アプリケーションは、登録済みのデバイス コントロール オブジェクトの ProgID をデバイス ホストに渡します。 デバイス ホストは、デバイス ホストがデバイスの最初の要求を受信したときにインスタンス化します。
どの方法が使用されているかに関係なく、デバイスホストは登録されるとすぐにデバイスを発行して読み上げる。 2 つの方法の違いは、デバイス コードが読み込まれるときに関係します。 アプリケーションがデバイス コントロール オブジェクトへのポインターを渡すと、登録時にデバイス コードが読み込まれ、実行されます。 アプリケーションが ProgID を渡すと、デバイス コードは、アクションが呼び出されたとき、プロパティにクエリが実行されたとき、またはイベント サブスクリプション要求が到着したときにのみ読み込まれます。 2 つ目の方法は、少し効率的です。 ただし、この方法を使用すると、デバイス コントロール オブジェクトは必要なときにのみ作成されるため、コントロールまたはイベント サブスクリプション要求が到着する前に実行する必要があるデバイスには適していません。 この 2 つ目の方法では、デバイスの種類に対する最初の要求を受信したときに、パフォーマンスの問題が発生する可能性もあります。
コンピューターの起動時にネットワーク上のデバイス ホストによってデバイスが自動的に発表されるようにするには、 IUPnPRegistrar::RegisterDevice を呼び出します。 RegisterDevice は、コントロールまたはイベント サブスクリプション要求が受信されたときにのみ、デバイス コードが読み込まれるようにします。
デバイスが一時的またはブリッジされている場合は、 IUPnPRegistrar::RegisterRunningDevice を呼び出します。コンピューターの再起動時にデバイスが自動的に再アドバタイズされません。
検出のお知らせの有効期間
デバイス ホストに登録されている各デバイスは、登録時にデバイスによって指定される有効期間に関連付けられます。 デバイスの有効期間は、デバイスの検出アナウンスが有効な期間です。 有効期間は、最初の検出アナウンスのヘッダーとしてコントロール ポイントに渡されます。 デバイス ホストは、有効期限の前にアナウンスを自動的に更新します。 検出アナウンスの有効期間の値は 15 分以上にする必要があります (既定値は 30 分)。
登録時に作成されたデバイス識別子
デバイス記述テンプレートを作成する場合、デバイス開発者は、サービスの説明と関連するアイコンへのリソース パスを指定する必要があります。 リソース パスは、デバイス アプリケーションによって決定されます。
同じコンピューターに同じデバイスを複数回登録できるため、デバイス記述テンプレートで指定された UDN では、デバイスを一意に識別するのに十分ではありません。 そのため、デバイスが登録されると、デバイス ホストによってデバイス識別子が作成されます。 このデバイス識別子は、デバイス記述テンプレートの UDN と関連付けて、デバイスを一意に識別するために使用できます。
この識別子は、デバイスが一時的に登録解除されてから再登録されるときにも使用されます。 デバイスが一時的に登録解除されると、デバイス ホストは UDN を削除しません。 UDN を削除しない理由は次のとおりです。
- デバイスはアップグレード中です。
- デバイスのプロパティを変更しています。
- サービスは一時的に使用できません。
- デバイスに新しいサービスを追加しています。
- DLL を更新しています。
- デバイスはスタンバイ モードです。
登録の詳細については、次のセクションを参照してください。