无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 11454|回复: 49
打印 上一主题 下一主题

[分享] 关于Win10的打印组件

    [复制链接]
跳转到指定楼层
#
发表于 2019-6-9 18:31:40 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 hhh333 于 2019-7-14 17:56 编辑

一、 注册表
1、控制及类
pe-sys\ControlSet001\Control\Print
pe-sys\ControlSet001\Control\Class\{1ed2bbf9-11f0-4084-b21f-ad83a8e6dcdc}
pe-sys\ControlSet001\Control\Class\{4658ee7e-f050-11d1-b6bd-00c04fa372a7}
pe-sys\ControlSet001\Control\Class\{49ce6ac8-6f86-11d2-b1e5-0080c72e74a2}
pe-sys\ControlSet001\Control\Class\{4d36e979-e325-11ce-bfc1-08002be10318}
pe-sys\ControlSet001\Control\Class\{c30ecea0-11ef-4ef9-b02e-6af81e6e65c0}
pe-sys\ControlSet001\Control\Class\{c7bc9b22-21f0-4f0d-9bb6-66c229b8cd33}
2、服务
pe-sys\ControlSet001\Services\Spooler
pe-sys\ControlSet001\Services\usbprint(注意,如果组件外置,这一项不要,系统注册表中有的话也要删除)
3、usbprint.inf安装包数据库记录(这一步不是必须)
用RegWorkshop在pe-sys\DriverDatabase位置查找usbprint.inf再导出备用

以上三项均从INSTALL.WIM的SYSTEM中提取。
二、 文件列表
可以分成三部分
1、 设备与打印机
Windows
│  splwow64.exe
│  
├─inf
│      c_pnpprinters.inf
│      c_printer.inf
│      PrintQueue.inf
│      printupg.inf
│      usbprint.inf
│      
├─PrintDialog(注:整个目录,但似乎没什么用)
│         
└─System32
    │  AppMon.dll
    │  bidispl.dll
    │  compstui.dll
    │  DafPrintProvider.dll
    │  defaultdevicemanager.dll
    │  defaultprinterprovider.dll
    │  DevDispItemProvider.dll
    │  DeveloperOptionsSettingsHandlers.dll
    │  deviceassociation.dll
    │  DeviceCenter.dll
    │  DeviceDisplayStatusManager.dll
    │  DeviceDriverRetrievalClient.dll
    │  DeviceEject.exe
    │  DeviceElementSource.dll
    │  DeviceEnroller.exe
    │  DeviceMetadataRetrievalClient.dll
    │  DevicePairing.dll
    │  DevicePairingFolder.dll
    │  DevicePairingProxy.dll
    │  DevicePairingWizard.exe
    │  deviceregistration.dll
    │  DeviceSetupManager.dll
    │  DeviceSetupManagerAPI.dll
    │  DeviceSetupStatusProvider.dll
    │  DevicesFlowBroker.dll
    │  DeviceUxRes.dll
    │  devinv.dll
    │  DevPropMgr.dll
    │  DevQueryBroker.dll
    │  efswrt.dll
    │  FaxPrinterInstaller.dll
    │  FdDevQuery.dll
    │  fdPnp.dll
    │  fdprint.dll
    │  fdWNet.dll
    │  fdWSD.dll
    │  findnetprinters.dll
    │  fundisc.dll
    │  fxsapi.dll
    │  FXSMON.dll
    │  FXSRESM.dll
    │  gpprnext.dll
    │  hgprint.dll
    │  icm32.dll
    │  icmui.dll
    │  inetpp.dll
    │  inetppui.dll
    │  IPPMon.dll
    │  localspl.dll
    │  localui.dll
    │  mgmtapi.dll
    │  newdev.exe
    │  ntprint.dll
    │  ntprint.exe
    │  OpcServices.dll
    │  pcl.sep
    │  print.exe
    │  PrintBrmUi.exe
    │  PrintDialogHost.exe
    │  PrintDialogs.dll
    │  printfilterpipelineprxy.dll
    │  printfilterpipelinesvc.exe
    │  PrintIsolationHost.exe
    │  PrintIsolationProxy.dll
    │  printmanagement.msc
    │  PrintPlatformConfig.dll
    │  PrintRenderAPIHost.DLL
    │  printui.dll
    │  printui.exe
    │  PrintWSDAHost.dll
    │  prncache.dll
    │  prnfldr.dll
    │  prnntfy.dll
    │  prntvpt.dll
    │  pscript.sep
    │  puiapi.dll
    │  puiobj.dll
    │  rasadhlp.dll
    │  RepCurUser.cmd
    │  ReSpooler.cmd
    │  serialui.dll
    │  spoolss.dll
    │  spoolsv.exe
    │  srclient.dll
    │  srcore.dll
    │  sysprint.sep
    │  sysprtj.sep
    │  tcpmon.ini
    │  umb.dll
    │  usbmon.dll
    │  webservices.dll
    │  win32spl.dll
    │  Windows.Devices.Printers.dll
    │  Windows.Devices.Printers.Extensions.dll
    │  Windows.Graphics.dll
    │  Windows.Graphics.Printing.3D.dll
    │  Windows.Graphics.Printing.dll
    │  Windows.Internal.Shell.Broker.dll
    │  WLIDNSP.DLL
    │  WlS0WndH.dll
    │  WSDApi.dll
    │  WSDMon.dll(1903没有了)
    │  wsdprintproxy.dll
    │  WSDScanProxy.dll
    │  XpsDocumentTargetPrint.dll
    │  XpsFilt.dll
    │  XpsGdiConverter.dll
    │  XpsPrint.dll
    │  XpsRasterService.dll
    │  XPSServiceS.DLL
    │  XPSSHHDR.dll
    │  xwizard.exe
    │  xwizards.dll
    │  xwtpdui.dll
    │  xwtpw32.dll
    │  
    ├─CatRoot
    │  └─{F750E6C3-38EE-11D1-85E5-00C04FC295EE}(注:含Print字符的cat文件,其中~zh-cn类型的都可以不要)
    │         
    ├─drivers
    │      usbprint.sys
    │      
    ├─driverstore
    │  ├─en-US
    │  │      c_dot4print.inf_loc
    │  │      c_pnpprinters.inf_loc
    │  │      c_printer.inf_loc
    │  │      c_receiptprinter.inf_loc
    │  │      
    │  ├─FileRepository
    │  │  ├─c_dot4print.inf_x86_3a482d7106e67af5
    │  │  │      c_dot4print.inf
    │  │  │      
    │  │  ├─c_pnpprinters.inf_x86_332e93a45a3e656a
    │  │  │      c_pnpprinters.inf
    │  │  │      
    │  │  ├─c_printer.inf_x86_e6ba9e11e6380557
    │  │  │      c_printer.inf
    │  │  │      
    │  │  ├─c_receiptprinter.inf_x86_f0322e57fec0dc81
    │  │  │      c_receiptprinter.inf
    │  │  │      
    │  │  ├─printqueue.inf_x86_5599cddb064d37cf
    │  │  │      printqueue.inf
    │  │  │      
    │  │  └─usbprint.inf_x86_08d44a3fd742371d
    │  │          usbprint.inf
    │  │          usbprint.sys
    │  │         
    │  └─zh-CN
    │          bthprint.inf_loc
    │          PrintQueue.inf_loc
    │          usbprint.inf_loc
    │         
    ├─spool(整个目录)
    │              
    └─zh-CN(下面对应的文件)

2、 基本驱动
Windows
├─INF
│      ntprint.inf
│      ntprint4.inf
│      tsprint.inf
│      wsdprint.inf
│      
└─System32
    ├─catroot
    │  └─{F750E6C3-38EE-11D1-85E5-00C04FC295EE}
    │          ntprint.cat
    │          ntprint4.cat
    │         
    └─DriverStore
        ├─en-US
        │      ntprint4.inf_loc
        ├─FileRepository
        │  ├─ntprint.inf_x86_ab738c05d09b470b
        │  ├─ntprint4.inf_x86_9d6305e59342bba1
        │  ├─tsprint.inf_x86_af7e87be969e4e2c
        │  └─wsdprint.inf_x86_69b253d182b5dd8c
        └─zh-CN
                ntprint.inf_loc
                tsprint.inf_loc
                WSDPrint.inf_loc
3、 系统集成驱动
Windows
└─System32
    ├─CatRoot
  │  └─{F750E6C3-38EE-11D1-85E5-00C04FC295EE}中PRN开头的数据
      └─DriverStore
          └─FileRepository下以PRN开头的目录

三、 处理
1、 注册表导入
把上述三项注册表导入PE的system中。
2、 spoolsv.exe的破解
因为HKEY_LOCAL_MACHINE\SYSTEM\Setup\SystemSetupInProgress=0打印才能开启,但影响装显卡等其他驱动。用二进制编辑器打开spoolsv.exe,搜索Unicode编码SystemSetupInProgress,这个串随便改动其中的任何一个字母就行。(18362似乎找不到也不需要破解)
也可以用PECMD的命令PUTF %Windir%\System32\spoolsv.exe,0x2D0C,0x54来修改的一个字母,其中偏移位置先找出来。
3、 安装的核心命令:
解压上述文件到系统中
ntprint.exe
net start spooler
PnPutil.exe -i -a "%Windir%\inf\usbprint.inf”
注意,如果数据库中没登记,可以直接PECMD脚本安装:FORX @%Windir%\System32\DriverStore\FileRepository\usbprint.inf*,inf,1,exec =*drvload.exe "%inf%\usbprint.inf"


如果你的打印机系统中已经集成,则可以直接使用了,如果没有可以自备驱动到设备管理中安装,或者可以安装网络共享的打印机,因为组件已经安装好了。
以上文件列表及方法以16299为蓝本。近期看18362去掉了好多系统自带驱动,如我的HPM1005一体机就没有自带驱动了。

评分

参与人数 7无忧币 +40 收起 理由
zhczf + 5 很给力!
whyme22 + 10
WAIGO + 5 真厉害,非常值得参考!
freesoft00 + 5
9zhmke + 5 佩服!这得花上多少时间啊
立帮电子 + 5 很给力!
danmo + 5 很给力!

查看全部评分

39#
发表于 2023-12-7 08:55:55 | 只看该作者
你好,帮发一份Win7的打印组件包或文件列表,谢谢。
回复

使用道具 举报

38#
发表于 2021-7-6 16:54:16 | 只看该作者
网络打印机可以用
回复

使用道具 举报

37#
发表于 2021-1-30 13:50:28 来自手机 | 只看该作者
支持一下
回复

使用道具 举报

36#
发表于 2021-1-22 19:20:41 | 只看该作者
终于找到了。试试自己添加一下打印功能。
回复

使用道具 举报

35#
 楼主| 发表于 2019-12-1 08:49:59 | 只看该作者
hhh333 发表于 2019-11-30 23:43
跌坑里那么久也不提个醒,我今天搞了半天才发现。

今天刚好在PE中弄那个摄像头,领导要打印前 ...

呵呵,暗门啊
回复

使用道具 举报

34#
 楼主| 发表于 2019-11-30 23:43:16 | 只看该作者
本帖最后由 hhh333 于 2019-11-30 23:50 编辑
hhh333 发表于 2019-11-30 16:32
经测试,并不是记事本不能打印,而是新的记事本可能默认使用雅黑字体,所以打印时出现参数错误。同时使用w ...

跌坑里那么久也不提个醒,我今天搞了半天才发现。

今天刚好在PE中弄那个摄像头,领导要打印前两天的一个文档,直接在PE中打印,打印机不提示也不动,再发空白文档,打印机可以打,再输几个字也可以打。至此怀疑是字体的问题,马上打开原文件,使用的是等线体,全选改宋体就可以打印。又把内核换原版字体,再试记事本也可以打了。

点评

呵呵,暗门啊  详情 回复 发表于 2019-12-1 08:49
我的脚本里面有,打印组件有效时,禁用精简字体啊。  发表于 2019-12-1 01:09
回复

使用道具 举报

33#
 楼主| 发表于 2019-11-30 23:32:28 | 只看该作者
hhh333 发表于 2019-11-30 23:23
干脆不精简了,两个完整文件打包成WIM后多15M而已

肯定不行吧?字体文件是系统的核心,一般会保护的。
回复

使用道具 举报

32#
 楼主| 发表于 2019-11-30 23:23:09 | 只看该作者
hhh333 发表于 2019-11-30 16:32
经测试,并不是记事本不能打印,而是新的记事本可能默认使用雅黑字体,所以打印时出现参数错误。同时使用w ...

干脆不精简了,两个完整文件打包成WIM后多15M而已

点评

肯定不行吧?字体文件是系统的核心,一般会保护的。  详情 回复 发表于 2019-11-30 23:32
不内置,放外置打印机组件里,启动打印机的时候覆盖替换成完整版字体,这样行不?  发表于 2019-11-30 23:24
回复

使用道具 举报

31#
 楼主| 发表于 2019-11-30 16:32:11 | 只看该作者
经测试,并不是记事本不能打印,而是新的记事本可能默认使用雅黑字体,所以打印时出现参数错误。同时使用word有的文件也不能打印,发现也是用了非宋体。这些都是使用精简字体引起。

点评

跌坑里那么久也不提个醒,我今天搞了半天才发现。  详情 回复 发表于 2019-11-30 23:43
恩,打印功能不能使用精简字体。为了快速测试,30秒一次,我也勾选了【精简字体】,这里当时坑了我好久。。。  发表于 2019-11-30 23:33
干脆不精简了,两个完整文件打包成WIM后多15M而已  详情 回复 发表于 2019-11-30 23:23
我不会精简字体,你有没有试过用当前PE版本对应的系统里完整的雅黑精简呢?  发表于 2019-11-30 22:52
厉害,这下知道问题了。  发表于 2019-11-30 16:33
回复

使用道具 举报

30#
发表于 2019-11-9 11:43:22 来自手机 | 只看该作者
hhh333 发表于 2019-11-9 10:49
加那个键值后,word excel打印都没有问题,但记事本打印出现参数错误,不知什么原因。

win10builder我记得之前发给你过svn地址的呀,你看下站内消息,可以一起折腾的
回复

使用道具 举报

29#
发表于 2019-11-9 11:37:42 来自手机 | 只看该作者
hhh333 发表于 2019-11-9 10:49
加那个键值后,word excel打印都没有问题,但记事本打印出现参数错误,不知什么原因。

我用的WPS 2010不能打印,有空再研究
回复

使用道具 举报

28#
 楼主| 发表于 2019-11-9 10:49:59 | 只看该作者
红毛樱木 发表于 2019-11-7 19:33
正在搞,动的比较多,winbuilder有些东西受限,在用pecmd写一些函数功能

加那个键值后,word excel打印都没有问题,但记事本打印出现参数错误,不知什么原因。
回复

使用道具 举报

27#
发表于 2019-11-7 19:33:56 来自手机 | 只看该作者
hhh333 发表于 2019-11-7 18:59
什么时候把Win10builder也更新一下?

正在搞,动的比较多,winbuilder有些东西受限,在用pecmd写一些函数功能
回复

使用道具 举报

26#
 楼主| 发表于 2019-11-7 18:59:27 | 只看该作者
红毛樱木 发表于 2019-11-6 17:30
1903(1909)只改这一个注册表,用记事本打印,显示参数错误

什么时候把Win10builder也更新一下?
回复

使用道具 举报

25#
 楼主| 发表于 2019-11-7 18:46:08 | 只看该作者
本帖最后由 hhh333 于 2019-11-7 19:01 编辑

确实是一条注册表就可以了:一是两个虚拟打印机装上了,二是确实能够打印了,三是与SystemSetupInProgress没什么关系。
好家伙,困了我们几个月,为slore 点赞!

只试了word,记事本没试,应该是没问题的,明天上班再试一下。
回复

使用道具 举报

24#
发表于 2019-11-6 17:30:05 | 只看该作者
slore 发表于 2019-11-6 11:44
v1903开始,打印机组件无法在PE下运行。
再次感谢Noel,70多岁了,抽空教我调试spoolsv.exe,不过最后还是 ...






1903(1909)只改这一个注册表,用记事本打印,显示参数错误
回复

使用道具 举报

23#
发表于 2019-11-6 12:47:16 | 只看该作者
本帖最后由 红毛樱木 于 2019-11-6 12:49 编辑
slore 发表于 2019-11-6 11:44
v1903开始,打印机组件无法在PE下运行。
再次感谢Noel,70多岁了,抽空教我调试spoolsv.exe,不过最后还是 ...


reg add "HKEY_LOCAL_MACHINE\tmp_SOFTWARE\Microsoft\Windows NT\CurrentVersion\Notifications\Data" /v 41960B29A3BC0C75 /t REG_BINARY /d 0100000001000000 /f

一条注册表就行了?其他都不需要破解了么?(只是从1903开始才需要这条注册表么?)
回复

使用道具 举报

22#
发表于 2019-11-6 11:44:43 | 只看该作者
v1903开始,打印机组件无法在PE下运行。
再次感谢Noel,70多岁了,抽空教我调试spoolsv.exe,不过最后还是靠他找到了原因。

After much research with Windbg and IDA V7 (free), I found that localspl.spl was testing an event every 30 seconds.
But this event did not change and the dll did not come out of its loop.

localspl.dll!IsSystemCurrentlyUpgrading calls : spoolss.dll!SplIsUpgrade
spoolss.dll!SplIsUpgrade calls                : spoolsv.exe!PrvSplIsUpgrade
spoolsv.exe!PrvSplIsUpgrade calls in a loop:
                                  lea     rcx, WNF_DEP_OOBE_COMPLETE
                                  call    cs:__imp_NtQueryWnfStateData

After much more research, I found some information in the following sites:
https://blog.quarkslab.com/playi ... n-facility-wnf.html
https://gracefulbits.com/2018/08 ... kernel-mode-driver/
http://redplait.blogspot.com/2012/09/wnf-notifiers.html
http://redplait.blogspot.com/2017/08/wnf-ids-from-perfntcdll.html
"A3BC0C75 - 41960B29 WNF_DEP_OOBE_COMPLETE
This event triggers when the system has completed OOBE (Windows Welcome)"

The question: what is the indicator of "the system has completed OOBE (Windows Welcome)"?

It is understood that there are two tracks to follow, modify the dll or look for the indicator WNF_DEP_OOBE_COMPLETE

1 - First method: change localspl.dll!IsSystemCurrentlyUpgrading
    Very easy with IDA V7 (extraordinary free tool)
C:\Windows\System32>fc /B "C:\Users\noelb\Desktop\ida-asm\1-v1903\localspl - New.dll" C:\Users\noelb\Desktop\ida-asm\1-v1903\localspl.dll
Comparaison des fichiers C:\USERS\NOELB\DESKTOP\IDA-ASM\1-V1903\localspl - New.dll et C:\USERS\NOELB\DESKTOP\IDA-ASM\1-V1903\LOCALSPL.DLL
0001417E: 31 85
00014180: 90 0F
00014181: 90 95
00014182: 90 C0


我们也一起得出了各个版本的补丁,但是我们仍然希望不修改系统的方式,让PE和系统一样。
恰好今天,通过学习WNF的机制,我们得出了让打印机可以工作的关键KEY。

Z:\WimBuilder2\Projects\WIN10XPE\01-Components\Devices and Printers\last.bat添加
  1. reg add "HKEY_LOCAL_MACHINE\tmp_SOFTWARE\Microsoft\Windows NT\CurrentVersion\Notifications\Data" /v 41960B29A3BC0C75 /t REG_BINARY /d 0100000001000000 /f
复制代码


第一次打印时,需要SystemSetupInProgress为0,就可以打印了。
回复

使用道具 举报

21#
发表于 2019-10-6 22:48:41 | 只看该作者
我用的你的全家桶pe,打印机能认到,但是一直感叹号,不可用,不知道是哪里出问题了,hp1005的,还有一个爱普生620f的,都不能用。
回复

使用道具 举报

20#
发表于 2019-10-6 21:50:42 | 只看该作者
H大你好,我今天特意下载了WAIGO的18990的来试试,打印机能装上,能看到打印机对列,也看到打印机项,就是打印不了,有解么?
回复

使用道具 举报

19#
发表于 2019-10-5 21:59:32 | 只看该作者
H大,我尝试在WAIGO的18956用上了16299的组件,能成功运行打印机队列和usbprint,打印机死活都装不上,还有什么高招没?
回复

使用道具 举报

18#
发表于 2019-9-26 10:40:33 | 只看该作者
h大18956的打印能解么?
回复

使用道具 举报

17#
 楼主| 发表于 2019-7-14 17:55:53 | 只看该作者
slore 发表于 2019-7-13 22:45
你这个到啥版本(16299?)为止可以创建出2个虚拟打印机?
v1903太新了不说,RS5可以么。

应该是从spoolsv.exe不需要破解开始,看了一下,是1809开始,1803都是可以的
回复

使用道具 举报

16#
 楼主| 发表于 2019-7-14 11:44:59 | 只看该作者
1903正常系统中也看了,在设备和打印中显示驱动程序有问题,但可以正常打印。用DISM++把驱动倒出来在PE中可以装,但打印时提示打印设置有问题,估计两个虚拟驱动能装上可能实体机也会正常。

回复

使用道具 举报

15#
 楼主| 发表于 2019-7-14 07:30:36 | 只看该作者
本帖最后由 hhh333 于 2019-7-14 07:31 编辑
slore 发表于 2019-7-13 22:45
你这个到啥版本(16299?)为止可以创建出2个虚拟打印机?
v1903太新了不说,RS5可以么。


我把文件列表部分用1709的打包成print.7z,其他部分如基本驱动和注册表用1903的,安装usbprint.inf,那两个驱动就自动在打印队列中出现了。真实打印机也能正常使用。感觉到这个组件独立性还是比较强的。RS5没研究,应该与1709一样。1903有一定变化。
回复

使用道具 举报

14#
发表于 2019-7-13 22:45:49 | 只看该作者
hhh333 发表于 2019-7-7 20:16
1、注册表没变为1903的
2、基本驱动没变也为1903的
3、设备与打印弄错了用了1709的

你这个到啥版本(16299?)为止可以创建出2个虚拟打印机?
v1903太新了不说,RS5可以么。

我照800MB的全功能PE,补了个别文件,PDF和XPS打印机还是没有,
但是手动添加打印机可以点了。。。不过我没真实打印机测试是否可用。。。
选PDF或XPS驱动文件,提示找不到文件。catalog也全加了都不行。。。



闲了再研究研究,回头还是先用RS5测试。。。(RS5是肯定可以添加出来的)
回复

使用道具 举报

13#
发表于 2019-7-7 20:23:06 | 只看该作者
不会又是WINSXS文件解压问题
回复

使用道具 举报

12#
 楼主| 发表于 2019-7-7 20:16:48 | 只看该作者
本帖最后由 hhh333 于 2019-7-7 20:19 编辑

1、注册表没变为1903的
2、基本驱动没变也为1903的
3、设备与打印弄错了用了1709的

安装usbprint.inf,就直接驱动上了两个虚拟打印机,大家判断一下是一个什么情况。初步确定1903虚拟打印不能自动安装是文件的问题,与注册表无关。1903的打印安装机制可能变了。
回复

使用道具 举报

11#
 楼主| 发表于 2019-7-7 16:49:21 | 只看该作者
hhh333 发表于 2019-7-7 16:26
终于发现了,一个看花眼导致1903打印组件一个月都安装不上,现在可以了。

哈哈,可能又错了,1903还是不行,但刚才成功是因为在1093中使用了全套的16299中的文件,两个虚拟打印机装上了。歪打正着,眼睛看花拷错文件了,反而装上了。
回复

使用道具 举报

10#
 楼主| 发表于 2019-7-7 16:26:56 | 只看该作者
slore 发表于 2019-6-11 14:49
WimBuilder2\Projects\WIN10XPE\01-Components\Printer\main.bat

终于发现了,一个看花眼导致1903打印组件一个月都安装不上,现在可以了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-3 21:57

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表