双方向通信の追加

スプーラーは、アプリケーションまたはドライバーとプリンター間の双方向 ("BiDi") 通信をサポートします。 このサポートにより、アプリケーションまたはドライバーは 1 つ以上の要求をプリンターに送信し、プリンターはこれらの要求に応答できます。

diagram illustrating bidirectional support architecture.

双方向通信の要件

アプリケーションまたはドライバーは、bidi 通信を使用する前に、双方向通信インターフェイス (IBidiSpl COM インターフェイスまたは IbidiSpl2 COM インターフェイスのいずれか) を、少なくとも 1 つの IBidiRequest および IBidiRequestContainer COM インターフェイスと共に実装する必要があります。 さらに、次のいずれか一方または両方が true でなければなりません:

  • SendRecvBidiData 関数は、印刷プロバイダー DLL に実装されます。

  • SendRecvBidiDataFromPort 関数は、言語モニター サーバー DLL またはポート モニター サーバー DLL に実装されます。

プリンターに 1 つの要求を送信するには、アプリケーションまたはプリンター ドライバーが最初に要求を作成し、次に IBidiSpl::SendRecv メソッドを呼び出す必要があります。 複数の要求を送信するには、アプリケーションまたはドライバーが要求の一覧を作成し、IBidiSpl::MultiSendRecv メソッドを呼び出します。

要求を受信すると、スプーラー (Winspool.drv) のクライアント側の部分がサーバー側スプーラー (spoolsv.exe) に渡されます。 サーバー側スプーラーは、ローカル コンピューターまたはリモート ネットワーク プリント サーバー上に配置できます。 要求を受信すると、サーバー側スプーラーは要求内のデータを解析し、BIDI_REQUEST_CONTAINER 構造体のメンバーを入力します。

サーバー側スプーラーは、SendRecvBidiData または SendRecvBidiDataFromPort を呼び出します。 いずれかの関数が戻るときに、その ppResData パラメーターは、プリンターの応答を含む BIDI_RESPON Standard Edition_CONTAINER 構造体のアドレスを含むメモリ位置を指します。 サーバー側スプーラーは、この構造体のデータをアプリケーションまたはドライバーで使用するのに適した形式に変換し、それをクライアント側スプーラーに戻し、最後に要求の発信元に戻します。