INF安装信息文件⑥

来源:互联网 发布:民航货运员 知乎 编辑:程序博客网 时间:2024/05/17 22:07

INF高级应用实例

  利用INF文件,我们可以完成很多意想不到的操作,这里通过几个实例进行说明:

 

  实例一:完全删除驱动程序

 

  很多情况下,当我们将不需要的硬件设备从系统拔出或取消连接后,其驱动程序并未从系统中真正删除,系统中仍然保留了这些设备的驱动程序文件和信息,时间一长,不仅会导致系统越来越庞大,而且这些顽固的驱动程序可能会影响新设备的安装,因为Windows会自动记忆曾安装过驱动程序的设备的INF文件信息,当我们再次安装同类型硬件时,系统会自作聪明的自动安装旧硬件的驱动程序,而拒绝接受新的驱动程序。

 

  说到这里可能有人要问为什么要删除驱动程序和安装信息文件。这是有原因的,不知道大家注意到Windows的驱动程序安装中的一个问题没有,在安装驱动程序时需要查找驱动程序无论你是否指定搜索的位置,Windows都首先搜索自身的INF文件夹在其中查找认为合适的程序。而且当找到多个合适的驱动程序后它首先考虑的是INF文件夹的纪录的驱动程序,有时还不加询问自动安装这个驱动程序。这一点使我们更新或更换驱动程序带来了麻烦,因为有这样的情况当第一次安装了一个错误的驱动程序后,Windows就把这个错误的驱动程序的INF文件拷贝下来,要想重新安装正确的驱动程序时Windows总是安装错误的驱动程序,它总把INF文件夹中的“安装信息”文件认为是正确的而排斥其它的驱动程序。我们有很多方法来解决这个问题,但我认为找到不需要的“安装信息”文件并且删除它是最彻底的。

 

  例如笔者所使用的电脑,虽然提供了IEEE 1394接口,但由于平时并不使用相应设备,于是打算将其从系统中彻底卸载。首先从“控制面板”打开“设备管理器”窗口,在“IEEE 1394总线主控制器”下选择“Texas Instruments OHCI Compliant IEEE 1394 Host Controller设备”,右击后切换到“驱动程序文件详细信息”窗口,如图2所示,这里清楚地列出了该设备所对应的全部驱动程序文件的详细路径,请记录下来一一删除即可。对于未能正确显示驱动程序文件信息的设备,我们可以用记事本打开相应的INF文件,在[SourceDisksFiles] 小节查找所有的XXX.dll、XXX.vxd、XXX.drv、XXX.exe、XXX.ini等类型的文件名,记录下来后手动删除。

 

  接下来,我们还需要进入C:\Windows\INF\文件夹,这里找到了1394.INF、1394vdbg.INF两个文件,将其全部删除就可以了。

 

  实例二:未通过WHQL认证的设备驱动程序的INF文件

 

  对于未通过微软WHQL认证微软数字签名认证)的设备驱动程序,安装后你可能无法找到其对应的INF文件,它们的位置在哪里呢?

 

  原来,Windows对于那些未通过WHQL认证的设备驱动程序,安装时并未直接将相应的INF文件复制到C:\Windows\INF\文件夹中,而是进行了重新命名,以便系统识别和管理,当然这些文件的位置并未改变。它们的文件名以oem*开头,这里的“*”代表具体的数字,从0开始,其内容构成与普通的INF文件没有什么区别。

 

  实例三:让Windows认识改造硬件

 

  Analog Device公司为板载声卡提供了配套的SoundMAX驱动程序,通过安装在主板上的Codec与预告加载的音频渲染软件结合在一起,提供了广受欢迎的Yamaha DLSbyXG音色库和Sensaura 5.1 Virtual Theater环绕声,并且支持所有主流游戏音频技术,可惜的是只支持AD188x、AD189x、AD198x等有限的芯片。如果你的板载声卡使用了其他公司的芯片,在安装时将无法继续。

 

  不过,通过某些技术手段,我们可以让非AD1985芯片的板载声卡安装SoundMAX驱动程序,这自然又要用到INF文件了。首先,从驱动网站下载5.12.5243 WDM版本的SoundMAX驱动程序,下载时请注意对应相应的操作系统版本,将下载回来的文件解压缩,在“\SMAXWDM\W2K_XP\”文件夹有三个INF文件,其中smwdmCH4.inf文件对应的是Intel系列的ICH4芯片,smwdmCH6.INF对应的是Intel系列的IC6芯片,由于笔者使用的是VIA系列的芯片组,因此这里选择了smwdmCH5.inf,用记事本打开后定位到[AnalogDevices]小节的最后一行,按照固定的格式将板载声卡的ID号添加过来。

 

  板载声卡的ID号,可以在“DirectX诊断工具→声音”窗口中查看到,例如“PCI\VEN_1106DEV_3058SUBSYS_001214C0REV”,添加时请注意使用相同的格式,另外必须将两个“&&”符号补充在相应的位置,以保证足够的字符个数,否则安装时仍然会无法通过。接下来,我们就可以顺利安装SoundMAX驱动程序了。

 

用.INF文件编辑注册表

 

  .INF文件可以编辑操纵注册表,相应的的命令是AddReg和DelReg,语法如下:

 

 

AddReg = add-registry-section[,add-registry-section]...
[ add-registry-section]
reg-root-string, [subkey], [value-name], [flag], [value]
[add-registry-section]节定义了将要添加的注册表子键或值名,可以有选择地设置它的值。
DelReg = del-registry-section[,del-registry-section]...
[ del-registry-section]
reg-root-string, subkey, [value-name]
[ del-registry-section]节定义了将要从注册表中删除子键subkey或值名value-name。

 

 


  有时候上网遇到某些网站,修改了IE的主页,然后禁用了REGEDIT工具,这个时候很多人只好借助于其他第三方工具如魔法兔子等来恢复注册表的编辑权限,其实这个时候仅仅依靠.INF文件就可以恢复使用REGEDIT工具的权限。


  把下面的这段代码复制到记事本里,另存为RegHYGX.inf,然后右击它选择“安装(I)”,就可以了。


 

 

;示例06 寒夜孤星 RegHYGX.inf编辑注册表实例

[Version]
  Signature="$CHICAGO$"
  [DefaultInstall]
  AddReg=My.Add.Reg
  [My.Add.Reg]
  HKCU,"SOFTWARE\Microsoft\windows\currentversion\policies\system","disableregistrytools", 0x00010001,"0"
HKLM,"SOFTWARE\Microsoft\windows\currentversion\policies\system","disableregistrytools", 0x00010001,"0"

 

 
  当然还可以用其他的方法,原理也是一样的,这里仅仅是演示一下.INF文件的用途。


  直接使用注册表文件,有时候还会遇到另外一个缺点,就是.REG文件里面使用16进制代码表示UNICODE字符串的,如下面的两条注册表语句:

 

 

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders]
"Cookies"=hex(2):25,00,55,00,53,00,45,00,52,00,50,00,52,00,4f,00,46,00,49,00,4c,00,45,00,25,00,5c,00,43,00,6f,00,6f,00,6b,00,69,00,65,00,73,00,00,00,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SoftEther]
"ImagePath"=hex(2):22,00,44,00,3a,00,5c,00,50,00,72,00,6f,00,67,00,72,00,61,00,6d,00,20,00,46,00,69,00,6c,00,65,00,73,00,5c,00,53,00,6f,00,66,00,74,00,45,00,74,00,68,00,65,00,72,00,5c,00,53,00,6f,00,66,00,74,00,45,00,74,00,68,00,65,00,72,00,2e,00,65,00,78,00,65,00,22,00,20,00,73,00,65,00,72,00,76,00,69,00,63,00,65,00,00,00,00,00

 

 

  这上面两条语句难以阅读和修改,手工修改的话很麻烦,其中
"Cookies"的值实际上就是“%USERPROFILE%\Cookies”字符串的UNICODE表示。
"ImagePath"的值实际上就是"D:\Program Files\SoftEther\SoftEther.exe" service


  如果用.INF文件的形式的话,就很简单明白了:


 

 

;示例07 寒夜孤星 RegHYGX2.inf编辑注册表实例

[Version]
Signature="$CHICAGO$"
[DefaultInstall]
AddReg=Folders_AddReg
[Folders_AddReg]
HKCU,"Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders","Cookies",0x00020000,"%USERPROFILE%\Cookies"
HKLM,"SYSTEM\CurrentControlSet\Services\SoftEther","ImagePath",0x020000,"""D:\Program Files\SoftEther\SoftEther.exe"" service"


  这个时候可以手工修改里面的路径信息,而.REG文件则很难做到这一点。

 

 

用.INF文件编辑.INI文件

 

  .INF文件可以使用UpdateInis命令修改.INI文件的功能也经常需要,UpdateInis的语法如下:

 

 

UpdateInis = update-ini-section[,update-ini-section]...
[ update-ini-section-name]
ini-file, ini-section, [old-ini-entry], [new-ini-entry], [flags]
[update-ini-section-name]节给出的 .INF 文件中替换、删除或添加的全部条目。

 

 
  ini-file 包含要更改条目的 .ini 文件名。 ini-section 包含要更改条目的节名。 old-ini-entry 可选,常用形式为 Key=Value。new-ini-entry 可选,常用形式为 Key=Value。flags 是可选操作标记。
使用逻辑磁盘标识符 (LDID),可以方便的修改.INI文件中的路径信息,当然其他的条目也同样。举例如下: Total Commander ,是一套极佳的文件管理员,内含各种压缩与解压缩,类似NC般非常好用的工具,对于文件与路径的寻找,除一般的复制、删除、搬移、编辑等功能外,还有FTP功能(具有续传、背景传输)与解决了中文乱码问题,"专题"再也不会变成"彩题"、新增文件分割、文件合并、文件编码、文件解码(MIME,UUE,XXE)及新的操作介面(浮动工具列)。真是一套相当强悍可完全取代文件总管的工具程序。
Total Commander依靠wincmd.ini来配置相应的操作特性和功能,于是可以使用如下的.INF文件修改wincmd.ini中的路径信息。

 

;示例08 寒夜孤星编辑.INI文件实例

[version]
Signature="$CHICAGO$"
[DefaultInstall]
AddReg=AddGhister
UpdateInis=UpdateInicmd
[AddGhister]
HKCU,"Software\Ghisler\Total Commander","IniFileName",0,".\\wincmd.ini"
HKCU,"Software\Ghisler\Total Commander","FtpIniName",0,".\\wcx_ftp.ini"
[UpdateInicmd]
%01%\wincmd.ini, Configuration,,"InstallDir=%01%"
%01%\wincmd.ini, Configuration,,"Mainmenu=%01%\LANGUAGE\TCExtMenu.mnu"

 

 


  其中 [AddGhister]节负责修改注册表中记录的wincmd.ini的路径,而[UpdateInicmd]节负责修改wincmd.ini文件红的相应路径信息,可以看出,一个简单的.INF文件就完成了修改Total Commander的路径的任务,在Total Commander5.x版本中,必须修改wincmd.ini文件中的路径信息,这个时候使用.INF文件是非常方便的。


用.INF文件删除正在使用的文件

 

  有时候由于某些文件正被操作系统使用而无法删除,如某些用于资源管理器的OCX控件,可以使用.INF文件的DelFiles命令删除,该命令如果发现要删除的文件被锁定,就会把文件放到系统删除队列中排队,等系统重启动的时候,该文件就自动被删除了。


  Delfiles的语法是:

 

Delfiles= file-list-section [,file-list-section]...
[file-list-section]
filename,,,1

 

 
  [file-list-section]节定义了将要删除的文件列表,filename后面的1是一个标志,指明如果文件当前无法删除,就等到系统重启动后删除。把下面的这段代码复制到记事本里,另存为delinuse.inf,把这个文件拷贝到无法删除的文件的目录,然后右击它选择“安装(I)”,就可以删除当前目录下正在使用的setup.exe和setup2.exe。


 

 

;示例09 寒夜孤星删除正在使用的文件实例

[Version]
Signature="$Chicago$"

[DestinationDirs]
DefaultDestDir = 01 ; 当前目录 ,定义了将要删除的文件的路径
[DefaultInstall]
DelFiles = DELETELIST
[DELETELIST]
setup.exe ,,,1; 将要删除的文件
setup2.exe ,,,1; 将要删除的文件

 

 


  同样可以使用Copyfiles命令替换系统正在访问的文件。这些功能通过普通的del和copy命令都无法实现,如果不使用.INF文件,必须使用第三方的软件来完成。

 

辅助制作绿色软件

 

  在注册表.REG文件中,不可以使用变量,这个缺陷对于需要设置路径的安装程序来说,是非常致命的弱点,.REG文件中的路径都是静态的,一旦写好,就不会随着系统的变化而变化,如果需要把安装的程序从C盘改变到D盘,而在.REG文件中记录了安装路径的话,这个时候直接倒入注册表文件.REG是不行的,导入的注册表仍然是原来写入的路径。而在.INF文件中,可以使用变量来操纵路径,从而可以跟踪安装程序所需要的路径的变化。


  对于绿色软件的制作,可以看我写的另外的专门的文章——绿色软件的制作,其中核心的一点就是获得原来软件的安装程序所做出的注册表的改变,然后把该变化导出为一个注册表文件.REG来进一步分析。如果导出的.REG文件不包括绝对路径,那么可以把该注册表文件和提取出的软件打包在一起做成绿色软件。如果导出的.REG文件中包含当前软件的绝对安装路径,那么就必须每次都要手工修改注册表中路径,是很麻烦的,降低了做成绿色软件的意义所在。而使用.INF文件,使用AddReg命令可以轻松容易的解决这个注册表路径的难题。

 

  对于绿色软件的安装制作来说,最重要的就是01,也就是源文件夹。下面举一个例子:
Registry Crawler V4.5 ,是强大的用户和开发者快速定位并配置注册表的工具软件。一个强大的搜索引擎允许你基于搜索标准查找注册信息。(可以从天空软件站下载http://www4.skycn.com/soft/2963.html),安装完成后导出的注册表包含着如下一条语句:

 

[HKEY_LOCAL_MACHINE\SOFTWARE\4Developers\RCrawler\AppPath]
@="F:\\tools\\Reg\\RCrawler"
其中“F:\tools\Reg\RCrawler”是安装路径。

 

 
而改写为.INF文件就是:

 

 

;示例10 寒夜孤星实例

[version]
Signature="$CHICAGO$"
[DefaultInstall]
AddReg=Add
[Add]
HKLM,"SOFTWARE\4Developers\RCrawler\AppPath","",0,"%01%"

 

 
  注意里面的%01%就代表当前的安装路径

 

  当我们把F:\tools\Reg\RCrawler这个目录下的文件移动到其他目录时候,要用.REG文件的方式的话,就必须手工修改注册表文件,而使用前面的.INF文件的时候,什么都无需修改,只要在文件管理器explorer里面,用鼠标右键执行“安装”命令的时候,%01%就自动被替换为当前所在的目录了。

最后,总结一句,注册表文件.REG非常方便和直观,但是对于处理路径的变化的情况,非常笨拙和不方便,而.INF不如注册表文件直观,但是可以方便的处理路径信息(包括UNICODE的路径信息),所以应该把.REG文件和.INF文件结合使用,互相弥补各自的缺点。

 

Autorun.ini自动运行

  

1 .自动播放运行程序

 

 

;示例04 寒夜孤星 AutoRun.inf自动播放

[AutoRun]
open=setup.exe
icon=%SystemRoot%\system32\SHELL32.dll,27

 

 

open=后面为exe、bat、com等可执行文件名,允许使用相对路径,但必须和Autorun.inf文件隶属于同一根目录下。

icon=后面为含有图标的文件,或bmp文件。“,”后面为改图标的索引标记。如果该文件包含多于一个图标,必须用一个从0开始的索引进行标记。即第一个图标为0,第二个图标为1,第三个图标为2。

说明:该 AutoRun.inf 文件必须在根目录下。

( 2 ) ShellExecute 命令:在所有的驱动器上生成“自动播放”菜单项。双击时自动运行“=”后的文件,此时“=”后可以为任意扩展名的文件。

格式:ShellExecute = *.*[path\]*.*

 

2 .自定义驱动器图标格式:

 

 

;示例11 寒夜孤星 AutoRun.inf驱动器图标

[AutoRun]
icon=Autorun.ico,

 

 

icon=后面为含有图标的文件,或bmp文件。“,”后面为改图标的索引标记。如果该文件包含多于一个图标,必须用一个从0开始的索引进行标记。即第一个图标为0,第二个图标为1,第三个图标为2。

注意:path路径必须是本驱动器的路径,即ico、bmp、exe、dll等文件必须在本驱动器内。

 

3、添加右键菜单

 

 

;示例12 寒夜孤星 AutoRun.inf右键菜单

[AutoRun]

shell\命令提示符\command=%SystemRoot%\system32\CMD.exe

 

 

格式:shell\名称\command=命令

“名称”即你想要的右键菜单名称,“命令”即你在单击该菜单项时执行的命令。

 

原创粉丝点击