印刷ジョブを印刷する
「ポートを開く/閉じる」の説明に従ってポートが開かれた後、スプーラーは印刷ジョブをポートに送信できます。
各印刷ジョブは、言語またはポート モニターの StartDocPort 関数と EndDocPort 関数に対するスプーラー呼び出しによって区切られます。 スプーラーは、印刷プロセッサによってスプーラーの StartDocPrinter 関数と EndDocPrinter 関数が呼び出されると、これらの関数を呼び出します。
StartDocPort 関数と EndDocPort 関数のセットのスコープ内で、モニターの WritePort、ReadPort、および GetPrinterDataFromPort 関数に対する無制限のスプーラー呼び出しが発生する可能性があります。
これらの関数のそれぞれにおいて、OpenPortEx (または OpenPort) によって返されるポート ハンドルを入力引数として指定する必要があります。 通常、言語モニターは、関連付けられているポート モニターで類似する名前の関数を呼び出すことによってそれぞれの関数を実装します。
スプーラーが言語モニターの WritePort 関数を呼び出してデータ ストリームをポートに送信する場合、関数は通常、PJL コマンドなどの言語固有の情報を、受信したデータ ストリームに追加してから、関連付けられているポート モニターの WritePort 関数に渡します。
ReadPort 関数は、言語モニターが SetPort を呼び出してスプーラーに送信する可能性がある状態情報を双方向プリンター ハードウェアから取得するために使用されます。 スプーラーは ReadPort 関数を呼び出しません。
印刷ハードウェアが双方向の場合、言語モニターとそのポート モニターの両方で GetPrinterDataFromPort 関数がサポートされている必要があります。 言語モニターの GetPrinterDataFromPort 関数は、レジストリ値の名前を入力として受け取り、(通常は、関連付けられているポート モニターの WritePort 関数と ReadPort 関数を呼び出して) その名前の値を取得し、その値を呼び出し元に返す必要があります。 ポート モニターの GetPrinterDataFromPort 関数は、入力として I/O 制御コードを受け取り、DeviceIoControl を呼び出してポート ドライバーに制御コードを渡し、結果を返す必要があります。