Partilhar via


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.

diagrama ilustrando a arquitetura de suporte bidirecional.

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.