次の方法で共有


デバイスのインストール時の自動構成

次の図は、デバイスのインストール時の自動構成のデータ フローを示しています。

デバイスのインストール時の自動構成のデータ フローを示す図。

  1. プリンターがインストールされると、スプーラーは、 DrvPrinterEvent を呼び出し、呼び出しでPRINTER_EVENT_INITIALIZEを渡すことによってドライバーを初期化します。

  2. ドライバーは 、bidi 通信インターフェイス を使用して、\Printer.Configuration.DuplexUnit:Installed や \Printer.Configuration.HardDisk:Installed などのインストール可能なオプションの値を含む、目的のデータを取得します。

  3. bidi 通信インターフェイスは、これらの属性の値をポート モニターに照会します。 ポート モニターには、キャッシュに要求されたデータの一部が含まれている場合があります。 次の手順の説明では、\Printer.Configuration.HardDisk:Installed の値がポート モニターのキャッシュにあるが、\Printer.Configuration.DuplexUnit:Installed の値は含まれていないと仮定します。

  4. ポート モニターにキャッシュがあり、その中に 1 つ以上の要求された値が保存されている場合、ポート モニターはこれらの値を bidi 通信インターフェイスに返します。 キャッシュにない値の場合、ポート モニターはERROR_NO_DATAを返します。 ポート モニターがキャッシュを実装しているがキャッシュが空の場合、bidi クエリは失敗する可能性があることに注意してください。 この問題を防ぐために、ポート モニターは、キャッシュが設定されたときに bidi 通信インターフェイスに通知する必要があります。

  5. bidi 通信インターフェイスは、ポート モニターから受信した情報をドライバーに渡します。 bidi 通信インターフェイスからポート モニターへの呼び出しで何らかの理由でエラーが発生した場合、ドライバーはこれらの属性の既定値を設定する必要があります。 ポート モニターは、要求された属性に関する情報を受信するとすぐに、この情報を含む通知を bidi 通信インターフェイスに送信する必要があります。

    ドライバーは、\Printer.Configuration.HardDisk:Installed (ポート モニターのキャッシュから取得) の値と \Printer.Configuration.DuplexUnit:Installed の既定値でレジストリを更新します。

  6. ポート モニターは、キャッシュされた値 (\Printer.Configuration.HardDisk:Installed) を含む両方の値をデバイスに照会します。

  7. デバイスは、照会された属性の値をポート モニターに送信します。 値がまだキャッシュに存在しない属性、または値がキャッシュ内の属性と異なる属性の場合、ポート モニターは新しい値をキャッシュに配置します。

  8. ポート モニターは、以前はキャッシュに含まれていない値や変更された値を含む通知をスプーラーに送信します。 この例では、ポート モニターは\Printer.Configuration.DuplexUnit:Installed の新しい値に関する通知をスプーラーに送信します。 キャッシュされた値がデバイスから受信した新しい値と同じ場合、ポート モニターはスプーラーに通知を送信しないことに注意してください。

  9. スプーラーは、 DrvPrinterEventを呼び出してポート モニターからの通知に応答し、呼び出し内のすべての変更された値に関する情報に加えてPRINTER_EVENT_CONFIGURATION_UPDATEを渡します。 このアクションは、値が初めてキャッシュに配置された属性、または値が変更された属性 (この例では\Printer.Configuration.DuplexUnit:Installed) の値をドライバーに通知する 2 つの目的を果たします。レジストリを更新します。 プリンターごとに、スプーラーは、ドライバーがスレッド セーフである必要がないように、 DrvPrinterEventへの呼び出しをシリアル化します。

    デバイス情報はレジストリに格納されるため、ドライバーは、物理デバイスと直接通信することなく、UI またはデバイスの機能情報を更新する呼び出しを満たすことができます。 ドライバーは、レジストリに格納されている情報が正しいことを確認できます。変更通知によってドライバーがトリガーされ、デバイスのクエリが実行され、デバイスの構成状態が更新されるためです。

  10. ドライバーは、最新の構成に従って UI を更新します。

    通知メッセージには変更された値が含まれているため、ドライバーは、デバイスのインストール中に変更が発生したタイミングを確認できます。 ただし、通知が大きすぎて通知メカニズムを介して送信できない場合、通知には 1 つ以上の ReducedSchema インスタンスがあり、それぞれがデバイスの特性が変更されたことを示しますが、新しい値の詳細は表示されません。