wang6071 发表于 2008-10-20 23:39:02

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

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 编辑 ]

pseudo 发表于 2008-10-20 23:51:06

shafa
shishi

zhangze 发表于 2008-10-21 01:07:14

优点在哪里呢
它太耗资源
cpu全被他占用

dzy 发表于 2008-10-21 07:21:54

怎么运行速度很慢啊?

wang6071 发表于 2008-10-21 07:36:39

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

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

bsplin 发表于 2008-10-21 08:10:15

GetPeDrver已经很不错了,感谢分享!

lsj0416 发表于 2008-10-21 09:07:25

GetPeDrver的确有的驱动不能备份,甚至出错,试试这个。

junyee 发表于 2008-10-21 10:09:53

哈……Wangsea可以在深夜发出来的哦
Http://Wangsea.ys168.com

谢谢啦!

dos时代菜鸟 发表于 2008-10-21 10:16:09

cab包 没有进行 inf 处理。
有的显示卡安装成功,但是不能进行设置。
我把cab 打开,重新用 xcab 处理inf 方式压缩后,可以安装成功。

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

dos时代菜鸟 发表于 2008-10-21 12:47:07

cab包 没有进行 inf 处理。
当通过 pecmd devi 的方法安装驱动程序的时候,会出现问题的。

xubo1971 发表于 2008-10-21 14:23:03

CPU资源占用率确实太高!

dos时代菜鸟 发表于 2008-10-21 14:38:22

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

guies 发表于 2008-10-21 17:13:07

花了一分钟转成繁体版。

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

紫狐 发表于 2008-10-21 18:13:39

好东东,楼主又出手了。

zhangze 发表于 2008-10-21 18:30:34

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

wang6071 发表于 2008-10-21 19:34:59

原帖由 zhangze 于 2008-10-21 18:30 发表 http://bbs.wuyou.net/images/common/back.gif
命令行的还是没有GetPeDriver方便,功能也少了些
楼主的工具是为PE而制,因此处理inf文件的功能还是很重要的,CPU占用过高与压缩有关,因此这个自动压缩成CAB文件的功能倒是有点多余,因为安装的时候,无论在p ...

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

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

千里独行 发表于 2008-10-21 19:41:38

谢谢更新,再下来用用。

lxl1638 发表于 2008-10-21 22:18:04

原帖由 wang6071 于 2008-10-21 19:34 发表 http://bbs.wuyou.net/images/common/back.gif

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

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

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

wang6071 发表于 2008-10-21 22:36:43

原帖由 lxl1638 于 2008-10-21 22:18 发表 http://bbs.wuyou.net/images/common/back.gif


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

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

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

lxl1638 发表于 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 编辑 ]

七仙花 发表于 2008-10-21 23:01:21

老九就是强人一个,好老师。

wang6071 发表于 2008-10-21 23:04:41

原帖由 lxl1638 于 2008-10-21 22:46 发表 http://bbs.wuyou.net/images/common/back.gif
的确,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,pBuffer,strmScript.size);
   end else
   begin
   pwChr:= PWideChar(pBuffer);
   Inc(pwChr,1); //增加这一句,去文件头和文件尾出现几个'?'
   Result := WideCharToString(pwChr);
   end;
finally
   FreeMem(pBuffer);
   strmScript.Free;
end;
end;

lxl1638 发表于 2008-10-21 23:33:55

原帖由 wang6071 于 2008-10-21 23:04 发表 http://bbs.wuyou.net/images/common/back.gif



谢谢,我用的是自已试出来的转换方法,全部转为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 编辑 ]

dos时代菜鸟 发表于 2008-10-22 07:20:01

感谢LZ更新,
我会把它放到 我的 PE交互模式驱动安装脚本中。

dos时代菜鸟 发表于 2008-10-22 17:21:56

好像对 认证签名不同的驱动会到不同的地方去寻找和提取相关文件。
但是,如果原始的驱动在安装完以后被精简掉了,此时,只留下 system32 里面正在使用的驱动文件了呢?软件就有可能只能提取出一个 inf 文件来了。

HuAnGkUn 发表于 2008-10-22 17:34:27

看看,速度有点慢。测试一下完整性

wang6071 发表于 2008-10-22 19:02:32

原帖由 dos时代菜鸟 于 2008-10-22 17:21 发表 http://bbs.wuyou.net/images/common/back.gif
好像对 认证签名不同的驱动会到不同的地方去寻找和提取相关文件。
但是,如果原始的驱动在安装完以后被精简掉了,此时,只留下 system32 里面正在使用的驱动文件了呢?软件就有可能只能提取出一个 inf 文件来了。

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

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

dos时代菜鸟 发表于 2008-10-22 19:21:01

原帖由 wang6071 于 2008-10-22 19:02 发表 http://bbs.wuyou.net/images/common/back.gif


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

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

好地,这个   是我的那个 inf

wang6071 发表于 2008-10-22 19:42:08

原帖由 dos时代菜鸟 于 2008-10-22 19:21 发表 http://bbs.wuyou.net/images/common/back.gif


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


打开看看

;CpyFiles = nv4.Miniport, nv.Display
;DlFiles= nv.oldrm, nv.delete.systemfiles

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

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

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

dos时代菜鸟 发表于 2008-10-22 19:45:03

原帖由 wang6071 于 2008-10-22 19:42 发表 http://bbs.wuyou.net/images/common/back.gif



打开看看

;CpyFiles = nv4.Miniport, nv.Display
;DlFiles= nv.oldrm, nv.delete.systemfiles

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

原来如此,差了一个字母,呵呵,晕倒。
页: [1] 2 3 4 5 6
查看完整版本: AutoDrv命令行版的驱动备份工具!(新版支持直接在PE下搜索并加载驱动)