Ajouter une communication bidirectionnelle

Le spouleur prend en charge la communication bidirectionnelle (« BiDi ») entre une application ou un pilote et une imprimante. Cette prise en charge permet à l’application ou au pilote d’envoyer une ou plusieurs demandes à l’imprimante, et à l’imprimante de répondre à ces demandes.

diagramme illustrant l’architecture de prise en charge bidirectionnelle.

Exigences en matière de communication bidirectionnelle

Avant qu’une application ou un pilote puisse utiliser la communication bidi, elle doit implémenter des interfaces de communication bidirectionnelles : l’interface COM IBidiSpl ou l’interface COM IbidiSpl2 , ainsi qu’au moins une des interfaces COM IBidiRequest et IBidiRequestContainer . En outre, l’une des valeurs suivantes ou les deux doivent être vraies :

  • La fonction SendRecvBidiData est implémentée dans une DLL de fournisseur d’impression.

  • La fonction SendRecvBidiDataFromPort est implémentée dans une DLL de serveur moniteur de langage ou dans une DLL de serveur de surveillance de port.

Pour envoyer une seule requête à l’imprimante, une application ou un pilote d’imprimante doit d’abord composer la demande, puis appeler la méthode IBidiSpl ::SendRecv. Pour envoyer plusieurs requêtes, l’application ou le pilote compose une liste de requêtes, puis appelle la méthode IBidiSpl ::MultiSendRecv .

Une fois la demande reçue, la partie côté client du spouleur (Winspool.drv) la transmet au spouleur côté serveur (spoolsv.exe). Le spouleur côté serveur peut se trouver sur l’ordinateur local ou sur un serveur d’impression réseau distant. Lorsque le spouleur côté serveur reçoit la demande, il analyse les données de la demande et remplit les membres d’une structure BIDI_REQUEST_CONTAINER .

Le spouleur côté serveur appelle ensuite SendRecvBidiData ou SendRecvBidiDataFromPort. Lorsque l’une des fonctions retourne, son paramètre ppResData pointe vers un emplacement mémoire qui contient l’adresse d’une structure de BIDI_RESPONSE_CONTAINER remplie qui contient la réponse de l’imprimante. Le spouleur côté serveur convertit les données de cette structure en un formulaire adapté à l’utilisation de l’application ou du pilote, puis les transmet au spouleur côté client, puis à l’initiateur de la demande.