Aggiungere comunicazioni bidirezionali
Il spooler fornisce supporto per la comunicazione bidirezionale ("BiDi") tra un'applicazione o un driver e una stampante. Questo supporto consente all'applicazione o al driver di inviare una o più richieste alla stampante e alla stampante di rispondere a queste richieste.
Requisiti di comunicazione bidirezionale
Prima che un'applicazione o un driver possa usare la comunicazione bidi, deve implementare interfacce di comunicazione bidirezionali: l'interfaccia COM IBidiSpl o l'interfaccia COM IbidiSpl2, insieme a almeno una delle interfacce COM IBidiRequest e IBidiRequestContainer. Inoltre, uno o entrambi i seguenti devono essere true:
La funzione SendRecvBidiData viene implementata in una DLL del provider di stampa.
La funzione SendRecvBidiDataFromPort viene implementata in una DLL del server di monitoraggio del linguaggio o in una DLL del server di monitoraggio delle porte.
Per inviare una singola richiesta alla stampante, un driver dell'applicazione o della stampante deve prima comporre la richiesta e quindi chiamare il metodo IBidiSpl::SendRecv. Per inviare più richieste, l'applicazione o il driver compone un elenco di richieste e quindi chiama il metodo IBidiSpl::MultiSendRecv .
Dopo aver ricevuto la richiesta, la parte lato client del spooler (Winspool.drv) lo passa al spooler lato server (spoolsv.exe). Il server-side spooler può trovarsi nel computer locale o in un server di stampa di rete remota. Quando il spooler lato server riceve la richiesta, analizza i dati nella richiesta e compila i membri di una struttura BIDI_REQUEST_CONTAINER .
Lo spooler lato server chiama quindi SendRecvBidiData o SendRecvBidiDataFromPort. Quando una funzione restituisce, il parametro ppResData punta a una posizione di memoria contenente l'indirizzo di una struttura di BIDI_RESPONSE_CONTAINER compilata che contiene la risposta della stampante. Lo spooler lato server converte i dati in questa struttura in un modulo adatto per l'uso da parte dell'applicazione o del driver e lo passa al spooler lato client e infine torna all'origine della richiesta.