|
|
大家可能都知道,在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)
|
评分
-
查看全部评分
|