デバイス プロバイダー
デバイス プロバイダーは、すべてのシステム起動時にコンピューターが起動する登録済みオブジェクトです。 デバイス プロバイダーは、何らかのイベントに応答して、実行中のデバイスをデバイス ホストに登録および登録解除します。 これらのデバイスは、システムの起動時に自動的に起動されたデバイスです。 セキュリティ上の理由から、デバイス プロバイダーは通常、LocalSystem ではなく LocalService として実行する必要があります。
デバイス プロバイダーは、一時的なデバイスに使用できます。 デバイス プロバイダーを使用して、ポーリングされたメディアにデバイスをブリッジすることもできます。 たとえば、デジタル音楽プレーヤーなどの周辺機器は、シリアル ポートを介してコンピューターに接続されます。 音楽プレーヤーを UPnP ベースのデバイスとして公開するには、デバイス コントロール オブジェクトと一連のサービス オブジェクトが必要です。 これらのオブジェクトは、UPnP ベースの音楽プレーヤー アクションをシリアル コマンドとして実装します。 ただし、これらのオブジェクトを登録する前に、音楽プレーヤーをシリアル ポートに接続し、制御できる必要があります。
シリアル ポートでは、デバイスが接続されているときに明示的な通知メカニズムが提供されないため、ポーリング コードが必要です。 このコードは、デバイス プロバイダー オブジェクト、サービス、またはスタンドアロン アプリケーションに実装できます。 コンピューターが起動すると、デバイス ホストはデバイス プロバイダー オブジェクトをインスタンス化し、その Start メソッドを呼び出します。 デバイス プロバイダーは、音楽プレーヤー デバイスの存在を検出すると、適切なデバイス コントロール オブジェクトをインスタンス化し、 IUPnPRegistrar::RegisterRunningDevice を呼び出して登録します。 このメソッドは、デバイスを発行し、UPnP ベースのネットワークに読み上げる。
シリアル ポートをポーリングするサービスを実装することでも、同じ機能を実現できます。 ただし、デバイス プロバイダーは、デバイス プロバイダーがデバイス ホストに依存して起動と停止を行うため、コア機能 (ポーリング) のみを実装するように要求することで、物事を簡略化します。 デバイス プロバイダーの使用は、サービスを実装するよりも簡単です。
登録時およびそれ以降のすべてのシステム起動時に、コンピューターはデバイス プロバイダー オブジェクトをインスタンス化し、 その IUPnPDeviceProvider::Start メソッドを呼び出し、登録時に指定された初期化文字列を渡します。
Start メソッドが呼び出されると、デバイス プロバイダーは必要な処理を実行し、必要に応じて、デバイス プロバイダーは IUPnPRegistrar::RegisterRunningDevice を呼び出してデバイスを登録します。詳細については、「デバイス ホストを使用してホストされたデバイスを登録する」を参照してください。
コンピューターがシャットダウンされると、デバイス ホストは IUPnPDeviceProvider::Stop メソッドを呼び出して、デバイス プロバイダーが操作を終了することを示します。