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.
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.