无忧启动论坛
标题:
转帖:探访微软动力之源
[打印本页]
作者:
水啊水
时间:
2007-9-24 17:35
标题:
转帖:探访微软动力之源
提起INF文件,相信大家都不会感到陌生,我们常常在安装驱动程序时看到它们的身影。不过大多数朋友对INF文件的认识也仅限于“好像是驱动程序里面的东东”。孰不知,就是这样一个大名鼎鼎,但又神神秘秘的文件也可以做很多你意想不到的工作。今天我们就来认识一下这个“熟悉的陌生人”,看看通过它都能玩出什么花样!
什么是INF文件?
INF是Device Information File(设备信息文件)的缩写,是微软为方便硬件制造厂商发布其设备驱动程序而创建的一种文件格式,其主要功能是用来记录硬件安装信息,也就是告诉
Windows
要正常使用该硬件所需要的驱动程序文件。在安装硬件驱动程序时,系统根据INF文件的“指示”,把其中提到的必要的文件拷贝到相应目录下后,设备就能驱动并正常工作了。
INF文件从
Windows
3.X时代就已经开始进入人们的视野了,到了
Windows
9X时代被广泛使用。它是一种具有特定格式的文本文件,我们也可以称它是一种安装脚本(Setup Script)。
为何INF文件能“安装”?
或许有的读者朋友会感到奇怪:既然INF文件只是文本文件,那为什么在INF文件上点击右键弹出的菜单中会出现“安装”命令项呢?这是因为微软已在其
Windows
中提供了Setup API,程序设计人员只需使用任何文字编辑软件编写好INF文件,便可完成大部分安装工作。当软件并不是很大时,利用INF文件进行安装会非常适宜。
一、用INF文件鉴别硬件信息
一般的INF文件在开头都有注释,表明该文件所代表的硬件信息。不过,并不是所有INF文件都会有注释,所以我们要关注的是文件中的两项内容:
1.“CLASS=”:它记录的是设备的类型。目前常见的类型有:Display(显示设备,如显卡)、Monitor(显示器)、Media(多媒体设备,如声卡)、Net(网络设备,通常是网卡)、Modem(调制解调器)、Printer(打印设备)、Image(图像捕获设备,如摄像头);
2.“[Manufacturer]”:它后面的字符串代表的是设备生产商名称。从以上这几项中就可以大概判断出该硬件是什么厂商生产的什么类型和名称的设备了。
从图1可以看出,该硬件是多媒体设备(CLASS=Media),生产商是微软([Manufacturer]中%MfgName%=Microsoft)。
你知道吗?
揭密
Windows
的安装路径图
如果想知道
Windows
2000安装时是如何知道每项工作的正确走向的,那么可以看看安装完成后留下的路径图。而它就藏在“C:\WINNT\INF\syssetup.inf”文件中,它是一个指令列表,这些指令显示了升级和彻底安装了什么及安装到哪个文件夹等信息。另外,像cdrom.inf是建立CD-ROM驱动器相关文件、disk.inf是建立硬盘驱动器的相关文件。不过,要特别注意的是,这些文件只能看不能随便修改。
二、INF文件还可以这样装
INF文件最常用的运行方式便是通过其右键菜单中的“安装”命令来执行。除了这种方法,还有以下两种方式:
1.通过命令行运行INF文件
我们可以使用命令行形式来执行一个INF文件所代表的安装任务,其语法格式为:
rundll32 setupapi,InstallHinfSection DefaultInstall 2 Filename.inf
比如:在E:\video目录下有一个divx50.inf的文件(视频解码器的安装文件),便可以依次点击“开始→运行”,输入“rundll32 setupapi,InstallHinfSection DefaultInstall 2 E:\video\divx50.inf”,按回车后便可以开始安装解码器了。
小提示
FileName.inf应是包含完整路径的文件,否则系统会提示找不到INF文件。
2.通过自解压文件自动执行
对许多电脑的初学者来讲,利用右键菜单进行安装或许很难“接受”,这时可以建立一个自解压文件,让该文件在解压缩完成后自动运行INF安装程序。
实例:用WinRAR制作一个自动安装INF文件的程序
将INF文件及其他相关文件用WinRAR进行压缩,在压缩选项中勾选“创建自释放格式档案文件”,并在“高级”选项卡中点击“SFX选项”进入到“高级自释放选项”对话框,在“释放后运行”下的输入框中输入INF文件名即可(见图2)。以后,只要双击该自解压文件,选择好解压缩路径后,INF文件便会自动运行,非常方便。
Just Do It
利用上面介绍的方法可以制作某些硬件驱动程序的自动安装程序,只要它们是基于INF文件来进行安装的就行。以后硬盘中的驱动备份文件就只是一种硬件对应一个文件(驱动备份文件夹会变得十分清爽),需要时直接双击该文件进行安装即可。
三、文件安装路径
在使用INF文件安装程序时,有一点让我们感到不习惯的是无法让用户自己选择安装路径。可奇怪的是,并不是所有的文件都安装到了同一个目录下,那么到底是谁在指定安装“目的地”呢?
如果大家注意观察一个INF文件,其中会有一个名为[DestinationDirs]的语段。这个语段下面的数字代表的就是安装路径。下面笔者就把一些典型的数字及其所具体代表的路径列于下表,供读者朋友们参考:
数字 代表的目录 举例
0 逻辑驱动器盘符 C:\
2、5
Windows
临时安装目录 C:\WININST0.400
3 卸载文件夹 C:\UNINSTAL.000
4 备份文件夹 C:\UNINSTAL.000
10
Windows
目录 C:\WINDOWS
11 系统目录 C:\WINDOWS\SYSTEM
13 Command文件夹 C:\WINDOWS\COMMAND
17 INF文件夹 C:\WINDOWS\INF
18 帮助文件夹 C:\WINDOWS\HELP
20 字体文件夹 C:\WINDOWS\FONTS
24
Windows
所安装的分区目录 C:\
25 共享文件夹 C:\WINDOWS
30 启动分区根目录 C:\
32 旧的
Windows
文件夹(如果存在) C:\Win31
33 旧的DOS文件夹(如果存在) C:\DOS
四、INF文件的制作
或许你会觉得奇怪,这么小巧的安装文件到底是怎么做成的呢?微软本身就提供了INF文件的制作工具INF Editor,但比起INF-Tool这款软件来讲就逊色多了。
INF-Tool小档案
软件版本:6.3d Lite 软件大小:1.56MB
软件性质:免费软件(专业版需要注册) 适用平台:
Windows
95/98/ME/NT/2000/XP
下载地址:
http://www.inner-smile.com/INFTool.EXE
多国语言包下载地址:
http://inner-smile.com/INFTool-lang.zip
软件备注:INF-Tool提供有多国语言包,只要把代表相应语言的LNG文件拷贝到INF-Tool安装目录中的LANG文件夹即可(例如简体中文语言包的对应文件为IT_chg.lng)。
对于一个没有任何编程经验的用户来说,要制作出具有安装过程的程序是一件非常棘手的事情,而利用INF-Tool Lite,即使不是专业的程序员也能制作出具有相当水准的安装程序!并且非常小巧,制作出的INF文件只有2~3KB,而且不需要setup.exe文件。同时,也可以用INF-Tool Lite制作一个包含setup.exe文件的INF文件包,这样就能像通常的安装操作一样直接双击setup.exe
进行安装(Lite版不具备此功能)。软件界面非常的明了,只需要按照选项卡上标出的序号按部就班地进行操作即可完成INF文件的制作(见图3)。
实例:制作一个字体安装程序
为了方便读者理解,我们一起来制作一个简单的字体安装程序,也就是实现把字体文件拷贝到系统的字体文件夹(C:\Windows\Fonts)中。
在“项目信息”选项卡中输入要生成的INF文件相关信息,包括文件名、简介、作者姓名等;
进入“安装文件列表”选项卡,点击“新增”按钮,找到要安装的字体文件添加到文件列表中;
在“目标目录”选项卡中,通过“新增”按钮选择要安装的文件夹,并点击箭头符号为文件清单中的文件选择目标目录;
由于本例较为简单,所以可以跳过“修改注册表”、“修改系统”等步骤,直接进入到“发布文件”选项卡。在该对话框中可以选择INF文件以及相关文件存放的目录,甚至还能直接把它们打包成为一个.exe文件(如图4)。点击“建立目录”按钮后再单击“确定”便大功告成!
五、INF文件的奇招酷技
前面讲了一些INF文件的基础知识,下面来看看它到底有些什么妙用。如果你认为INF文件只是进行设备信息管理这么简单,那可就大错特错了。其实,它还能完成一些日常的文件管理、注册表管理及系统维护等。
1.“卸载”驱动程序
在安装了某个设备后,即使该设备以后不再使用,系统中也会留下它的驱动程序信息,这对于很多讲究系统“纯洁”的用户来讲是无法接受的。可是,驱动程序的卸载并不像应用软件那么简单,也无法找到相应的卸载程序。那么,要怎么样才能彻底删除不需要的驱动程序呢?
删除驱动程序文件。打开“设备管理器”,右击要删除驱动程序对应的硬件,选择“属性”命令,切换到“驱动程序”选项卡,点击“驱动程序详细信息”按钮,在弹出的“驱动程序文件详细信息”对话框中便列出了所有的驱动程序文件(见图5),我们只要“按图索骥”,一一删除即可。删除“安装信息”文件。该文件位于
Windows
安装目录下的INF文件夹中。
★
Windows
98/Me:操作系统会把驱动程序中包含安装信息的INF文件直接拷贝到自身的INF文件夹中(位于C:\Windows\INF),因此,只需知道驱动程序原来使用的INF文件名就能在
Windows
的INF文件夹中找到对应文件,将其删除。
★
Windows
2000/XP:
Windows
2000/XP却不是直接拷贝INF文件,它们对没有经过微软认证的驱动程序的INF文件都会改名存放,而且目前不少驱动程序都没经过认证,所以要找到它们还要费些功夫。如果你注意观察,会发现在INF文件夹中有很多以OEM开头的文件,这就是
Windows
2000/XP的杰作。它们把没有经过认证的安装信息文件改名为OEMx.INF和OEMx.PNF(PNF为预编译信息文件)来存放。我们只需要根据上面关于INF文件的内容介绍便可以轻松找到相应文件。
小提示
x是从数字0开始的正整数,例如:OEM0.inf和OEM0.PNF表示第一个没有认证的驱动程序安装信息文件,依此类推。
2.为“原配”驱动程序“正名”
有的读者在安装驱动程序时可能会碰到这样一个莫名其妙的问题:明明是正确的驱动程序,可是
Windows
偏偏就不“认账”,而是安装了一个自己根本不想要的驱动。其实,这就是INF文件在其中“捣鬼”。
Windows
在安装驱动程序时,如果需要查找驱动程序,无论是否指定搜索具体位置,它都会首先搜索自身的INF文件夹,在其中查找认为合适的程序。如果恰巧存在多个合适的驱动程序,
Windows
会首先考虑安装自己INF文件夹中的驱动程序,有时还会“自做主张”地把这个驱动程序自动安装好。虽然看起来很“体贴”,但当我们想要更新或更换驱动程序时就麻烦了。因为当第一次安装了一个
错误
的驱动程序后,
Windows
就会把这个
错误
的驱动程序的INF文件拷贝下来。当重装正确的驱动程序时,
Windows
总把INF文件夹中的安装信息文件认为是正确的而排斥其他驱动程序,这就是为什么正确的驱动程序反而被“拒之门外”的原因了。因此,要顺利地完成驱动程序的安装,只需按照上面介绍的办法到INF文件夹中找到该“安装信息”文件删除它即可。
3.注册表修改任我行
INF文件不仅可以用来进行设备管理,它还有个比较“另类”的用途,那就是修改注册表。我们可以在INF脚本中加入一些控制和修改注册表的语句,
Windows
将会根据这些语句对注册表进行一系列的操作,从而达到维护注册表的目的。
小提示
大家可能会问:修改注册表直接运行注册表编辑器即可,何需INF文件来“多事”?其实不然,当系统无法打开注册表编辑器,且编辑reg文件导入注册表也失败时,INF可就派上大用场了。
实例1:在
Windows
XP中修改自动登录的用户
为了方便,许多用户都把自己的电脑设置为自动登录,但有时需要更改自动登录的用户(假设已经存在用户名cfan,密码为1234),此时就可以利用INF文件来实现。
打开记事本,并在编辑窗口中输入下面的注册表控制语句:
[Version]
Signature="$
Windows
NT$"
[DefaultInstall]
ADDREG=MYADDREG
[MYADDREG]
HKLM,SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon,DefaultUserName,cfan
HKLM,SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon,DefaultPassword,1234
输入完毕后,将其保存为login.inf。
找到并右击刚才创建好的“login.inf”文件,并用鼠标右键单击该文件,从打开的右键菜单中执行“安装”命令,上面设置的键值便被添加到了注册表中,下次启动时
Windows
便会以用户名cfan自动登录了。
小档案:
用于修改注册表的INF脚本文件格式:
(1)Version语段
[Version]
signature="$CHICAGO$"
该语段是所有INF文件必需的,而Signature后的签名在不同的操作系统中有所不同,
Windows
95/98/Me为“$Chicago$”(当初
Windows
95的研发代号就叫Chicago),
Windows
NT/2000/XP则为“$
Windows
NT$”。
(2)DefaulInstall语段
[DefaultInstall]
AddReg=MyAddReg(添加注册表值)
DelReg=MyDelReg(删除注册表值)
在该语段中,等号左侧的语句是不能更改的,而等号右侧的语句可以用户自己定义,但一定要和Registy语段中的语句保持一致。
(3)Registy语段
[MyAddReg]
HKEY, Subkey, Name, Type, Value
在DefaultInstall语段中建立的语句都必须在Registry语段中建立新的语句得到体现,新语句的头应和等号右侧的名称一致(例如MyAddReg)。
“HKEY”:为根键的缩写(见下表)。
HKCR HKEY_CLASSES_ROOT
HKCU HKEY_CURRENT_USER
HKLM HKEY_LOCAL_MACHINE
HKU HKEY_USERS
HKCC HKEY_CURRE
NT_CONFIG
HKDD HKEY_DYN_DATA
“Subkey”:为子键,不包括根键;
“Name”:要添加的键值项;
“Type”:键值的类型,0代表字符串值,1代表二进制值;
“Value”:键值项的值。如果是删除某键值项,则只需要输入前面三部分即可,“Type”和“Value”项无需输入。
比如:要将[HKEY_LOCAL_MACHINE\Software\Microsoft \Windows\MyEntry\]中字符串值“Howdy”的键值设置为“Hello World”,那么应写为:
[MyAddReg]
HKLM,Software\Microsoft\Windows\MyEntry,Howdy,0,"Hello World"
接着再将刚才添加的键值删除,那么应为:
[MyDelReg]
HKLM,Software\Microsoft\Windows\MyEntry,Howdy
Just Do It
经常上网的朋友可能都有被恶意网站“袭击”的经历,而恶意网站做的最多的就是把注册表编辑器给禁止了。一般大家使用的解锁方法都是建立一个reg解锁文件,再把该文件导入注册表。但在很多情况下,这个方法根本就无效。此时,INF命令可以大显神威。请根据上面的介绍写一个解锁的INF文件。上锁的注册表修改方法为:在[HKEY_CURRENT_USER\Software\Microsoft\Windows \CurrentVersion\Policies\System]右侧窗格增加“Disableregistrytools”双字节值,并将其设置为1。
4.系统维护全自动
你可能没有想到吧,用INF文件就能够让
Windows
XP进行一些日常自动维护,例如定期进行磁盘整理。下面以让
Windows
XP在每月第一天上午9:00进行磁盘碎片整理工作,完毕重启时进行磁盘检查,并且自动修复所发现的
错误
,修复完毕自动关机。
建立defrag.bat文件
请以管理员账户登录
Windows
XP,在C盘的根目录下新建一个名为defrag.bat的文件(也可以取名为其他文件名),对C盘进行磁盘碎片整理,并且在下次启动时进行磁盘检查并修复
错误
。其内容如下:
cd\
C:
cd
Windows
\system32
defrag C: /f
chkntfs C:
小提示
★defrag的参数
defrag <驱动器号> [-a] [-f] [-v]
-a 只进行分析
-f 即使可用空间不足,也强制进行碎片整理
-v 输出详细整理结果
★CHKNTFS的参数
CHKNTFS <驱动器号> [/D] [/C]
/D 将电脑恢复成默认状态,启动时检查所有驱动器,并对有问题的驱动器执行chkdsk命令。
/C 安排启动时检查驱动器,如果驱动器有问题,运行chkdsk。
建立defrag.inf文件
同样在C盘根目录下新建一个名为defrag.inf的文件,引导
Windows
进行defrag.bat中的操作,并在完成后自动关机。其内容为:
[version]
Signature="$
Windows
NT$"
AdvancedINF= 2.5,"advpack.dll"
[DefaultInstall]
RunPreSetupCommands=Tst.PreSetup
RunPostSetupCommands=Tst.PostSetup
[Tst.PreSetup]
C:\defrag.bat
[Tst.PostSetup]
C:\WINDOWS\SYSTEM32\TSSHUTDN.EXE 10 /DELAY:0 /POWERDOWN
建立start.bat文件
在C盘根目录下建立一个名为start.bat的批处理文件,其内容为:
C:\Windows\System32\rundll32.exe advpack.dll,LaunchINFSectionEx C:\defrag.inf,DefaultInstall,32
这个命令的作用是让
Windows
XP启动一个硬件安装过程,从而执行inf文件中的指令。
小提示
rundll32.exe调用了advpack.dll中的LaunchINFSectionEx函数,该函数的作用就是启动一个.inf安装过程即defrag.inf。整个语句必须连续输入,不能分行。
利用计划任务进行定期磁盘整理
进入“控制面板→任务计划”,将C盘根目录下的start.bat文件添加为一个任务,并为它进行时间设置,比如:每个月的第一天的9:00。
小提示
也可以把defrag.bat文件的内容加上其他命令,例如文件备份等,使系统自动维护内容更丰富。
5.修改
Windows
Me的安装
许多朋友不喜欢
Windows
Me所附带的系统还原、PCHealth、Movie Maker、
Windows
Media Player 7,那么可以下载setme.zip(下载地址:
http://members.aol.com/files4u/SETME.ZIP
),该压缩包中有个经过特殊处理的“Setuppp.inf”文件,用它替换掉安装光盘中的同名文件,在干净安装
Windows
Me时就可以不安装上述组件了。不过,条件是需要在C:\WIN9X目录下运行Setup程序,因此事先要将
Windows
Me安装光盘中WIN9X下的所有文件复制到C:\WIN9X(先自行创建)中。不过,这个在安装过程中,C:\_Restore和C:\Windows\Pchealth文件夹还会自行创建,不过,在安装后可以安全删除。
小提示
还有不少高手会将显卡、显示器的驱动程序中的.inf文件进行修改,从而使其在
Windows
中显示为个性化的品牌或型号。
6.让
Windows
98自动安装驱动程序
Windows
98安装光盘中有一个叫做“硬件信息安装程序”的工具,它允许用户将电脑硬件的驱动程序添加到安装程序中,并更新安装程序。该工具位于安装光盘的\TOOLS\RESKIT\INFINST\infinst.exe。建议将安装光盘中的所有安装程序复制到硬盘,然后将所有驱动程序分门别类保存到同一个文件夹中,然后运行infinst.exe进行集成。
作者:
lasti
时间:
2007-9-24 19:30
嗯嗯,很不错,原来inf可以做这么多东西的
作者:
lisong
时间:
2007-9-24 22:10
好东西,学习了!!!!!!!!!
作者:
wipe
时间:
2007-9-25 09:23
学到了不少,,收藏先
作者:
nn2nn
时间:
2007-9-25 21:08
提示:
作者被禁止或删除 内容自动屏蔽
欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/)
Powered by Discuz! X3.3