无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 19956|回复: 32

技术探讨:PE中的即插即用(5.25更新Pnp源代码)

  [复制链接]
发表于 2008-5-5 18:33:24 | 显示全部楼层 |阅读模式
大家可能都知道,在XP Embbeded中,系统就能实现即插即用,而在PE中是不能实现对很多设备的即插即用的。这是因为即插即用系统在不同的环境中表现是不一样的。这里先说原理,再探讨一下几种不完美的解决方案。
    当一个支持即插即用的设备插入或被检测到时,内核态的即插即用组件Services.exe会以参数-setup启动,搜集设备信息,然后传到用户态的即插即用管理器Umpnpmgr.dll,由 Umpnpmgr.dll 调用包括Newdev.dll在内的一系列组件进行处理INF等文件,最后将SYS或只传递信息给内核,开始驱动。
    在PE中,Services.exe和Umpnpmgr.dll会检测HKLM\system\setup下的systemsetupinprogress键值,等于1表示setup进程正在运行,Services.exe和Umpnpmgr.dll会自动让位给Setup;如果等于0,其他组件可能工作不正常,比如SAM 。解决办法是修改Services.exe和Umpnpmgr.dll。使用UltraEdit查找ASCII并选择使用正则表达式s?e?t?u?p?i?n?p?r?o?g?r?e?s?s或HEX:530079007300740065006d005300650074007500700049006e00500072006f006700720065007300
73,因为字符串是以UniCode形式存储的。将最后的S改为T,变成systemsetupinprogrest,并在注册表HKLM\system\setup下建立DWORD systemsetupinprogrest = 0 。修改SETUPAPI.DLL中CopyFiles为DopyFiles,也可以用XCAB处理一下PE所有的INF文件。最后添加各个设备类别的注册表键值HKLM\system\controlset001\control\classes ,hklm\system\controlset001\enum等。这个自己努力吧。
    大家讨论最多也是最烦的是这个过程中的驱动认证。问题就在Setupapi.dll。正常的Setupapi.dll中有一个全局标志GlobalSetupFlags = 0,Setupapi.dll 会检测是否为NT_Embedded环境,如果是则GlobalSetupFlags = 40,如果不是就麻烦了,它会进行一系列的认证。除了HKCU\Software\Policies\Microsoft\Windows NT\Driver Signing,HKCU\Software\Policies\Microsoft\Windows NT\Non-Driver Signing,Setupapi.dll 还要以HKLM\System\WPA\PnP中的Seed计算一个MD5 hash值,与HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup下的PrivateHash对比。
    不修改SETUPAPI.DLL的方法只有编程如下(Bartpe.exe 也使用这种方法): antiWPA.rar (1.54 KB, 下载次数: 287)

点评

请教老师 :Sp3 版本 的SETUPAPI.DLL 修改设置GlobalSetupFlags = 40 。如何寻找偏移地址?  发表于 2017-4-7 23:36

评分

参与人数 1无忧币 +5 收起 理由
2011henry26 + 5 很给力!

查看全部评分

发表于 2008-5-5 18:50:10 | 显示全部楼层
原帖由 yamingw 于 2008-5-5 06:33 PM 发表
大家可能都知道,在XP Embbeded中,系统就能实现即插即用,而在PE中是不能实现对很多设备的即插即用的。这是因为即插即用系统在不同的环境中表现是不一样的。这里先说原理,再探讨一下几种不完美的解决方案。
...


收藏了,另,修改文件的方法能否适用不同系统(XP/2003/Vista)的PE?
回复

使用道具 举报

发表于 2008-5-5 19:48:10 | 显示全部楼层
即插即用的技术是酱紫实现的——当一块符合PNPBIOS标准的设备插入到硬件系统中,PNPBIOS将为这块设备的ROM分配一段内存地址(这也就是系统无法真正完全拥有4G内存的原因),如果符合ACPI的话,就会在ACPI空间生成ACPI表项,用来操作此硬件,如果是PCI设备的话,还会在PCI配置空间分配256字节的该设备PCI配置空间项,并将这些变化报告给NTOSKRNL.EXE,然后NTOSKRNL发送“发现设备接口更改通知”消息(具体接口俺没研究),如果我们的程序对该消息也处理,则我们也会即插即用:)热拔除过程和此类似。把新硬件的HWID写入注册表可能也是NTOSKRNL干的。

[ 本帖最后由 netwinxp 于 2008-5-5 08:18 PM 编辑 ]
回复

使用道具 举报

发表于 2008-5-5 19:13:50 | 显示全部楼层
路过,转贴并支持一下。;)
回复

使用道具 举报

发表于 2008-5-5 23:25:24 | 显示全部楼层
学习了,谢谢大家的讲解……
回复

使用道具 举报

发表于 2008-5-6 07:51:42 | 显示全部楼层
学习了,不错的贴子
回复

使用道具 举报

发表于 2008-5-6 08:19:20 | 显示全部楼层
好方法,很好的技术帖,谢谢分享。
回复

使用道具 举报

发表于 2008-5-6 08:56:08 | 显示全部楼层
强劲,有时间要实践一下。
回复

使用道具 举报

发表于 2008-5-6 09:15:00 | 显示全部楼层
看来还有待进一步探讨来完善解决这个问题。
回复

使用道具 举报

发表于 2008-5-6 09:30:51 | 显示全部楼层
说实话不是很懂,但支持一下。
回复

使用道具 举报

发表于 2008-5-6 10:13:09 | 显示全部楼层
真是有很多强悍的人啊
回复

使用道具 举报

发表于 2008-5-6 11:18:07 | 显示全部楼层
也只能支持下了. 其他的说不上什么
回复

使用道具 举报

发表于 2008-5-7 10:27:44 | 显示全部楼层
这么好的贴,要顶上去!
回复

使用道具 举报

 楼主| 发表于 2008-5-25 13:33:29 | 显示全部楼层
懒得找HTTPS的那个贴了,就在这补充一下,使用证书管理以前先注册一下Initpki.dll才能使用其全部功能。
回复

使用道具 举报

发表于 2008-5-25 14:58:18 | 显示全部楼层
“Rundll32.exe syssetup.dll,UpdatePnpDeviceDrivers”命令可以安装即插即用驱动,运行效果与“HWPNP +all /u /p”相当,但是运行效率大不相同,后者几十秒钟就可以完成,而前者却需要1000秒钟以上,非常慢。
回复

使用道具 举报

发表于 2008-5-25 16:08:01 | 显示全部楼层
不错,先了解了解
回复

使用道具 举报

发表于 2008-5-25 20:24:28 | 显示全部楼层
谢谢分享!!学习啦!!
回复

使用道具 举报

发表于 2008-5-25 20:54:22 | 显示全部楼层
原帖由 liuhj 于 2008-5-25 14:58 发表
“Rundll32.exe syssetup.dll,UpdatePnpDeviceDrivers”命令可以安装即插即用驱动,运行效果与“HWPNP +all /u /p”相当,但是运行效率大不相同,后者几十秒钟就可以完成,而前者却需要1000秒钟以上,非常慢。

应该没那么长吧-_-!!不过还是应该谢谢您的方法。
回复

使用道具 举报

发表于 2008-5-26 13:52:40 | 显示全部楼层
原帖由 yamingw 于 2008-5-5 06:33 PM 发表
大家可能都知道,在XP Embbeded中,系统就能实现即插即用,而在PE中是不能实现对很多设备的即插即用的。这是因为即插即用系统在不同的环境中表现是不一样的。这里先说原理,再探讨一下几种不完美的解决方案。
...


将 antiWPA.c 在2003系统中用VC2005中编译,大家测试一下能否可用?
s1.exe 也来了,本人试验被禁用的网卡也出来的,大家到PE中试验一下。

s1.rar (4.06 KB, 下载次数: 90)
未命名.JPG
回复

使用道具 举报

发表于 2008-5-26 14:09:35 | 显示全部楼层
大家到PE中试验(代替BartPE.exe),看看上面的 s1.exe 效果如何。
回复

使用道具 举报

发表于 2008-5-26 14:54:29 | 显示全部楼层
看到头晕晕,只好拿做好的来试试了。
回复

使用道具 举报

发表于 2008-5-26 15:51:20 | 显示全部楼层
原帖由 tmlu110 于 2008-5-6 09:30 AM 发表
说实话不是很懂,但支持一下。




lz:
光盘,xp系统和PE内未有 sfcos.dll,在网上也没找到下载?
内核只替换了Bartpe.exe ,加入了Syssetup.Dll ,Sfc.dll,sfcfiles.dll,
pe开机时,原来不显示的徽标认证都蹦出来了。。。设备管理器未见其他项目。
不知哪一步做错了?
不懂编程,未改Syssetup.Dll 。。。
2008-05-27_155000.PNG
回复

使用道具 举报

发表于 2008-5-26 15:58:28 | 显示全部楼层

后pe内加入sfc_os.dll后,显示如图:可能是成功了。。。
2008-05-27_155419.PNG
回复

使用道具 举报

 楼主| 发表于 2008-5-26 17:56:51 | 显示全部楼层

回复 #20 lxl1638 的帖子

s1 的效果有个缺点,就是有些驱动需要用户点  确定 。而 BartPE 是“略过”了这些“无用”的驱动而实现全自动的。
回复

使用道具 举报

发表于 2008-5-26 21:03:15 | 显示全部楼层
这个强,先收藏再看,谢谢楼主
回复

使用道具 举报

发表于 2008-5-26 23:11:52 | 显示全部楼层
原帖由 bobo55 于 2008-5-26 03:58 PM 发表
http://bbs.wuyou.net/images/common/back.gif
后pe内加入sfc_os.dll后,显示如图:可能是成功了。。。


先不要用 RunDll32.exe Syssetup.dll,UpdatePnpDeviceDrivers
试试这个(只有3K)看看:

UPnp.rar

1.68 KB, 下载次数: 102, 下载积分: 无忧币 -2

回复

使用道具 举报

发表于 2008-5-27 13:31:12 | 显示全部楼层
原帖由 lxl1638 于 2008-5-26 11:11 PM 发表


启动UPnp即插用服务...
NET START SSDPSRV 
START UPnp.EXE  不知是不是这样用? 但pe内未有UPnp服务。可能还缺少文件。。。设备管理器未增加新的项目。后再用命令
RunDll32.exe Syssetup.dll,UpdatePnpDeviceDrivers,设备管理器找到一堆硬件。
回复

使用道具 举报

发表于 2009-8-22 02:43:47 | 显示全部楼层
先顶后看。。。。。。。。。。。。。。。
回复

使用道具 举报

发表于 2009-8-24 13:26:06 | 显示全部楼层
楼主真厉害 支持一下
回复

使用道具 举报

发表于 2014-6-28 14:20:04 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-12-28 15:30

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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