sunpongber

创建自签名证书并签名 INF

编写inf、gpd文件

1.生成测试证书 PowerShell

New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=MyPrinterTestCert" -CertStoreLocation "Cert:\CurrentUser\My"

2.导出 PFX 文件(含私钥)

在“证书管理器 (certmgr.msc)” → “个人 → 证书”中找到刚刚创建的证书 → 导出为:MyPrinterTestCert.pfx

受信任的根证书颁发机构certutil -store root MyPrinterTestCert

受信任的发布者certutil -store trustedpublisher MyPrinterTestCert

3.生成驱动目录签名文件(Developer Command Prompt for VS 2019

inf2cat /driver:. /os:10_X64

Inf2Cat /driver:. /os:10_X64,10_X86

重命名:ren myv3printer.cat MyV3Printer.cat

4.把 MyPrinterTestCert.pfxC:\Windows\System32复制到 C:\Visual_Studio_2019\MyV3PrinterDriver

5.使用证书签名

查看证书:certutil -viewstore MY

签名:signtool sign /f MyPrinterTestCert.pfx /p 123 /fd SHA256 /tr http://timestamp.digicert.com MyV3Printer.cat

如果网络不通或被墙,可直接用本地签名,不加时间戳

signtool sign /fd SHA256 /f MyPrinterTestCert.pfx /p 123 MyV3Printer.cat

signtool sign /fd SHA256 /f MyPrinterTestCert.cer /p 123 MyV3Printer.cat

signtool sign /fd SHA256 /f MyPrinterTestCert.pfx /p 123 oemui.dll

signtool sign /fd SHA256 /f MyPrinterTestCert.cer /p 123 oemui.dll

验证签名:signtool verify /v /pa MyV3Printer.cat

signtool verify /kp /v myv3printer.cat

6.安装pnputil /add-driver MyV3Printer.inf /install

7.查看驱动pnputil /enum-drivers

8.卸载pnputil /delete-driver oem11.inf /uninstall /force

9.添加到打印队列
rundll32 printui.dll,PrintUIEntry /if /b "Lithography printer" /f "C:\Visual_Studio_2019\MyV3PrinterDriver\MyV3Printer.inf" /r "FILE:" /m "My V3 Sample Printer"

rundll32 printui.dll,PrintUIEntry /if /b "My V3 Sample Printer" /f "C:\Visual_Studio_2019\MyV3PrinterDriver\MyV3Printer.inf" /r "FILE:" /m "My V3 Sample Printer"

LPT1 端口
rundll32 printui.dll,PrintUIEntry /if /b "My V3 Sample Printer LPT" ^ /f "C:\Visual_Studio_2019\MyV3PrinterDriver\MyV3Printer.inf" ^ /r "LPT1:" /m "My V3 Sample Printer"

COM1 串口
rundll32 printui.dll,PrintUIEntry /if /b "My V3 Sample Printer COM" ^ /f "C:\Visual_Studio_2019\MyV3PrinterDriver\MyV3Printer.inf" ^ /r "COM1:" /m "My V3 Sample Printer"

TCP/IP 9100(Raw 模式)端口
rundll32 printui.dll,PrintUIEntry /if /b "My V3 Sample Printer 9100" ^ /f "C:\Visual_Studio_2019\MyV3PrinterDriver\MyV3Printer.inf" ^ /r "IP_192.168.1.100" /m "My V3 Sample Printer"

FILE: 虚拟测试
rundll32 printui.dll,PrintUIEntry /if /b "My V3 Sample Printer FILE" ^ /f "C:\Visual_Studio_2019\MyV3PrinterDriver\MyV3Printer.inf" ^ /r "FILE:" /m "My V3 Sample Printer"

10.添加到打印队列会在设备管理器中显示,但卸载需要这个命令:printui.exe /s /t2

重启 Spooler 服务(可选但推荐)net stop spoolernet start spooler

11.查找系统中所有 UNIDRV.DLL 的实例,会看到多个版本的 UNIDRV.DLL 存在于 WinSxS 目录中:dir C:\Windows\WinSxS\*unidrv.dll /s /b

12.查看安装日志notepad %windir%\inf\setupapi.dev.log

13.查看打印机端口printmanagement.msc

14.多次安装/卸载驱动或手动清理打印组件后常见: “FILE:” 端口处于损坏或句柄锁死状态。

  1. 管理员powershell
    Add-PrinterPort -Name "MyFilePort:"
    cmd
    rundll32 printui.dll,PrintUIEntry /if /b "My V3 Sample Printer" ^ /f "C:\Visual_Studio_2019\MyV3PrinterDriver\MyV3Printer.inf" ^ /r "MyFilePort:" /m "My V3 Sample Printer"
  2. cmd
    net stop spooler
    reg delete "HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors\Local Port" /f
    net start spooler
    管理员powershell
    Add-PrinterPort -Name "FILE:"
    Get-PrinterPort | findstr FILE
    正常的输出:
    FILE: Local Monitor 遇到出错,进行以下操作:
    检查 Local Port DLL 是否存在:dir "C:\Windows\System32\localspl.dll"
    重新注册 Local Port Monitor:reg add "HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors\Local Port" /v "Driver" /t REG_SZ /d "localspl.dll" /f
  3. 重建整个打印子系统
    cmd
    dism /online /enable-feature /featurename:"Printing-PrintToFileServices-Features" /all

15.确认 oemui.dll 是一个真正的、可加载的 DLLdumpbin /headers oemui.dll
确认DLL导出函数dumpbin /exports oemui.dll

16.检查DLL能否独立加载rundll32 .\oemui.dll,OEMGetInfo

17.查看 Driver Store:C:\Windows\System32\DriverStore\FileRepository\

18.验证catinf2cat /list myv3printer.cat

19.oemui.dll 签名signtool verify /v "C:\Visual_Studio_2019\MyV3PrinterDriver\oemui.dll"

20.cat 签名? signtool verify /pa myv3printer.cat

21.最近的错误条目(时间、事件 ID、faulting module)
wevtutil qe Microsoft-Windows-PrintService/Admin /f:text /c:20
wevtutil qe System /f:text /c:20 | findstr /i spool

22.regedit验证
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers\My V3 Sample Printer\PrinterDriverData

23.ttfsub.gpd
C:\Windows\System32\spool\drivers\x64\PCC\

24.GhostPCL (gpcl6win64.exe)渲染prn为pdf
"C:\ghostpcl-10.05.1-win64\gpcl6win64.exe" -r600 -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="C:\test\1.pdf" "C:\test\1.prn"