Adicionar comunicação bidirecional

O spooler dá suporte à comunicação bidirecional ("BiDi") entre um aplicativo 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 para responder 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 COM IBidiSpl ou a interface COM ibidiSpl2 , juntamente com pelo menos uma das interfaces COM IBidiRequest e IBidiRequestContainer . Além disso, um ou ambos os seguintes devem ser verdadeiros:

  • A função SendRecvBidiData é implementada em uma DLL do provedor de impressão.

  • A função SendRecvBidiDataFromPort é implementada em uma DLL do servidor de monitor de idioma ou em uma DLL do servidor de monitor de porta.

Para enviar uma única solicitação para a impressora, um driver de aplicativo ou impressora deve primeiro redigir 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 chama o método IBidiSpl::MultiSendRecv .

Depois de receber a solicitação, a parte do lado do cliente do spooler (Winspool.drv) a passa 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 remota. Quando o spooler do lado do servidor recebe a solicitação, ele analisa os dados na solicitação e preenche os membros de uma estrutura de BIDI_REQUEST_CONTAINER .

O spooler do lado do servidor chama SendRecvBidiData ou SendRecvBidiDataFromPort. Quando uma das funções retorna, seu parâmetro ppResData aponta para um local de memória que contém o endereço de uma estrutura de BIDI_RESPONSE_CONTAINER preenchida que contém a resposta da impressora. O spooler do lado do servidor converte os dados nessa estrutura em um formulário adequado para uso pelo aplicativo ou driver e os passa de volta para o spooler do lado do cliente e, por fim, de volta ao originador da solicitação.