Adicionar comunicação bidirecional
O spooler fornece suporte para comunicação bidirecional ("BiDi") entre uma aplicação ou driver e uma impressora. Esse suporte permite que o aplicativo ou driver envie uma ou mais solicitações para a impressora e a impressora responda a essas solicitações.
Requisitos de comunicação bidirecional
Antes que um aplicativo ou driver possa usar a comunicação bidi, ele deve implementar interfaces de comunicação bidirecionais: a interface IBidiSpl COM ou a interface IbidiSpl2 COM, juntamente com pelo menos uma das interfaces IBidiRequest e IBidiRequestContainer COM. Além disso, uma ou ambas as seguintes situações devem ser verdadeiras:
A função SendRecvBidiData é implementada numa DLL de um provedor de impressão.
A funçãoSendRecvBidiDataFromPort é implementada em uma DLL de servidor de monitor de idioma ou em uma DLL de servidor de monitor de porta.
Para enviar uma única solicitação para a impressora, um aplicativo ou driver de impressora deve primeiro compor a solicitação e, em seguida, chamar o método IBidiSpl::SendRecv. Para enviar várias solicitações, o aplicativo ou driver compõe uma lista de solicitações e, em seguida, chama o método IBidiSpl::MultiSendRecv.
Depois de receber a solicitação, a parte do lado do cliente do spooler (Winspool.drv) passa-a para o spooler do lado do servidor (spoolsv.exe). O spooler do lado do servidor pode estar no computador local ou em um servidor de impressão de rede remoto. Quando o spooler do lado do servidor recebe a solicitação, ele analisa os dados da solicitação e preenche os membros de uma estrutura de BIDI_REQUEST_CONTAINER.
Em seguida, o spooler do lado do servidor invoca SendRecvBidiData ou SendRecvBidiDataFromPort. Quando qualquer função retorna, o parâmetro ppResData aponta para um local de memória que contém o endereço de uma estrutura preenchida BIDI_RESPONSE_CONTAINER que contém a resposta da impressora. O spooler do lado do servidor converte os dados nesta estrutura em um formato adequado para uso pelo aplicativo ou driver e os passa de volta para o spooler do lado do cliente e, finalmente, de volta para o originador da solicitação.