Drucken eines Druckauftrags
Nachdem ein Port geöffnet wurde, wie unter Öffnen und Schließen eines Ports beschrieben, kann der Spooler Druckaufträge an den Port senden.
Jeder Druckauftrag wird durch Spooleraufrufe an die Funktionen StartDocPort und EndDocPort einer Sprache oder eines Portmonitors getrennt. Der Spooler ruft diese Funktionen auf, wenn ein Druckprozessor die Funktionen StartDocPrinter und EndDocPrinter des Spoolers aufruft.
Innerhalb des Bereichs einer Reihe von StartDocPort - und EndDocPort-Funktionen können unbegrenzte Spooleraufrufe für die Funktionen WritePort, ReadPort und GetPrinterDataFromPort eines Monitors auftreten.
Jede dieser Funktionen erfordert, dass das von OpenPortEx (oder OpenPort) zurückgegebene Porthandle als im Eingabeargument angegeben wird. In der Regel implementiert ein Sprachmonitor jede der Funktionen, indem die Funktion mit ähnlichem Namen im zugehörigen Portmonitor aufgerufen wird.
Wenn der Spooler die WritePort-Funktion eines Sprachmonitors aufruft, um einen Datenstrom an den Port zu senden, fügt die Funktion im Allgemeinen sprachspezifische Informationen, z. B . PJL-Befehle , dem empfangenen Datenstrom hinzu, bevor sie ihn an die WritePort-Funktion des zugehörigen Portmonitors übergibt.
Die ReadPort-Funktion wird verwendet, um status Informationen von bidirektionaler Druckerhardware abzurufen, die ein Sprachmonitor möglicherweise durch Aufrufen von SetPort an den Spooler sendet. Der Spooler ruft die ReadPort-Funktion nicht auf.
Wenn die Druckhardware bidirektional ist, sollte sowohl der Sprachmonitor als auch der Portmonitor eine GetPrinterDataFromPort-Funktion unterstützen. Die GetPrinterDataFromPort-Funktion eines Sprachmonitors sollte einen Registrierungswertnamen als Eingabe akzeptieren, einen Wert für diesen Namen abrufen (in der Regel durch Aufrufen der WritePort - und ReadPort-Funktionen des zugeordneten Portmonitors) und den Wert an den Aufrufer zurückgeben. Die GetPrinterDataFromPort-Funktion eines Portmonitors sollte einen E/A-Steuerelementcode als Eingabe akzeptieren, DeviceIoControl aufrufen, um den Steuerungscode an den Porttreiber zu übergeben, und das Ergebnis zurückgeben.