Skip to content

Windows 打印机初识

Windows 打印架构

Windows 打印架构是:

应用程序

WinSpool.dll

Spooler(排队)

Port Monitor

链路:物理/网络路径
协议:RAW9100、IPP、LPR等PrintProtocol

Printer

连接方式

  • 物理连接
USB 或 LPT 连接打印机
  • 网络连接
TCP/IP打印机     -> 连接方式
	电脑 → TCP/IP → 打印机
	通过 PowerShell 命令 Get-PrinterPort 可以得到端口: IP_192.168.1.100
	优点:稳定、快速、企业标准
	缺点:需要知道IP后,手动添加,不能自动发现
  • 共享连接
共享打印机        -> 连接方式
	打印机 → 电脑A → SMB共享 → 电脑B
	特点:最老的方案,打印机实际上连在另一台电脑上
	例如,有:
		HP打印机 
		   ↓ USB
		财务电脑
	然后共享:\\Finance-PC\HPPrinter 其他人连接:\\Finance-PC\HPPrinter 即可打印

理解 SMB 和 LocalSpool

✔ SMB 是“把打印任务交给别的电脑”
✔ LocalSpool 是“本机怎么处理打印任务”
  • 场景1:USB 打印机(LocalSpool)

    • 你电脑直接插了一台打印机: PC ─── USB ─── Printer
    • 你点“打印”后: Word → Windows Spooler(Windows本地排队(Spool)管理) → USB001 → 打印机
  • 场景2:共享打印机

    • 你的电脑 → \\PrintServer\HP_LaserJet → 打印服务器电脑 → 真实打印机
    • 打印流程是: Word → Windows Spooler → SMB(网络传输)→ 打印服务器 → 服务器 Spooler → USB/TCPIP 打印机

发现方式

通过物理连接 或 共享连接 的方式连接的打印机,不需要特别的发现方式,直接连接即可。

这里主要针对网络打印机。先看下图:

                      电脑

        ┌──────────────┼──────────────┐
        │              │              │
     TCP/IP          WSD           Bonjour
        │              │              │
        ▼              ▼              ▼
      9100         IPP/HTTP          IPP
        │              │              │
        └──────────────┬──────────────┘

                     打印机

----------------------------------------------------------

port:9100(TCP) —— RAW打印(JetDirect)
port:631 —— IPP打印(Internet Printing Protocol, 现代标准)
port:80 —— Web管理接口 —— HTTP Web UI
port:443 —— IPPS(加密IPP) —— HTTPS + IPP

WSD打印机

WSD打印机        -> 自动发现方式 + 连接方式
	Windows自动发现打印机,全称:Web Services for Devices
	本质是:是微软推动的一套设备服务框架
	包含:
		WS-Discovery     设备发现
		WS-Metadata      获取设备信息
		WS-Eventing      状态通知
		WS-Print         打印服务
	工作过程:
		打印机广播(UDP 3702 multicast):"我在这里" → Windows发现 → 自动安装 → 创建打印机 
	用户体验:
		打开:设置 → 添加打印机,自动出现:
			HP LaserJet
			Canon MF440
			Brother MFC
		等已经发现的打印机列表
	端口:WSD-12345678

Bonjour打印机

Bonjour打印机    -> 自动发现方式
	Apple的自动发现机制,也就是说常见的自动发现协议:WSD(微软)、Bonjour(苹果)
	本质是:设备发现协议
	工作原理:
		打印机广播(mDNS UDP 5353):_ipp._tcp.local、 _airprint._tcp.local
		电脑或手机监听: UDP 5353
	用户体验
		iPhone打开:打印
		自动看到:
			Canon TS8300
			Brother MFC
			HP M404
		等已经发现的打印机列表

AirPrint打印机

AirPrint打印机   -> 苹果打印标准
	很多人把它和Bonjour混为一谈。实际上:Bonjour ≠ AirPrint
	AirPrint是一整套规范。负责: 发现 + 打印 + 认证 + 格式支持
	工作流程:
		iPhone → Bonjour发现 → 获得打印机 → IPP → 发送PDF → 打印机

设备发现实现

  • PrinterEngine Discovery
┌─────────────────────────────────┐
│ 1. WSD监听(Windows必备)         │
│ 2. mDNS监听(Bonjour/AirPrint)  │
│ 3. SNMP扫描(企业标准             │
│ 4. TCP扫描(9100/631/80/443)    │
│ 5. USB枚举(USB打印机)           │
│ 6. SMB枚举(共享打印机)           │
└─────────────────────────────────┘

           统一设备模型

        PrinterManager API

Windows 下 Printer&&Usb 相关 注册表及文件路径

  • 基础信息
HKLM
 └─System
    └─CurrentControlSet
       └─Control
       │  └─Print : Printer Object
       │      └─Printers : 打印机
       │      └─Monitors : 端口
       └─Enum
           └─USB
              └─VID_xxxx&PID_xxxx
                  └─ xxxx : Usb设备信息
                            Service = usbprint
  • 打印机驱动文件目录:
C:\Windows\System32\spool\drivers\[os-version]

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Environments\[os-version]\Drivers\

Windows 下打印机安装

安装打印机 = 驱动安装 + 端口创建 + 打印队列创建 + 打印机注册

安装的关键流程:

SetupVerifyInfFileW
SetupCopyOEMInfW
// 触发设备匹配
UpdateDriverForPlugAndPlayDevicesW or DiInstallDriverW
   系统自动:
		Device ID

		INF match

		Driver install

		Driver Store instance

		Enum\Device\Driver 绑定
// 设备生效
	Device Manager 更新
	Driver loaded
	Kernel driver attach

Windows 下打印关键 API 节点

  1. 如果你要做“完整卸载”,正确顺序是:

    1. 解绑 Printer / Device
    2. 停止 Print Spooler(必要时)
    3. 删除 Printer Driver (Spooler API)
    4. SetupUninstallOEMInfW
    5. 清理 Driver Store residual
  2. 打印机对象(Spooler) EnumPrinters、OpenPrinter 说明: 打印机已经注册到Windows,Spooler可以访问

    EnumPrinters(...) 是在问:
        Spooler,请把你管理的 Printer Object 列出来
    OpenPrinter(...) 打开的是:Printer Object 实例句柄
  3. 打印驱动(Driver)

    说明: 
       GetPrinterDriver 验证:驱动注册
       DocumentProperties 验证:驱动配置模块(纸张设置、	双面设置、颜色设置 等)
       CreateDC 验证:驱动渲染模块
       CreateDC 是驱动是否真正可用,最有价值的检查之一。

Windows 驱动分类

涉及 Windows 的三种完全不同的驱动体系:

                Windows Driver


     ┌────────────────┼────────────────┐
     │                │                │

     ▼                ▼                ▼

 PnP Driver      Filter Driver    Printer Driver

 USB             Upper Filter     V3 Driver
 PCI             Lower Filter     V4 Driver
 HID             File System      Print Driver
 NET             Class Filter
  • PnP Driver (即插即用) 即:USB、PCI、HID、NET等,Windows 设备驱动,用于管理硬件连接
  • Filter Driver 用于拦截、修改、增强或替换打印数据流,如加密、水印、审计等
  • Printer Driver 用于处理打印机渲染和通信的专用驱动,包括 V3、V4 驱动和通用打印驱动

常用的 powershell 命令

Test-NetConnection 192.168.0.105 -Port 80
Get-Printer -Name "Test Mi Printer" | fl *
Get-PrintJob -PrinterName "Test Mi Printer" | fl *
Restart-Service Spooler
  • Get-Printer 和 Get-PrinterPort 只能看到: ✔ 已安装到 Windows 的打印机 ✔ 已创建端口的打印机 ✔ 已走 Print Spooler 的打印机