1. An application calls the Spooler API to print.
2. The Spooler checks its internal printer port table and determines that RDPDR.SYS is the handler for this request. The Spooler generates a CreateFile on the printer port.
3. KERNEL-mode RDPDR.SYS sends a Create IRP via Virtual Channel to the RDPDR.LIB module of the TS client. This IRP contains the device ID, device name, and other data.
4. The RDPDR.LIB module of the TS client calls OpenPrinter using the device ID on the printer.
5. The Spooler sends a Write IRP to RDPDR.SYS.
6. KERNEL-mode RDPDR.SYS sends a Write IRP via Virtual Channel to the RDPDR.LIB module of the TS client. This IRP contains the device ID, device name, and other data.
7-10. The RDPDR.LIB module of the TS client calls WritePrinter, using the device ID on the printer. Similar operations take place for the Close IRP from the Spooler.