无忧启动论坛

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

AutoDrv命令行版的驱动备份工具!(新版支持直接在PE下搜索并加载驱动)

[复制链接]
跳转到指定楼层
1#
发表于 2008-10-20 23:39:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Autodrv.exe命令行版的GetPEDriver
备份文件名MyDrvbak.Cab,存放在Autodrv.exe的相同位置(所以你需要将AutoDrv放在一个可写的环境中运行)
参数说明:
  -PE 默认备份搜索到的第一个非活动Windows备份其驱动(不一定要在PE下,双系统用此参数可备份非活动系统的驱动)。
  -Lbak 备份时将去除文件扩展名为.exe .chm .hlp .cpl的文件,此选项是专为PE下加载驱动准备的,有此参数时会处理INF文件。
  -cabname:"xxxx.cab" 指定备份的cab文件路径及名字,指定路径无效时使用默认的autodrv所在路径及默认文件名MyDrvbak.cab。
  -InsPeDrv 加此参数后忽略其它参数,在PE下提取XP驱动并直接安装。
使用示例:
Autodrv  无参数或-PE未搜索到非活动windows将备份当前系统的驱动。
Autodrv -pe -Lbak 为PE准备驱动,使用默认文件名MyDrvbak.cab
Autodrv -CabName:"d:\work\olddrv.cab' 使用指定的文件名备份(注意不要掉了-CabName后的冒号)
Autodrv -InsPeDrv PE下直接提取XP驱动(只包括声卡、显卡、网卡)并安装。

提醒一下的是,某些PE精简掉了cabinet.dll,请复制此文件在AutoDrv目录,否则无法运行AutoDrv打包驱动。
                                                      Wangsea 20081025
                                                      Wang6071@sina.cn
V1.2 略降低一点CPU占用。
v1.3 添加参数-InsPeDrv,加此参数后忽略其它参数,在PE下提取XP驱动并直接安装。(用这个软件运行速度就很快啦)
     添加参数-cabname:"xxxx.cab",可以招定备份的cab文件路径及名字。指定路径无效时使用默认的autodrv所在路径。
     示例:autodrv -cabname:"d:\work\olddrv.cab'
v1.31 修复v1.3在复制Inf主文件时遇到同名文件时自动重命名的bug。
v1.32 修正当cab中创建子目录时因子目录名不合理可能停止压缩的问题。
v1.33 修正优化INF时可能产生的程序死循环的BUG。
v1.34 扩展-inspedrv参数,使其能自动添加所需要的基本文件以便驱动安装成功。安装过程中如跳出某某文件找不到,请指定路径的窗口时,
      .sys指定到x:\wxpe\system32\drivers\
      .drv .dll等指定到x:\wxpe\system32\  
      应该可以找到文件并安装。(我的机器上安装声卡要指定:drmk.sys和wdmaud.drv,具体原因未知,Inf中未找以相关描述。)

v1.35 将修改的INF文件与BARTPE安装服务兼容,使其可以直接使用Autodrv提供的INF文件。
      另外,新版好象同时解决了偶尔安装时提示要求指定文件路径的问题。
v1.36 修正了-inspedrv判断硬件时不为兼容硬件安装驱动的问题。
测试代码如下:
copy credui.dll x:\wxpe\system32\.
copy newdev.dll x:\wxpe\system32\.
Echo 使用AutoDrv在PE下自动安装驱动
AutoDrv -inspedrv
Echo del x:\wxpe\inf\*.pnf  如果安装不成功,再次安装可能需要本行命令执行后才能成功。
NET START EVENTLOG
ECHO 安装网络设备...
BARTPE -pnp -cn WinPE -wg WORKGROUP
ECHO 安装网络组件...
REGSVR32 /S NETCFGX.DLL
REGSVR32 /S NETSHELL.DLL
REGSVR32 /S NETMAN.DLL
BARTPE -c p -i MS_TCPIP
BARTPE -c c -i MS_MSCLIENT
BARTPE -c s -i MS_SERVER
BARTPE -c p -i MS_L2TP
BARTPE -c p -i MS_PPTP
BARTPE -c p -i MS_PPPOE
BARTPE -c p -i MS_WANARP
BARTPE -c p -i MS_NDISWAN
BARTPE -c s -i MS_RASCLI
BARTPE -c s -i MS_RASSRV
BARTPE -c s -i MS_RASMAN
BARTPE -c s -i MS_STEELHEAD
BARTPE -v -c p -i MS_NDISUIO
BARTPE -v -c s -i MS_WZCSVC
ECHO 启动网络服务...
NET START TCPIP
NET START DHCP
NET START NLA
NET START LMHOSTS
NET START SERVER
NET START NETMAN
NET START TAPISRV
NET START RASMAN
NET START WZCSVC
Copy PENETCFG.EXE x:\wxpe\system32\.
PENETCFG.EXE

[ 本帖最后由 wang6071 于 2008-11-18 23:12 编辑 ]

驱动备份.jpg (68.62 KB, 下载次数: 230)

驱动备份.jpg

Autodrv(1.35).rar

74.5 KB, 下载次数: 865, 下载积分: 无忧币 -2

Autodrv(1.36).rar

74.65 KB, 下载次数: 1327, 下载积分: 无忧币 -2

评分

参与人数 1无忧币 +10 收起 理由
421062724 + 10

查看全部评分

2#
发表于 2008-10-20 23:51:06 | 只看该作者
shafa
shishi
回复

使用道具 举报

3#
发表于 2008-10-21 01:07:14 | 只看该作者
优点在哪里呢
它太耗资源
cpu全被他占用
回复

使用道具 举报

4#
发表于 2008-10-21 07:21:54 | 只看该作者
怎么运行速度很慢啊?
回复

使用道具 举报

5#
 楼主| 发表于 2008-10-21 07:36:39 | 只看该作者
优点:搜索的驱动文件较全(用其它工具备份的驱动无法使用时可以试试此工具),在没有驱动情况下安装新系统前做一个备份要求搜集的驱动完整以确保安装硬件。
它太耗资源,cpu全被他占用:可能原因是你的杀软占用的资源较大,况且备份过程中一般不会做其它工作,所以备份是全速进行的。
运行速度很慢:搜集与打包成cab的压缩过程要占一定的时间,运行时间与智能判断出的需要备份驱动的多少有关。

[ 本帖最后由 wang6071 于 2008-10-21 07:40 编辑 ]
回复

使用道具 举报

6#
发表于 2008-10-21 08:10:15 | 只看该作者
GetPeDrver已经很不错了,感谢分享!
回复

使用道具 举报

7#
发表于 2008-10-21 09:07:25 | 只看该作者
GetPeDrver的确有的驱动不能备份,甚至出错,试试这个。
回复

使用道具 举报

8#
发表于 2008-10-21 10:09:53 | 只看该作者
哈……Wangsea可以在深夜发出来的哦
Http://Wangsea.ys168.com

谢谢啦!
回复

使用道具 举报

9#
发表于 2008-10-21 10:16:09 | 只看该作者
cab包 没有进行 inf 处理。
有的显示卡安装成功,但是不能进行设置。
我把cab 打开,重新用 xcab 处理inf 方式压缩后,可以安装成功。

[ 本帖最后由 dos时代菜鸟 于 2008-10-21 10:29 编辑 ]
回复

使用道具 举报

10#
发表于 2008-10-21 12:47:07 | 只看该作者
cab包 没有进行 inf 处理。
当通过 pecmd devi 的方法安装驱动程序的时候,会出现问题的。
回复

使用道具 举报

11#
发表于 2008-10-21 14:23:03 | 只看该作者
CPU资源占用率确实太高!
回复

使用道具 举报

12#
发表于 2008-10-21 14:38:22 | 只看该作者
这种涉及到驱动程序方面的东西,必然要求在运行的时候不能并行运行其他大型程序,所以就算是cpu占用率高,也是无所谓的。
关键是,备份出来的 cab 包,不能通过 pecmd devi 方式成功安装显示卡(即使安装成功了,也无法进行设置)。
希望LZ更新,在制作CAB包的时候 增加 处理INF功能参数。
回复

使用道具 举报

13#
发表于 2008-10-21 17:13:07 | 只看该作者
花了一分钟转成繁体版。

[ 本帖最后由 guies 于 2008-10-21 23:20 编辑 ]

Autodrv.rar

64.05 KB, 下载次数: 123, 下载积分: 无忧币 -2

回复

使用道具 举报

14#
发表于 2008-10-21 18:13:39 | 只看该作者
好东东,楼主又出手了。
回复

使用道具 举报

15#
发表于 2008-10-21 18:30:34 | 只看该作者
命令行的还是没有GetPeDriver方便,功能也少了些
楼主的工具是为PE而制,因此处理inf文件的功能还是很重要的,CPU占用过高与压缩有关,因此这个自动压缩成CAB文件的功能倒是有点多余,因为安装的时候,无论在pe还是XP,都要先解压才可以,要使用PECMD的DEVI来安装驱动也要先解压处理后重新打包才可以,是不是变得麻烦
回复

使用道具 举报

16#
 楼主| 发表于 2008-10-21 19:34:59 | 只看该作者
原帖由 zhangze 于 2008-10-21 18:30 发表
命令行的还是没有GetPeDriver方便,功能也少了些
楼主的工具是为PE而制,因此处理inf文件的功能还是很重要的,CPU占用过高与压缩有关,因此这个自动压缩成CAB文件的功能倒是有点多余,因为安装的时候,无论在p ...


本工具主要是为新装系统时备份原系统驱动所作,兼容PE加载仅是其中一个选项。
驱动备份仅是备份一次使用多次的工具,故对CPU占用可以无视了。

v1.1版
   按xcmd的约定将主INF放在了文件夹下的物理第一位上。
   使用-Lbak作备份时增加了自动处理INf,兼容了PE下使用PECMD加载驱动。
回复

使用道具 举报

17#
发表于 2008-10-21 19:41:38 | 只看该作者
谢谢更新,再下来用用。
回复

使用道具 举报

18#
发表于 2008-10-21 22:18:04 | 只看该作者
原帖由 wang6071 于 2008-10-21 19:34 发表

本工具主要是为新装系统时备份原系统驱动所作,兼容PE加载仅是其中一个选项。
驱动备份仅是备份一次使用多次的工具,故对CPU占用可以无视了。

v1.1版
   按xcmd的约定将主INF放在了文件夹下的物理第一 ...


网上有个Delphi做的DriverBuckUp.EXE V1.1版(含源码),不知是不是楼主的大作?
回复

使用道具 举报

19#
 楼主| 发表于 2008-10-21 22:36:43 | 只看该作者
原帖由 lxl1638 于 2008-10-21 22:18 发表


网上有个Delphi做的DriverBuckUp.EXE V1.1版(含源码),不知是不是楼主的大作?


不是偶的,GetPeDriver参考了该代码的思路 ( 注意:DriverBuckUp不支持Unicode的INF读取 )。

[ 本帖最后由 wang6071 于 2008-10-21 22:40 编辑 ]
回复

使用道具 举报

20#
发表于 2008-10-21 22:46:57 | 只看该作者
的确,Delphi在处理Unicode字符有很多不足:
用API可能处理Unicode字符,但大多数使用Delphi的人很不习惯,
如果从 Unicode ==> Ansi ==>Unicode 来回转换,效率会降低,WimTool 就用这个办法(WimgAPI.DLL的出入口参数全是Unicode字符串,所以很多人提到 WimTool 比 ImageX 慢,慢在大量的带通配符文件目录的匹配比较)。
从网上掏到了一个 WStrList.PAS (Unicode版的TStringList) ,不知你有了没有,可能你有用得到的时候。

[ 本帖最后由 lxl1638 于 2008-10-21 22:49 编辑 ]

WStrList.rar

5.26 KB, 下载次数: 125, 下载积分: 无忧币 -2

回复

使用道具 举报

21#
发表于 2008-10-21 23:01:21 | 只看该作者
老九就是强人一个,好老师。
回复

使用道具 举报

22#
 楼主| 发表于 2008-10-21 23:04:41 | 只看该作者
原帖由 lxl1638 于 2008-10-21 22:46 发表
的确,Delphi在处理Unicode字符有很多不足:
用API可能处理Unicode字符,但大多数使用Delphi的人很不习惯,
如果从 Unicode ==> Ansi ==>Unicode 来回转换,效率会降低,WimTool 就用这个办法(WimgAPI.DLL的出 ...



谢谢,我用的是自已试出来的转换方法,全部转为Ansi来处理,感觉速度还可以。
Function LoadUnicodeFile(FileName:string):String;
var
  pBuffer: PByte;
  pwChr: PWideChar;
  strmScript: TFileStream;
begin
  Result:='';
  strmScript := TFileStream.Create(FileName, fmOpenRead);
  GetMem(pBuffer, strmScript.Size);
try
   strmScript.Read(pBuffer^, strmScript.Size);
   if PWord(pBuffer)^<>$FEFF then     //Unicode文件开头是FF FE
   begin
     setLength(Result,strmScript.size);
     CopyMemory(@Result[1],pBuffer,strmScript.size);
   end else
   begin
     pwChr:= PWideChar(pBuffer);
     Inc(pwChr,1); //增加这一句,去文件头和文件尾出现几个'?'
     Result := WideCharToString(pwChr);
   end;
finally
   FreeMem(pBuffer);
   strmScript.Free;
end;
end;
回复

使用道具 举报

23#
发表于 2008-10-21 23:33:55 | 只看该作者
原帖由 wang6071 于 2008-10-21 23:04 发表



谢谢,我用的是自已试出来的转换方法,全部转为Ansi来处理,感觉速度还可以。
Function LoadUnicodeFile(FileName:string):String;
var
  pBuffer: PByte;
  pwChr: PWideChar;
  strmScript: TFile ...


在你的AutoDrv可以这样处理,但在WimTool里就不同,WimgAPI.DLL每压缩或解压一个文件都给回调函数返回若干个Unicode文件目录名的地址,WimTool要对照几个规则列表(带通配符的一系列文件目录字符串),决定是否压缩或解压,如果备份一个完整的系统,往往要从Unicode ==> Ansi 来回转换几万次,加上带通配符的文件目录名(几十条Ansi字符串规则)匹配比较,使得WimTool执行效率很差。

[ 本帖最后由 lxl1638 于 2008-10-21 23:41 编辑 ]
回复

使用道具 举报

24#
发表于 2008-10-22 07:20:01 | 只看该作者
感谢LZ更新,
我会把它放到 我的 PE交互模式驱动安装脚本中。
回复

使用道具 举报

25#
发表于 2008-10-22 17:21:56 | 只看该作者
好像对 认证签名不同的驱动会到不同的地方去寻找和提取相关文件。
但是,如果原始的驱动在安装完以后被精简掉了,此时,只留下 system32 里面正在使用的驱动文件了呢?软件就有可能只能提取出一个 inf 文件来了。
回复

使用道具 举报

26#
发表于 2008-10-22 17:34:27 | 只看该作者
看看,速度有点慢。测试一下完整性
回复

使用道具 举报

27#
 楼主| 发表于 2008-10-22 19:02:32 | 只看该作者
原帖由 dos时代菜鸟 于 2008-10-22 17:21 发表
好像对 认证签名不同的驱动会到不同的地方去寻找和提取相关文件。
但是,如果原始的驱动在安装完以后被精简掉了,此时,只留下 system32 里面正在使用的驱动文件了呢?软件就有可能只能提取出一个 inf 文件来了。


不是这个原因,AutoDrv提取的文件是由InF中指定的文件,可能你的Inf有点特殊,请附件贴上来让我分析一下。

顺便更新一下,v1.2降低备份驱动时的CPU占用情况。
回复

使用道具 举报

28#
发表于 2008-10-22 19:21:01 | 只看该作者
原帖由 wang6071 于 2008-10-22 19:02 发表


不是这个原因,AutoDrv提取的文件是由InF中指定的文件,可能你的Inf有点特殊,请附件贴上来让我分析一下。

顺便更新一下,v1.2降低备份驱动时的CPU占用情况。


好地,这个 nv4_disp.rar (3.5 KB, 下载次数: 97)   是我的那个 inf
回复

使用道具 举报

29#
 楼主| 发表于 2008-10-22 19:42:08 | 只看该作者
原帖由 dos时代菜鸟 于 2008-10-22 19:21 发表


好地,这个 47840  是我的那个 inf



打开看看
[nv4]
;CpyFiles = nv4.Miniport, nv.Display
;DlFiles  = nv.oldrm, nv.delete.systemfiles

原来是修改过的INF,当然提取不到文件啦,请将;CpyFiles 全部替换为 CopyFiles 保存后再试就可提取文件了。

你可看看附件中的nv原版inf是如何写的。

[ 本帖最后由 wang6071 于 2008-10-22 19:45 编辑 ]

nv4_disp.rar

5.09 KB, 下载次数: 79, 下载积分: 无忧币 -2

nv原版的inf

回复

使用道具 举报

30#
发表于 2008-10-22 19:45:03 | 只看该作者
原帖由 wang6071 于 2008-10-22 19:42 发表



打开看看
[nv4]
;CpyFiles = nv4.Miniport, nv.Display
;DlFiles  = nv.oldrm, nv.delete.systemfiles

原来是修改过的INF,当然提取不到文件啦,请将;CpyFiles 全部替换为 CopyFiles 保存后再试就可 ...


原来如此,差了一个字母,呵呵,晕倒。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-12-1 05:13

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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