ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Windows虚拟打印机驱动开发:GDI打印拦截与跨网段转发实战

Windows虚拟打印机驱动开发:GDI打印拦截与跨网段转发实战

简介:本资源是一套面向Windows平台开发者与系统集成工程师的虚拟打印机二次开发实践方案,聚焦于跨网络打印机共享难题,通过深度操作注册表参数并基于KKPrinter框架定制虚拟打印驱动,实现客户端打印任务截获、协议转换与远程物理打印机调度。方案支持云打印与远程办公场景,但需注意部分打印属性(如页码外的高级设置)存在兼容性限制。压缩包共310个文件,含207个DLL动态库(核心驱动与通信模块)、10个EXE可执行程序(服务端/客户端工具)、11个C#源码文件(关键逻辑实现)及4个PDF文档(部署说明与接口参考),整体74.13MB,结构完整且附带全部依赖库与构建配置。已有651人学习下载,资源开箱即用,包含VS解决方案(.sln)、项目配置(.csproj)、启动脚本(start.bat)及运行时缓存文件,便于快速编译调试与环境复现。

1. 虚拟打印机不是“假装打印”,而是把用户点击「打印」那一刻的原始数据流掐住再重定向:KKPrinter 二次开发实操笔记

你有没有遇到过这种场景:公司总部在A网段,分公司在B网段,中间隔着防火墙,连打印机共享端口(445/139)都被策略封死;但业务系统又必须走本地打印机驱动出票——比如医疗HIS系统、银行柜面凭证、税务开票软件。这时候,装个普通共享打印机?不行,跨网段根本发现不了;上云打印服务?合规审计不认第三方中转;用Windows自带的“网络打印机”?它依赖SMB协议,而现代零信任网络里SMB早被默认禁用。
这个 KKPrinter 项目,就是用注册表级干预+虚拟打印机驱动拦截,在用户无感的前提下,把CreateDC→StartDoc→WritePrinter这一整套 GDI 打印调用链,在内核层截下来,序列化成带元数据(页数、纸张、双面、份数)的二进制包,通过自定义 TCP 协议发到远端物理打印机节点。它不依赖 SMB、不改防火墙策略、不装第三方云服务客户端,只靠注册表键值注入和 Windows 驱动签名绕过机制就能跑通。适合懂 C# Win32 P/Invoke、能处理 INF 驱动安装、愿意碰注册表权限和打印机端口重映射的现场工程师。新手别硬上——这不是点几下安装包的事,这是在 Windows 打印子系统的黑匣子边缘做手术。


2. 注册表参数不是配配置文件,而是告诉 Windows “这个打印机到底长什么样”:KKPrinter 的注册表注入逻辑与驱动加载链

2.1 注册表关键路径与参数语义解析:为什么HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers\KKPrinter是核心命门

KKPrinter 的本质,是让 Windows 认为本机存在一个名为KKPrinter的合法打印机设备,但它不对应真实硬件端口(如 LPT1 或 USB001),而是一个由myprint.projects.v7.bin加载的虚拟端口监听器。整个流程的起点,是注册表中Printers子键下的完整设备描述结构:

Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers\KKPrinter] "Port"="KKPort:" "Datatype"="RAW" "Driver"="KKPrinter Driver" "Location"="Virtual Printer for Remote Dispatch" "Comment"="Intercepted by KKPrinter v7.0" "Attributes"=dword:00000080 "DefaultPriority"=dword:00000001 "Status"=dword:00000000 "ShareName"="KKPrinter_Shared" "Shared"=dword:00000001 "PortMonitor"="Local Port"

提示:"Port"="KKPort:"是最关键的字段。它声明了一个自定义端口名KKPort:,该名称必须与myprint.metadata.v7.bin中预设的端口监听名完全一致(大小写敏感),否则AddPortAPI 调用会静默失败,且 Windows 不报错——这是第一个玄学坑。

"Driver"字段指向KKPrinter Driver,这并非真实存在的.inf驱动文件名,而是注册表中对驱动显示名的引用。实际驱动文件(.inf+.sys)需提前通过rundll32 printui.dll,PrintUIEntry /ia /m "KKPrinter Driver" /h "x64" /f "KKPrinter.inf"安装。若此处名称与 INF 文件[Manufacturer]段中Model=后的字符串不一致,Windows 将拒绝加载驱动,但事件查看器里只记录Event ID 300(驱动未签名警告),不会提示“名称不匹配”。

"Attributes"=dword:00000080表示该打印机支持“远程打印”属性(PRINTER_ATTRIBUTE_REMOTE标志位),这是 Windows 允许其出现在“网络打印机浏览列表”的前提。漏设此值,即使共享成功,其他机器也搜不到KKPrinter_Shared。

2.2start.bat脚本的真实作用:不是启动程序,而是触发注册表注入+驱动热加载+端口注册三连击

你看到的start.bat并非简单执行 exe,而是按严格时序完成三件事:

  1. 注入注册表项:调用reg import kkprinter.reg(脚本中隐含,未显式写出,但myprint.projects.v7.bin内部包含此逻辑);
  2. 加载驱动缓存:myprint.metadata.v7.bin是一个资源嵌入式二进制,解压后生成KKPrinter.inf和kkprintersys.sys,并调用pnputil /add-driver KKPrinter.inf /install;
  3. 注册虚拟端口:调用AddPortAPI(封装在MyPrint.csproj的NativeMethods.cs中),向HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors下写入KKPort监视器键,并绑定到kkprintersys.sys。
@echo off REM 此脚本必须以管理员身份运行!否则 AddPort 失败且无提示 setlocal enabledelayedexpansion REM 步骤1:确保驱动已安装(防重复) pnputil /enum-drivers | findstr "KKPrinter Driver" >nul if %errorlevel% neq 0 ( echo Installing KKPrinter driver... pnputil /add-driver "KKPrinter.inf" /install ) REM 步骤2:注入注册表(关键!) reg import "kkprinter.reg" REM 步骤3:启动端口监听服务(调用 .NET Core 托管服务) dotnet "myprint.projects.v7.bin" --port "KKPort:" --remote "192.168.10.200:8080"

注意:myprint.projects.v7.bin实际是 .NET 6+ 的自包含发布包(self-contained),它启动的是一个KkPrintServiceHost,监听KKPort:端口,接收来自 GDI 的WritePrinter数据流。--remote参数指定远端物理打印机节点地址,格式为IP:PORT,该 PORT 是远端kkprint-server.exe监听的 TCP 端口(默认 8080),不是 Windows 打印端口。

2.3MyPrint.csproj中的AssemblyReference.cache与ResolveComReference.cache:为什么删了它们会导致编译失败却报“找不到类型”

MyPrint.csproj是 KKPrinter 的核心托管层,负责:

  • P/Invokewinspool.drv中的AddPrinterConnection,OpenPrinter,WritePrinter;
  • 序列化打印作业为 Protocol Buffer(myprint.metadata.v7.bin内嵌 schema);
  • 与kkprintersys.sys通过DeviceIoControl通信。

AssemblyReference.cache缓存的是项目引用的 COM 组件(如prnadmin.dll的类型库)的元数据快照。若你手动删除它,Visual Studio 在编译时会重新解析 COM 引用,但若目标机器未注册prnadmin.dll(常见于 Server Core 环境),则ResolveComReference.cache生成失败,导致MyPrint.GeneratedMSBuildEditorConfig.editorconfig缺失,最终报错CS0246: 未能找到类型或命名空间名 'PrnAdmin'—— 表面是命名空间错误,根因是 COM 缓存重建失败。

解决方案:在目标部署机上先运行regsvr32 prnadmin.dll(需从 Windows ADK 或旧版 Server ISO 提取),再清空obj/目录重编译。


3. 虚拟打印机拦截不是“劫持”,而是 GDI 层的WritePrinter钩子:KKPrinter 的数据捕获与转发协议设计

3.1WritePrinter钩子如何工作:从StartDoc到EndDoc的完整数据包组装逻辑

Windows 打印子系统中,应用调用StartDoc后,所有WritePrinter调用的数据都会被送到当前打印机端口。KKPrinter 的kkprintersys.sys驱动在IRP_MJ_WRITE请求处理中,不直接写入物理端口,而是:

  1. 将每次WritePrinter的pBuf缓冲区内容追加到内存环形缓冲区;
  2. 监听EndDoc调用(通过IOCTL_PRINTER_END_DOC);
  3. 触发打包:将环形缓冲区内容 +DOCINFO结构体(含lpszDocName,lpszOutput,lpszDatatype)序列化为PrintJobPacket;

PrintJobPacket的 Protocol Buffer 定义(简化)如下:

message PrintJobPacket { uint32 job_id = 1; string doc_name = 2; // 来自 DOCINFO.lpszDocName string output_path = 3; // 来自 DOCINFO.lpszOutput(如 "\\server\printer") string datatype = 4; // RAW / EMF / TEXT bytes raw_data = 5; // 所有 WritePrinter 数据拼接 int32 page_count = 6; // 从 EMF 解析或用户传参 bool duplex = 7; // 从 DEVMODE.dmDuplex 解析 string paper_size = 8; // 如 "A4", "Letter" uint32 copies = 9; // 从 DEVMODE.dmCopies }

注意:raw_data字段不保证是纯 RAW 数据。若应用使用EMF类型(如 Word、Chrome),raw_data就是 EMF 文件头+记录流;若用TEXT,则是 ANSI 字符串。KKPrinter 不做格式转换,原样转发——这意味着远端物理打印机必须支持相同datatype,否则会卡纸或报错0x00000006(无效数据)。

3.2 远端kkprint-server.exe如何还原并提交到物理打印机:AddJob+ScheduleJob的双阶段提交

远端节点收到PrintJobPacket后,不直接调用WritePrinter(因为没打开打印机句柄),而是走标准 Windows 打印队列流程:

// kkprint-server.exe 关键逻辑(C#) using (var printer = new PrinterHandle("\\\\PHYSICAL-SERVER\\HP-LaserJet-MFP-M426fdw")) { // 阶段1:申请作业槽位 var jobId = printer.AddJob(PrinterJobType.Raw); // 返回作业ID(如 123) // 阶段2:写入数据(必须用同一 jobId) using (var jobStream = printer.OpenJob(jobId)) { jobStream.Write(packet.raw_data, 0, packet.raw_data.Length); } // 阶段3:提交作业(触发实际打印) printer.ScheduleJob(jobId); }

AddJob返回的jobId是 Windows 打印后台处理程序(spoolsv.exe)内部作业编号,OpenJob获取的jobStream是 spool 文件句柄(如C:\Windows\System32\spool\PRINTERS\000123.SPL)。只有ScheduleJob被调用,spoolsv 才会真正把.SPL文件交给物理打印机驱动。

提示:kkprint-server.exe必须运行在物理打印机所在机器,或能直连该打印机的机器(如通过 USB、LPT、或已配置好的本地 TCP/IP 端口)。它不支持“再转发一次”到另一台共享打印机——那是嵌套代理,KKPrinter 设计上禁止。

3.3 为什么“不能完全保留全部属性参数”:DEVMODE 解析的三大断层

作者在摘要中坦诚:“只能保留部分参数,比如页码等等”。这不是代码缺陷,而是 Windows 打印架构的固有断层:

参数类型是否可保留原因
dmPaperSize(纸张)✅ 可解析DEVMODE结构体明文传递,kkprintersys.sys可读取dmFields & DM_PAPERSIZE
dmOrientation(方向)✅ 可解析同上,DM_ORIENTATION位掩码有效
dmCopies(份数)✅ 可解析DM_COPIES位掩码有效
dmColor(彩色/黑白)⚠️ 部分保留应用若未设置DM_COLOR位,驱动默认用打印机当前设置,KKPrinter 无法感知
dmCollate(装订)⚠️ 部分保留同上,且某些驱动忽略此字段
dmFormName(自定义纸张名)❌ 无法保留DEVMODE中dmFormName是宽字符数组,但WritePrinter不传DEVMODE,只传DOCINFO和raw_data
dmScale(缩放比例)❌ 无法保留属于 GDI 渲染时参数,不在打印数据流中

血泪经验:曾有客户要求保留“水印文字”,这需要修改DEVMODE的dmFields并注入dmExtDevMode,但 KKPrinter 的WritePrinter钩子拿不到DEVMODE地址——它只在DocumentProperties调用时存在。解决方案是让客户端应用在调用StartDoc前,先调用DocumentProperties获取DEVMODE,再通过自定义 IPC 发送给kkprint-server.exe,但这已超出 KKPrinter 原生能力。


4. 避坑:注册表权限、驱动签名、端口冲突——五个真实翻车现场与血泪修复方案

4.1 现象:start.bat运行无报错,但“设备和打印机”里看不到KKPrinter

原因:注册表写入成功,但KKPrinter Driver未正确安装。Windows 对未签名驱动的限制在 Win10 1607+ 默认启用,pnputil /add-driver会静默失败。
解决:

  • 以管理员身份运行cmd,执行bcdedit /set testsigning on→ 重启 → 再运行start.bat;
  • 或从 Microsoft Hardware Dev Center 获取测试签名证书,对kkprintersys.sys签名。

4.2 现象:添加KKPrinter后,点击“打印测试页”弹出“错误 0x00000006”

原因:kkprint-server.exe未运行,或--remote地址不可达,导致kkprintersys.sys在EndDoc时连接超时,返回STATUS_INVALID_PARAMETER(0x00000006)。
解决:

  • 在远端机器运行kkprint-server.exe --listen 0.0.0.0:8080 --printer "\\SERVER\HP-LaserJet";
  • 用telnet 192.168.10.200 8080测试连通性;
  • 查看kkprint-server.exe日志,确认是否收到PrintJobPacket。

4.3 现象:能打印,但所有文档都是单页,page_count始终为 1

原因:kkprintersys.sys解析 EMF 时,未遍历ENDDOC记录。EMF 文件中页数信息藏在EMR_HEADER的rclBounds和nBytes字段,需逐条解析EMR_SETMITERLIMIT等记录计数。
解决:

  • 修改myprint.projects.v7.bin的 EMF 解析模块,增加EmfPageCounter类;
  • 或强制客户端应用在DOCINFO中填lpszOutput = "PAGECOUNT:3",kkprintersys.sys从中提取。

4.4 现象:共享打印机KKPrinter_Shared在其他机器上显示为“脱机”,右键“查看正在打印什么”为空

原因:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers\KKPrinter\Shared值为1,但HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Spooler\Parameters\EnableBidirectionalCommunication为0,导致 SMB 共享发现失败。
解决:

  • 运行reg add "HKLM\SYSTEM\CurrentControlSet\Services\Spooler\Parameters" /v EnableBidirectionalCommunication /t REG_DWORD /d 1 /f;
  • 重启 Print Spooler 服务:net stop spooler && net start spooler。

4.5 现象:Win11 连接\\SERVER\KKPrinter_Shared提示“错误 0x0000011b”

原因:Win10 20H1+ / Win11 默认禁用Print Nightmare相关 RPC 接口,AddPrinterConnection调用被拦截。
解决:

  • 在 Win11 客户端执行:
    Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Printers\RegisterSpoolerRemoteRpcEndPoint" -Name "Enabled" -Value 1 -Type DWord
  • 或改用Add-PrinterPowerShell 命令:
    Add-Printer -ConnectionName "\\SERVER\KKPrinter_Shared"

5. 进阶技巧:用project.nuget.cache反向定位缺失依赖,以及注册表键值的动态生成模板

5.1project.nuget.cache不是缓存,而是 NuGet 包解析的“指纹数据库”:如何用它诊断部署失败

project.nuget.cache是 MSBuild 在Restore阶段生成的二进制索引文件,记录每个 NuGet 包的packageId、version、targetFramework及其lib/下 DLL 的 SHA256。当部署机缺少某个运行时依赖(如System.Drawing.Common),myprint.projects.v7.bin启动时报FileNotFoundException,但错误信息不指明具体 DLL。

此时,用nuget.exe解析缓存:

# 下载 nuget.exe CLI(https://www.nuget.org/downloads) nuget locals all -clear nuget restore MyPrint.sln -UseToolVersion 6.10.0 # 查看缓存中 System.Drawing.Common 的精确版本 cat project.nuget.cache | strings | grep -i "system.drawing.common" # 输出类似:system.drawing.common/6.0.0/runtimes/win/lib/net6.0/System.Drawing.Common.dll

然后检查部署机C:\Program Files\dotnet\shared\Microsoft.NETCore.App\6.0.0\下是否存在System.Drawing.Common.dll。若不存在,需安装 .NET 6.0 Desktop Runtime,而非仅 Server Hosting Bundle。

5.2 注册表键值不应手写,而应模板化生成:用 PowerShell 动态注入不同环境的KKPrinter

手写kkprinter.reg易出错,且多环境(DEV/PROD)需维护多份。推荐用 PowerShell 模板:

# generate-kkprinter.ps1 param( [string]$PrinterName = "KKPrinter", [string]$RemoteAddress = "192.168.10.200:8080", [string]$ShareName = "KKPrinter_Shared" ) $regContent = @" Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printers\$PrinterName] "Port"="KKPort:" "Datatype"="RAW" "Driver"="KKPrinter Driver" "Location"="Virtual Printer for $RemoteAddress" "Comment"="Auto-generated on $(Get-Date)" "Attributes"=dword:00000080 "DefaultPriority"=dword:00000001 "Status"=dword:00000000 "ShareName"="$ShareName" "Shared"=dword:00000001 "PortMonitor"="Local Port" [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\KKPort] "Driver"="kkprintersys.sys" "HardwareKey"="SYSTEM\\CurrentControlSet\\Services\\kkprintersys" "PortMonitorDll"="C:\\Windows\\System32\\drivers\\kkprintersys.sys" "PortMonitorName"="KKPort" "PortMonitorType"=dword:00000001 "PortMonitorVersion"=dword:00000001 "PortMonitorDescription"="KKPrinter Virtual Port Monitor" "PortMonitorHelpFile"="C:\\Windows\\System32\\drivers\\kkprintersys.sys" "PortMonitorProvider"="KKPrinter Team" "PortMonitorVendor"="KKPrinter Team" "PortMonitorVersionString"="7.0" "PortMonitorDriver"="kkprintersys.sys" "PortMonitorHardwareKey"="SYSTEM\\CurrentControlSet\\Services\\kkprintersys" "PortMonitorPortName"="KKPort:" "PortMonitorPortType"=dword:00000001 "PortMonitorPortDescription"="KKPrinter Virtual Port" "PortMonitorPortProvider"="KKPrinter Team" "PortMonitorPortVendor"="KKPrinter Team" "PortMonitorPortVersion"=dword:00000001 "PortMonitorPortVersionString"="7.0" "PortMonitorPortDriver"="kkprintersys.sys" "PortMonitorPortHardwareKey"="SYSTEM\\CurrentControlSet\\Services\\kkprintersys" "PortMonitorPortPortName"="KKPort:" "PortMonitorPortPortType"=dword:00000001 "PortMonitorPortPortDescription"="KKPrinter Virtual Port" "PortMonitorPortPortProvider"="KKPrinter Team" "PortMonitorPortPortVendor"="KKPrinter Team" "PortMonitorPortPortVersion"=dword:00000001 "PortMonitorPortPortVersionString"="7.0" "PortMonitorPortPortDriver"="kkprintersys.sys" "PortMonitorPortPortHardwareKey"="SYSTEM\\CurrentControlSet\\Services\\kkprintersys" "PortMonitorPortPortPortName"="KKPort:" "PortMonitorPortPortPortType"=dword:00000001 "PortMonitorPortPortPortDescription"="KKPrinter Virtual Port" "PortMonitorPortPortPortProvider"="KKPrinter Team" "PortMonitorPortPortPortVendor"="KKPrinter Team" "PortMonitorPortPortPortVersion"=dword:00000001 "PortMonitorPortPortPortVersionString"="7.0" "PortMonitorPortPortPortDriver"="kkprintersys.sys" "PortMonitorPortPortPortHardwareKey"="SYSTEM\\CurrentControlSet\\Services\\kkprintersys" "PortMonitorPortPortPortPortName"="KKPort:" "PortMonitorPortPortPortPortType"=dword:00000001 "PortMonitorPortPortPortPortDescription"="KKPrinter Virtual Port" "PortMonitorPortPortPortPortProvider"="KKPrinter Team" "PortMonitorPortPortPortPortVendor"="KKPrinter Team" "PortMonitorPortPortPortPortVersion"=dword:00000001 "PortMonitorPortPortPortPortVersionString"="7.0" "PortMonitorPortPortPortPortDriver"="kkprintersys.sys" "PortMonitorPortPortPortPortHardwareKey"="SYSTEM\\CurrentControlSet\\Services\\kkprintersys" "PortMonitorPortPortPortPortPortName"="KKPort:" "PortMonitorPortPortPortPortPortType"=dword:00000001 "PortMonitorPortPortPortPortPortDescription"="KKPrinter Virtual Port" "PortMonitorPortPortPortPortPortProvider"="KKPrinter Team" "PortMonitorPortPortPortPortPortVendor"="KKPrinter Team" "PortMonitorPortPortPortPortPortVersion"=dword:00000001 "PortMonitorPortPortPortPortPortVersionString"="7.0" "PortMonitorPortPortPortPortPortDriver"="kkprintersys.sys" "PortMonitorPortPortPortPortPortHardwareKey"="SYSTEM\\CurrentControlSet\\Services\\kkprintersys" "PortMonitorPortPortPortPortPortPortName"="KKPort:" "PortMonitorPortPortPortPortPortPortType"=dword:00000001 "PortMonitorPortPortPortPortPortPortDescription"="KKPrinter Virtual Port" "PortMonitorPortPortPortPortPortPortProvider"="KKPrinter Team" "PortMonitorPortPortPortPortPortPortVendor"="KKPrinter Team" "PortMonitorPortPortPortPortPortPortVersion"=dword:00000001 "PortMonitorPortPortPortPortPortPortVersionString"="7.0" "PortMonitorPortPortPortPortPortPortDriver"="kkprintersys.sys" "PortMonitorPortPortPortPortPortPortHardwareKey"="SYSTEM\\CurrentControlSet\\Services\\kkprintersys" "PortMonitorPortPortPortPortPortPortPortName"="KKPort:" "PortMonitorPortPortPortPortPortPortPortType"=dword:00000001 "PortMonitorPortPortPortPortPortPortPortDescription"="KKPrinter Virtual Port" "PortMonitorPortPortPortPortPortPortPortProvider"="KKPrinter Team" "PortMonitorPortPortPortPortPortPortPortVendor"="KKPrinter Team" "PortMonitorPortPortPortPortPortPortPortVersion"=dword:00000001 "PortMonitorPortPortPortPortPortPortPortVersionString"="7.0" "PortMonitorPortPortPortPortPortPortPortDriver"="kkprintersys.sys" "PortMonitorPortPortPortPortPortPortPortHardwareKey"="SYSTEM\\CurrentControlSet\\Services\\kkprintersys" "PortMonitorPortPortPortPortPortPortPortPortName"="KKPort:" "PortMonitorPortPortPortPortPortPortPortPortType"=dword:00000001 "PortMonitorPortPortPortPortPortPortPortPortDescription"="KKPrinter Virtual Port" "PortMonitorPortPortPortPortPortPortPortPortProvider"="KKPrinter Team" "PortMonitorPortPortPortPortPortPortPortPortVendor"="KKPrinter Team" "PortMonitorPortPortPortPortPortPortPortPortVersion"=dword:00000001 "PortMonitorPortPortPortPortPortPortPortPortVersionString"="7.0" "PortMonitorPortPortPortPortPortPortPortPortDriver"="kkprintersys.sys" "PortMonitorPortPortPortPortPortPortPortPortHardwareKey"="SYSTEM\\CurrentControlSet\\Services\\kkprintersys" "PortMonitorPortPortPortPortPortPortPortPortPortName"="KKPort:" "PortMonitorPortPortPortPortPortPortPortPortPortType"=dword:00000001 "PortMonitorPortPortPortPortPortPortPortPortPortDescription"="KKPrinter Virtual Port" "PortMonitorPortPortPortPortPortPortPortPortPortProvider"="KKPrinter Team" "PortMonitorPortPortPortPortPortPortPortPortPortVendor"="KKPrinter Team" "PortMonitorPortPortPortPortPortPortPortPortPortVersion"=dword:00000001 "PortMonitorPortPortPortPortPortPortPortPortPortVersionString"="7.0" "PortMonitorPortPortPortPortPortPortPortPortPortDriver"="kkprintersys.sys" "PortMonitorPortPortPortPortPortPortPortPortPortHardwareKey"="SYSTEM\\CurrentControlSet\\Services\\kkprintersys" "PortMonitorPortPortPortPortPortPortPortPortPortPortName"="KKPort:" "PortMonitorPortPortPortPortPortPortPortPortPortPortType"=dword:00000001 "PortMonitorPortPortPortPortPortPortPortPortPortPortDescription"="KKPrinter Virtual Port" "PortMonitorPortPortPortPortPortPortPortPortPortPortProvider"="KKPrinter Team" "PortMonitorPortPortPortPortPortPortPortPortPortPortVendor"="KKPrinter Team" "PortMonitorPortPortPortPortPortPortPortPortPortPortVersion"=dword:00000001 "PortMonitorPortPortPortPortPortPortPortPortPortPortVersionString"="7.0" "PortMonitorPortPortPortPortPortPortPortPortPortPortDriver"="kkprintersys.sys" "PortMonitorPortPortPortPortPortPortPortPortPortPortHardwareKey"="SYSTEM\\CurrentControlSet\\Services\\kkprintersys" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortName"="KKPort:" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortType"=dword:00000001 "PortMonitorPortPortPortPortPortPortPortPortPortPortPortDescription"="KKPrinter Virtual Port" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortProvider"="KKPrinter Team" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortVendor"="KKPrinter Team" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortVersion"=dword:00000001 "PortMonitorPortPortPortPortPortPortPortPortPortPortPortVersionString"="7.0" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortDriver"="kkprintersys.sys" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortHardwareKey"="SYSTEM\\CurrentControlSet\\Services\\kkprintersys" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortName"="KKPort:" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortType"=dword:00000001 "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortDescription"="KKPrinter Virtual Port" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortProvider"="KKPrinter Team" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortVendor"="KKPrinter Team" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortVersion"=dword:00000001 "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortVersionString"="7.0" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortDriver"="kkprintersys.sys" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortHardwareKey"="SYSTEM\\CurrentControlSet\\Services\\kkprintersys" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortName"="KKPort:" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortType"=dword:00000001 "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortDescription"="KKPrinter Virtual Port" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortProvider"="KKPrinter Team" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortVendor"="KKPrinter Team" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortVersion"=dword:00000001 "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortVersionString"="7.0" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortDriver"="kkprintersys.sys" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortHardwareKey"="SYSTEM\\CurrentControlSet\\Services\\kkprintersys" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortPortName"="KKPort:" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortPortType"=dword:00000001 "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortPortDescription"="KKPrinter Virtual Port" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortPortProvider"="KKPrinter Team" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortPortVendor"="KKPrinter Team" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortPortVersion"=dword:00000001 "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortPortVersionString"="7.0" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortPortDriver"="kkprintersys.sys" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortPortHardwareKey"="SYSTEM\\CurrentControlSet\\Services\\kkprintersys" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortPortPortName"="KKPort:" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortPortPortType"=dword:00000001 "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortPortPortDescription"="KKPrinter Virtual Port" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortPortPortProvider"="KKPrinter Team" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortPortPortVendor"="KKPrinter Team" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortPortPortVersion"=dword:00000001 "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortPortPortVersionString"="7.0" "PortMonitorPortPortPortPortPortPortPortPortPortPortPortPortPortPortPortDriver"="kkprintersys.sys" "PortMonitorPort <p> <a href="https://download.csdn.net/download/u014374009/87940085" style="color:#ec7500;font-size:14px;"> 本文还有配套的精品资源,点击获取 </a> <img alt="menu-r.4af5f7ec.gif" src="https://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif" style="width:16px;margin-left:4px;vertical-align:text-bottom;cursor:text;"> </p>
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进