无忧启动论坛

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

在PE中快速的查找安装驱动程序

    [复制链接]
跳转到指定楼层
#
发表于 2016-9-4 10:22:01 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 sp_star 于 2016-9-4 22:32 编辑

驱动包和工具 链接: http://pan.baidu.com/s/1qXLtZtU 密码: rd3f   (驱动包很旧了,只是作为一个例子)
AUTODRV_X86.EXE是32位的程序,AUTODRV_X64.EXE是64位程序,二者功能是一样的。这个工具的目的就是尽可能快速的在驱动包里找到需要的驱动,并能够静默的安装。

如何使用
X86的驱动放置在NT6x86目录下,X64的驱动放置在NT6x64目录下,以管理员权限运行AUTODRV_X86.EXE或AUTODRV_X64.EXE,就可以自动安装匹配上的驱动。在PE里,由PECMD来调用可能更常见。

测量安装驱动所花费的时间,以及HWID的列表:
  1. DATE &t_start uptime
  2. EXEC* &inst_hwid=Z:\WIN8PE\Drivers\AUTODRV_X86.EXE
  3. DATE &t_end uptime
  4. CALC &n_second=(%t_end%-%t_start%)/1000#2
  5. MESS %inst_hwid%\n\n用时%n_second%秒
复制代码


仅安装显卡驱动:
  1. AUTODRV_X86.EXE *CC_0300
复制代码


驱动包的索引
为了快速查找驱动程序,每个驱动包(7Z格式)都有一个同名的索引TXT文件,记录了驱动包支持的Hardware ID。索引只在TXT文件里进行,让速度尽可能的快。
TXT文件格式,每行对应一个HWID,以逗号(英文字符)分隔四项。
第一项是HWID,可以从inf文件中的到支持的HWID列表。
第二项是驱动的描叙,主要是为了增加可读性,可以随便写。
第三项是inf文件名,一个驱动包可能包含多个inf文件,如果在驱动包中有路径,这里也应该加上路径。
第四项是"日期+空格+v+版本号",日期和版本号都可从inf文件获取。会自动匹配版本号最大的驱动。
***从inf文件中拷贝这些信息,用excel处理,可以容易的得到索引文件***
  1. PCI\VEN_8086&DEV_2A42,Intel(R) HD Graphics (Microsoft Corporation - WDDM 1.1),igdlh11.inf,03/24/2012 v8.15.10.2702
  2. PCI\VEN_8086&DEV_2A43,Intel(R) HD Graphics (Microsoft Corporation - WDDM 1.1),igdlh11.inf,03/24/2012 v8.15.10.2702
  3. PCI\VEN_8086&DEV_2E02,Intel(R) HD Graphics (Microsoft Corporation - WDDM 1.1),igdlh11.inf,03/24/2012 v8.15.10.2702
  4. PCI\VEN_8086&DEV_2E03,Intel(R) HD Graphics (Microsoft Corporation - WDDM 1.1),igdlh11.inf,03/24/2012 v8.15.10.2702
  5. .
  6. .
复制代码


工具是用PECMD2012打包的,导入资源如下,想修改的可以自己看看。
  1. -addoverwrite wcs\AUTODRV.WCS,SCRIPT,101,2052
  2. -addoverwrite wcs\x86\fdrv.cab,EXEDATA,100,2052
  3. -addoverwrite wcs\x86\A7Z.CAB,EXEDATA,101,2052
  4. -addoverwrite wcs\x86\devcon.cab,EXEDATA,102,2052
复制代码

评分

参与人数 7无忧币 +31 收起 理由
2012_12_21 + 5 链接挂了...
hehui + 1 很给力!
zmac2007 + 5
belenkwong + 5 赞一个!
tzxinqing + 5 支持大神,然而没有驱动包啊
freesoft00 + 5
xyzxp + 5 很给力!

查看全部评分

75#
发表于 2017-1-17 18:35:04 | 只看该作者
本帖最后由 红毛樱木 于 2017-1-17 18:39 编辑

AUTODRV_X64.zip (1.36 MB, 下载次数: 54)
AUTODRV_X86.zip (1.16 MB, 下载次数: 53)

参数说明(总共三个参数):
第一参数是需要安装的HWID(如果安装所有类型就用*,为空则为*,如果指定某一类型可以用类似"PCI\CC_0300"这样的通用兼容ID,注意若要使用第二个参数则第一个参数不能为空)
第二个参数传递驱动包是否为7z格式(若参数为no7z,则表示驱动包类型不是是7z类型;参数为空或其他字符串则表示是7z类型,注意若要使用第三个参数,则第二个参数不能为空)
第三个参数是指定驱动包所在的路径(如C:\AAA,目录后面不要带\);


改进,代码重写(代码基本都是老五完工的),多线程赛选适配驱动,支持非7z压缩包(参见参数二),可以用于PE内把驱动打包成WIM,然后挂载,再用参数三来匹配搜索安装。















------------------------------
@sp_star 发了站内消息给你
回复

使用道具 举报

74#
 楼主| 发表于 2017-1-16 16:38:53 | 只看该作者
红毛樱木 发表于 2017-1-16 15:09
fdrv的结果方便按匹配ID结果的长短排序一次吗?长结果在前面,短结果在后面,这样应该更符合实际。
或者 ...

现在是匹配就直接输出了,没有存下来。所以不好对最后结果进行处理。
回复

使用道具 举报

73#
发表于 2017-1-16 15:09:05 来自手机 | 只看该作者
sp_star 发表于 2017-1-15 22:54
厉害! 果然是方便!
unicode就算了,一个是不会处理,一个是不想拖慢处理速度。

fdrv的结果方便按匹配ID结果的长短排序一次吗?长结果在前面,短结果在后面,这样应该更符合实际。
或者这个功能方便加个参数吗?需要的时候用,不需要的时候不用。嘿嘿

点评

现在是匹配就直接输出了,没有存下来。所以不好对最后结果进行处理。  详情 回复 发表于 2017-1-16 16:38
回复

使用道具 举报

72#
 楼主| 发表于 2017-1-15 22:54:48 | 只看该作者
红毛樱木 发表于 2017-1-15 22:24
能处理大部分INF,一些特殊的处理不了的列表出来。
生成索引方法,在程序当前目录和子目录(相对目录不用 ...

厉害! 果然是方便!
unicode就算了,一个是不会处理,一个是不想拖慢处理速度。

点评

fdrv的结果方便按匹配ID结果的长短排序一次吗?长结果在前面,短结果在后面,这样应该更符合实际。 或者这个功能方便加个参数吗?需要的时候用,不需要的时候不用。嘿嘿  详情 回复 发表于 2017-1-16 15:09
回复

使用道具 举报

71#
发表于 2017-1-15 22:24:59 | 只看该作者
CreateInfDb2.rar (658.17 KB, 下载次数: 43)
能处理大部分INF,一些特殊的处理不了的列表出来。
生成索引方法,在程序当前目录和子目录(相对目录不用选)搜索INF生成DrvData.db索引文件。Unicode编码的,手动转下ANSI编码就可以用fdrv.exe了。

建议fdrv.exe能支持处理Unicode编码,这样就可以根据它的反馈信息做个窗体出来不至于乱码。

点评

厉害! 果然是方便! unicode就算了,一个是不会处理,一个是不想拖慢处理速度。  详情 回复 发表于 2017-1-15 22:54
回复

使用道具 举报

70#
发表于 2017-1-15 22:18:36 | 只看该作者
sp_star 发表于 2017-1-15 21:45
飞不起来吧。搜索,解压再快,安装驱动本身也要一些时间,这个省不了啊。

在PE下,相对于之前的CAB方式安装应该快了很多。
回复

使用道具 举报

69#
 楼主| 发表于 2017-1-15 21:45:32 | 只看该作者
红毛樱木 发表于 2017-1-15 21:31
好的,谢谢。
驱动弄成wim挂载,再多线程安装,速度可以飞起了。

飞不起来吧。搜索,解压再快,安装驱动本身也要一些时间,这个省不了啊。

点评

在PE下,相对于之前的CAB方式安装应该快了很多。  详情 回复 发表于 2017-1-15 22:18
回复

使用道具 举报

68#
发表于 2017-1-15 21:31:24 来自手机 | 只看该作者
sp_star 发表于 2017-1-15 21:27
试试这个:
排序用PECMD实现吧,用程序实现就要解释版本信息,这样就不灵活了。

好的,谢谢。
驱动弄成wim挂载,再多线程安装,速度可以飞起了。

点评

飞不起来吧。搜索,解压再快,安装驱动本身也要一些时间,这个省不了啊。  详情 回复 发表于 2017-1-15 21:45
回复

使用道具 举报

67#
 楼主| 发表于 2017-1-15 21:27:09 | 只看该作者
红毛樱木 发表于 2017-1-15 16:40
能编译一个支持nt5.x运行的exe吗?03PE下有这个需求。
输出结果方便按版本高低顺序排列吗?

试试这个: fdrv_xp.7z (4.66 KB, 下载次数: 14)
排序用PECMD实现吧,用程序实现就要解释版本信息,这样就不灵活了。

点评

好的,谢谢。 驱动弄成wim挂载,再多线程安装,速度可以飞起了。  详情 回复 发表于 2017-1-15 21:31
回复

使用道具 举报

66#
发表于 2017-1-15 16:40:16 | 只看该作者
本帖最后由 红毛樱木 于 2017-1-15 19:33 编辑
sp_star 发表于 2017-1-9 19:30
更新的fdrv.exe,可以输出多个匹配的结果。匹配规则还和以前一样。

下载:  


能编译一个支持nt5.x运行的exe吗?03PE下有这个需求。
输出结果方便按版本高低顺序排列吗?

点评

试试这个: 排序用PECMD实现吧,用程序实现就要解释版本信息,这样就不灵活了。  详情 回复 发表于 2017-1-15 21:27
回复

使用道具 举报

65#
发表于 2017-1-10 23:52:44 来自手机 | 只看该作者
楼主有没有新的驱动包给我一份!谢谢
回复

使用道具 举报

64#
发表于 2017-1-10 22:21:19 | 只看该作者
本帖最后由 红毛樱木 于 2017-1-10 22:33 编辑

AUTODRV_X64.7z (1.35 MB, 下载次数: 12)
AUTODRV_X86.7z (1.15 MB, 下载次数: 12)


更新了一下,适配了新的fdrv.exe,
实现下面一些功能:
假设本机未安装驱动的硬件ID为
HDAUDIO\FUNC_01&VEN_8086&DEV_2809&SUBSYS_80860101&REV_1000

在ID库中匹配到三个(或者多个,此处以三个举例)
  1. H:\cccccc\NT6x64\A.7z\IntcDAud.inf
  2. H:\cccccc\NT6x64\HDMI.7z\IntcDAud.inf
  3. H:\cccccc\NT6x64\Z.7z\IntcDAud.inf
复制代码
当第一条安装失败,自动跳转下一个匹配,直到匹配安装返回成功之后终止该硬件ID的驱动安装。然后继续下一个未安装驱动的设备。


程序退出后生成日志文件(%Temp%FIND_HWIDS.TXT\)如下:
  1. 设备ID:HDAUDIO\FUNC_01&VEN_8086&DEV_2809&SUBSYS_80860101&REV_1000    匹配到驱动文件:G:\USM\更新\PECMD.INI\在PE中快速的查找安装驱动程序(sp_star)\20170109\NT6x64\A.7z\IntcDAud.inf    匹配安装成功:No
  2. 设备ID:HDAUDIO\FUNC_01&VEN_8086&DEV_2809&SUBSYS_80860101&REV_1000    匹配到驱动文件:G:\USM\更新\PECMD.INI\在PE中快速的查找安装驱动程序(sp_star)\20170109\NT6x64\HDMI.7z\IntcDAud.inf    匹配安装成功:Yes
复制代码


回复

使用道具 举报

63#
发表于 2017-1-10 12:09:17 | 只看该作者
本帖最后由 红毛樱木 于 2017-1-10 12:13 编辑
sp_star 发表于 2017-1-10 10:45
又更新了,现在同一文件的多个相同ID也可以处理了。


这个看起来有点模糊,能给出一个具体实例说明吗?


假如a.txt
中有如下信息
HDAUDIO\FUNC_01&VEN_8086&DEV_2809&SUBSYS_80860101,IntcDAud.inf,06/19/2009 v6.0.1.6305
HDAUDIO\FUNC_01&VEN_8086&DEV_2809&SUBSYS_80860101,IntcDAud22222222.inf,06/19/2009 v6.0.1.6305
...

是不是这个意思?


---------------------------------------------------
试了一下确实是这样子,赞一个
回复

使用道具 举报

62#
 楼主| 发表于 2017-1-10 10:45:43 | 只看该作者
红毛樱木 发表于 2017-1-10 01:35
我想了一下,应该可以先读取程序所在路劲,然后排查逗号,这样就可以了。

又更新了,现在同一文件的多个相同ID也可以处理了。

点评

这个看起来有点模糊,能给出一个具体实例说明吗?  详情 回复 发表于 2017-1-10 12:09
回复

使用道具 举报

61#
 楼主| 发表于 2017-1-10 10:44:50 | 只看该作者
红毛樱木 发表于 2017-1-9 22:47
之前那个分行,看上去比较靠谱一些。

在一行输出,方便FORX和MSTR处理。
回复

使用道具 举报

60#
发表于 2017-1-10 01:35:42 来自手机 | 只看该作者
我想了一下,应该可以先读取程序所在路劲,然后排查逗号,这样就可以了。

点评

又更新了,现在同一文件的多个相同ID也可以处理了。  详情 回复 发表于 2017-1-10 10:45
回复

使用道具 举报

59#
发表于 2017-1-9 22:47:20 | 只看该作者
之前那个分行,看上去比较靠谱一些。

点评

在一行输出,方便FORX和MSTR处理。  详情 回复 发表于 2017-1-10 10:44
回复

使用道具 举报

58#
发表于 2017-1-9 22:45:44 | 只看该作者
sp_star 发表于 2017-1-9 22:04
会有这么变态的目录吗?用","分隔个,主要是和后面字段保持一致,这样PECMD一行就能全部分离出来。
这个 ...

排除特殊情况啊 这也是一种。其他的分隔符,好像目录也可以设置的 不太好。
回复

使用道具 举报

57#
 楼主| 发表于 2017-1-9 22:04:06 | 只看该作者
红毛樱木 发表于 2017-1-9 21:36
这样好像还有个问题,如果驱动所在的目录路径中有","的话,就复杂了。

会有这么变态的目录吗?用","分隔个,主要是和后面字段保持一致,这样PECMD一行就能全部分离出来。
这个分隔符改改也容易,改成什么好呢?

点评

排除特殊情况啊 这也是一种。其他的分隔符,好像目录也可以设置的 不太好。  详情 回复 发表于 2017-1-9 22:45
回复

使用道具 举报

56#
发表于 2017-1-9 21:36:35 | 只看该作者
sp_star 发表于 2017-1-9 20:37
这样方便,因为后面的内容程序不处理了, 可以用PECMD来处理,这样后面的字段可以自己定义, 自己处理。

这样好像还有个问题,如果驱动所在的目录路径中有","的话,就复杂了。

点评

会有这么变态的目录吗?用","分隔个,主要是和后面字段保持一致,这样PECMD一行就能全部分离出来。 这个分隔符改改也容易,改成什么好呢?  详情 回复 发表于 2017-1-9 22:04
回复

使用道具 举报

55#
发表于 2017-1-9 20:42:44 | 只看该作者
sp_star 发表于 2017-1-9 20:35
命令行里不会显示输出,要pecmd来读取.

哦哦 运来如此。折腾下
回复

使用道具 举报

54#
 楼主| 发表于 2017-1-9 20:37:57 | 只看该作者
红毛樱木 发表于 2017-1-9 20:16
之前是直接读取输出的行就可以了,现在用",",不会处理了。。。

如果按照之前的方式,分行输出,第 ...

这样方便,因为后面的内容程序不处理了, 可以用PECMD来处理,这样后面的字段可以自己定义, 自己处理。

点评

这样好像还有个问题,如果驱动所在的目录路径中有","的话,就复杂了。  详情 回复 发表于 2017-1-9 21:36
回复

使用道具 举报

53#
 楼主| 发表于 2017-1-9 20:35:44 | 只看该作者
红毛樱木 发表于 2017-1-9 20:23
附件里的fdrv在win7 x64下没反应。。。

命令行里不会显示输出,要pecmd来读取.

点评

哦哦 运来如此。折腾下  详情 回复 发表于 2017-1-9 20:42
回复

使用道具 举报

52#
发表于 2017-1-9 20:23:49 | 只看该作者
sp_star 发表于 2017-1-9 19:30
更新的fdrv.exe,可以输出多个匹配的结果。匹配规则还和以前一样。

下载:  

附件里的fdrv在win7 x64下没反应。。。

点评

命令行里不会显示输出,要pecmd来读取.  详情 回复 发表于 2017-1-9 20:35
回复

使用道具 举报

51#
发表于 2017-1-9 20:16:13 | 只看该作者
本帖最后由 红毛樱木 于 2017-1-9 20:34 编辑
sp_star 发表于 2017-1-9 19:30
更新的fdrv.exe,可以输出多个匹配的结果。匹配规则还和以前一样。

下载:  
  1.     READ -,1,&Drv_File,%&Drv_Info%
  2.     READ -,4,&Drv_Inf,%&Drv_Info%
复制代码

之前是直接读取输出的行就可以了,现在用",",不会处理了。。。

如果按照之前的方式,分行输出,第二个匹配的在下面接着输入,最后一行加一个匹配个数,这样处理是不是方便些。

点评

这样方便,因为后面的内容程序不处理了, 可以用PECMD来处理,这样后面的字段可以自己定义, 自己处理。  详情 回复 发表于 2017-1-9 20:37
回复

使用道具 举报

50#
发表于 2017-1-9 20:11:20 | 只看该作者
sp_star 发表于 2017-1-9 19:30
更新的fdrv.exe,可以输出多个匹配的结果。匹配规则还和以前一样。

下载:  

哦,这样的话用PECMD分析fdrv.exe输出的结果也要改了
回复

使用道具 举报

49#
 楼主| 发表于 2017-1-9 19:30:37 | 只看该作者
本帖最后由 sp_star 于 2017-1-10 10:43 编辑
红毛樱木 发表于 2017-1-7 19:10
更新了一下程序,按照“硬件 Id”和“兼容 Id”的列表,逐行匹配,更精准。做了一些特殊处理。另外驱动 ...

更新的fdrv.exe,可以输出多个匹配的结果。匹配规则还和以前一样。

下载:   new_fdrv.7z (5.97 KB, 下载次数: 26)

需用PECMD来显示输出结果:
  1. ENVI DRV_DIR=.\Drivers\NT6x86
  2. ENVI DEVHWID=PCI\VEN_8086&DEV_0102
  3. //ENVI DEVHWID=PCI\VEN_8086

  4. EXEC* &rtv=fdrv.exe %DRV_DIR% "%DevHWID%" 1
  5. mess %rtv%
复制代码

点评

能编译一个支持nt5.x运行的exe吗?03PE下有这个需求。  详情 回复 发表于 2017-1-15 16:40
附件里的fdrv在win7 x64下没反应。。。  详情 回复 发表于 2017-1-9 20:23
之前是直接读取输出的行就可以了,现在用",",不会处理了。。。  详情 回复 发表于 2017-1-9 20:16
哦,这样的话用PECMD分析fdrv.exe输出的结果也要改了  详情 回复 发表于 2017-1-9 20:11
回复

使用道具 举报

48#
发表于 2017-1-7 19:10:04 | 只看该作者
本帖最后由 红毛樱木 于 2017-1-7 19:14 编辑

AUTODRV_X64.7z (1.35 MB, 下载次数: 14)
AUTODRV_X86.7z (1.14 MB, 下载次数: 19)
更新了一下程序,按照“硬件 Id”和“兼容 Id”的列表,逐行匹配,更精准。做了一些特殊处理。另外驱动安装方式换成使用devcon.exe来操作,更合理。(LZ留意下站内消息)
如果有成功匹配,则在“%TEMP%\FIND_HWIDS.TXT”文件做记录,方便查看结果

注意不适合USB3.0/3.1驱动设备类型的安装,这类设备安装方式不同。(有这个需求的请留意此贴http://bbs.wuyou.net/forum.php?mod=viewthread&tid=385386)

点评

更新的fdrv.exe,可以输出多个匹配的结果。匹配规则还和以前一样。 需用PECMD来显示输出结果:  详情 回复 发表于 2017-1-9 19:30

评分

参与人数 1无忧币 +5 收起 理由
freesoft00 + 5

查看全部评分

回复

使用道具 举报

47#
发表于 2017-1-7 14:33:07 | 只看该作者
本帖最后由 红毛樱木 于 2017-1-7 14:52 编辑
sp_star 发表于 2017-1-3 22:35
是的,只适用于PCI设备,USB不适用。但USB设备可以用USB*来过滤啊。
你看pecmd脚本就知道,这个参数直接 ...

今天又研究了一下,发现用status命令读取的设备ID都是唯一ID,这个唯一ID用devcon的hwids命令和find命令都读不到。。。好头疼

-------------------------------------------------------------
研究出来了,做个标记
比如唯一ID是
HDAUDIO\FUNC_01&VEN_8086&DEV_2809&SUBSYS_80860101&REV_1000\4&18DB7577&0&0201

前面加个@符号就可以标记了
回复

使用道具 举报

46#
 楼主| 发表于 2017-1-3 22:35:02 | 只看该作者
红毛樱木 发表于 2017-1-3 22:16
也有可能USB网卡。。。

是的,只适用于PCI设备,USB不适用。但USB设备可以用USB*来过滤啊。
你看pecmd脚本就知道,这个参数直接传给devcon.exe status,所以,可以使用你想要的关键字。

点评

今天又研究了一下,发现用status命令读取的设备ID都是唯一ID,这个唯一ID用devcon的hwids命令和find命令都读不到。。。好头疼  详情 回复 发表于 2017-1-7 14:33
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-8-2 02:57

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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