找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16347|回复: 47

你的秘密藏不住,深入了解INF文件

跳海自杀的鱼 发表于 2006-6-13 20:24:15 | 显示全部楼层 |阅读模式 来自 中国浙江嘉兴

马上注册,结交更多好友,享用更多功能。

您需要 登录 才可以下载或查看,没有帐号?注册

x
(Ⅰ).你的秘密藏不住,深入了解INF文件


大家都知道,在“我的电脑”里有数也数不清的INF文件,但是却很少有人知道,INF文件是干什么用的。充其量,也仅仅停留在INF文件能够解开锁定的注册表这一感性的认识上,那么到底什么是INF文件,INF文件又能干些什么呢?今天让我们一起走进INF文件这一神秘的世界。

  揭开INF文件的神秘面纱

  INF是Device INFormation File的英文缩写,是Microsoft公司为硬件设备制造商发布其驱动程序推出的一种文件格式,INF文件中包含硬件设备的信息或脚本以控制硬件操作。在INF文件中指明了硬件驱动该如何安装到系统中,源文件在哪里、安装到哪一个文件夹中、怎样在注册表中加入自身相关信息等等。 安装监视器、调制解调器和打印机等设备所需的驱动程序,都是通过INF文件,正是INF的功劳才使得Windows可以找到这些硬件设备的驱动并正确安装。当我们通过“开始→控制面板→添加删除程序→Windows安装程序”来添加系统组件的时候,INF文件将会自动调用。而在其他场合下,则需要在INF文件上点击鼠标右键,然后选择“安装”,你才能顺利安装应用程序。  

  在C:/Windows/INF文件夹中存放有大量的INF文件。该文件夹一般处在隐含状态,如果你想查看该文件夹,可选择“查看→文件夹选项→查看”,然后在“文件和文件夹”选项下选择“显示所有文件”。

  解剖INF文件的结构

  INF文件其实是一种纯文本文件,可以用任意一款文本编辑软件来打开进行编辑,如:记事本、写字板等。INF文件有一整套的编写规则,每一个INF文件都是严格按照这些规则来编写的。

  *规则一:INF文件是分节的,每一个INF文件有许多的节组成,节名用方括号括起来。这些节名有些是系统定义好的,有一些是用户自定义的。每一个节名最长为255个字符(Windows 2000/XP/2003操作系统中)或28个字符(Windows 98操作系统中)。节与节之间没有先后顺序的区别,另外,同一个INF文件中如果出现两个同样的节名,则系统会自动将这两个节名下面的条目合并到一起。

  *规则二:在节与节之间的内容叫条目,每一个节又是由许多的条目组成的,每一个条目都是由形如“signature="$CHICAGO$"”的形式组成的。如果每一个条目的等号后有多个值,则每一个值之间用“,”号分隔开。

  *规则三:INF文件对大小写不敏感。

  *规则四:“;”号后面的内容为注释。

  *规则五:如果一个条目的内容过多,在一行无法书写完全,则用“\”将一行内容书写为多行。

  明白了INF文件的规则后,让我们一起来解剖INF文件的结构。
 1.Version节

  每一个INF文件都包含一个这样的节,该节中的条目主要是描述此INF文件支持的设备类型和适用的操作系统。在该节中如果出现“signature="$CHICAGO$"”这样的条目则表示该INF文件适用于Windows 98之后的所有操作系统,如果包含“signature="$Windows NT$"”这样的条目则表示该INF文件适用于Windows 2000/XP/2003操作系统,而且两者必具其一。

  另外,该节中“CLASS”条目很重要,它表明了设备的类型,常见的类型有:Display(显示设备,如显卡)、Media(多媒体设备,如声卡)、Net(网络设备,通常是网卡)、Modem(调制解调器)、Printer(打印设备)、Image(图像捕获设备,如摄像头)。

  2.Manufacturer节

  该节中的条目主要是描述INF文件可以识别的所有硬件设备,其中包含有设备的生产厂家,以便设备的正确安装。如“%ATi%=ATi”指明设备的生产商为“ATi”,这个大家都不会陌生吧,是显卡的生产商。

  3.SourceDisksNames节

  该节主要指明安装文件所在的介质。如:“1="ATi Drivers Release CD"”表明所有驱动程序都在零售版的CD盘上。

  4.SourceDiskFiles节

  驱动程序文件列表及被安装的位置,该节必须结合[SourceDisksNames]节才能知道具体的位置。如“atinbtxx.sys=1”,则你必须到[DestinationDirs]节去查看“1”具体代表那个位置。

  5.DestinationDirs节

  INF文件会指示安装程序在安装的过程中,将一些文件复制到硬盘上,或者将硬盘上的一些文件删除、重命名等。该节即指定了为实现上述目的的文件所在的目的路径。

  6.DefaultInstall节和Install节

  在这一节中描述了设备驱动程序与硬件设备的实际属性。默认情况下,首先执行[DefaultInstall]节,该节指定了要复制或删除的文件,注册表的更新,INF文件的更新等等信息,同时又包含指向其他节的指针。

  7.String节

  这一节中定义了字符串变量,当某些字符串频繁地出现在INF文件中,为简化输入,可以在该节中定义一个字符串变量,代表该字符串出现在INF文件中。
读懂INF文件

  下面让我们以ATi显卡的用于Windows XP的WDM驱动程序为例来说明一下INF文件的具体含义,由于INF文件往往很长,为了说明方便,我们删除了一些大部分的信息,仅保留一个INF文件的结构,如图1所示。

  


  

  INF文件精彩实例

  光说不练不行,下面让我们来看几个INF文件的典型应用。

  1.打开“锁”定的注册表

  第一步:打开记事本程序,输入以下内容:

  [version]

  signature=”$chicago$”

  [defaultinstall]

  delReg=DeleteMe

  [DeleteMe]

  HKCU,“Software\Microsoft\Windows\CurrentVersion\Policies\System”,“DisableregstryTools”

  HKLM,“Software\Microsoft\Windows\CurrentVersion\Policies\System”,“DisableregstryTools”

  输入完毕,另存为UNLOCK.INF,名字任取,扩展名必须是INF。

第二步:在“UNLOCK.INF”文件上右键单击,在弹出的右键菜单中点选“安装”,如图2所示,被锁的注册表即会应声而开。

  




  2.巧妙利用INF文件自动备份重要的文件

  大家都知道,注册表是Windows操作系统的命根子,因此,系统启动时会自动运行注册表检查程序,自动更新备份注册表文件。在系统盘的Windows目录中有一个“Scanreg.ini”,Scanregw.exe每天所执行的默认操作都是在它的控制下运行的,我们可以利用这一原理实现对我们重要文件的备份。

  第一步:打开资源管理器,找到该文件,用记事本程序打开它。我们可以清楚地看到共有五个参数,如图所示。

  (1)Backup 这个参数值可为0或1,默认为1。值为1表示在每天首次启动时扫描注册表,值为0表示不进行任何注册表操作。

  (2)Optimize 这个参数值可为0或1,默认为1。值为1表示每次扫描注册表时删除注册表中的多余数据,从而优化注册表数据,值为0表示不进行删除操作。

  (3)ScanregVersion=0.0001 程序版本说明。

  (4)MaxBackupCopies 这个参数用来设置建立的备份文件的个数,值为5至99中的任一个数,默认值为5,即最大可建立五个备份文件,为更好的保护系统,一般来说设置10个左右为宜。

  (5)BackupDirectory 这个参数用来设置备份文件存放的目录,默认存放目录为Windows\Sysbckup,注意这里填写的必须是完整路径。

  (6)Files 在“Scanreg.ini”的最后有如下注释内容“;Files=[dir code,]file1,file2,file3”,将其前面的注释符号“;”去掉,你就可以自己DIY需要注册表检查程序备份的重要文件了。默认情况下,注册表检查程序创建注册表备份文件时,会将“system.dat”、“system.ini”、“user.dat”和“win.ini”四个文件保存在“cab”压缩文件中,如果你需要将其他重要的系统配置文件添加到此压缩文件中,可在“Files=”后面输入“[目录代码],文件名1,文件名2,文件名3”,文件名之间以逗号相隔,目录代码含义如下:

  10 代表C:\Windows目录

  11 代表C:\Windows\System目录

  30 代表C盘根目录

  31 代表Windows系统所在盘的根目录

  例如要把Autoexec.bat和Config.sys两个文件放到备份文件中,可设置参数为“File=30,config.sys,autoexec.bat”。

3.硬盘(U盘)也需个性化

  第一:给硬盘(U盘)DIY一个可爱的图标

  我们首先将硬盘的生硬图标替换为我们喜欢的图标,给硬盘披上美丽的彩衣。首先准备一图标文件,你可以用图标制作程序制作自己的图标文件,也可以使用现成的图标文件,最好是保存到硬盘某一个分区的根目录下。接着打开记事本程序,录入以下内容:

  [autorun]

  ICON=******.ICO

  其中“******”是图标文件的路径及图标文件名,请自行修改为具体的图标文件的路径及图标文件名。录入完毕,另存为“Autorun.inf”,并将其剪切到某一个你欲扮酷的分区的根目录下。

  第二:让硬盘能歌善舞

  想不想当你双击了硬盘分区或是点右键选择右键菜单中的“自动播放”之后,如图3所示,就自动打开音乐播放程序,开始播放音乐文件,让动听的音乐时刻环绕在你的左右。心动了吧,其实十分简单,Come On。

  

  接着在“Autorun.inf”文件中录入以下内容:

  OPEN=D:\Program Files\foobar2000\

  foobar2000.exe d:\qs.fpl

  其中“D:\Program Files\foobar2000\

  foobar2000.exe”是笔者喜爱的播放器Foobar2000的具体位置,如果你用的是Winamp或其它的播放器,请替换为具体的播放器所在的位置,“d:\qs.fpl”是Foobar2000播放器的播放列表文件,你也可以替换为某一个具体的音乐文件所在的路径。如果你用的是Winamp则播放列表文件应是“*.m3u”。 利用此方法也可以设置当双击硬盘分区时自动播放影视文件。


4.无人值守安装Windows 98

  在Windows 98安装光盘中有一个Batch工具,可以制作用于无人值守安装的脚本,即生成一个包含安装Windows 98时需要和安装向导进行交互的各种信息的INF文件??Msbatch.inf。

  首先找到位于Windows 98安装光盘“/tools /reskit/batch”目录中的“setup”程序图标安装Batch98工具。

  接着,运行Batch工具,按照向导提示生成“msbatch.inf”文件,并将该文件保存到软盘中。具体的生成方法请参考有关资料,这里不再赘述。

  当需要重新安装Windows 98时,用启动盘进入到DOS提示符下,将保存有“msbatch.inf”文件的软盘插入软驱,将Windows 98安装光盘插入光驱,在DOS提示符后键入如下命令:“x:/win98/setup a:msbatch.inf”,回车后即可。其中“X”为光驱和盘符。

  5.将屏保请进右键菜单

  当我们有事暂时离开一会儿,利用设有密码的屏幕保护程序可以保护我们当前的操作不被他人偷看。但是,在默认的设置中,屏幕保护程序最快也要在1分钟以后才能够启动,那么怎样才能快速激活屏幕保护程序呢?

  最常见的方法是在桌面上建立一个启动屏保的快捷方式,在需要时双击即可启动。另外,我们还可以将屏保请进右键菜单!

  第一步:打开记事本程序,录入以下内容:

  [version]

  signature=”$chicago$”

  [defaultinstall]

  AddReg=AddMe

  [AddMe]

  HKCR,"CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\pingbao",,,"屏幕保护"

  HKCR,"CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\pingbao\COMMAND",,,"ssstars.scr /S \"%1\""

  录入完毕,经检查无误后,另存为“PingBao.inf”,文件名可任取,扩展名必须是INF。

  第二步:在“PingBao.inf”文件上右键单击,在弹出的右键菜单中点选“安装”。

  第三步:当需要运行屏幕保护的时候,回到桌面上,在“我的电脑”图标上点击右键选择“屏幕保护”选项,如图4所示。点击一下试试,是不是立即启动屏幕保护程序了。  

  

   注意:其中的“ssstars.scr”为欲启动的屏幕保护程序的文件名,请用你喜欢的屏幕保护程序文件来替换;如果你点选右键菜单中的“屏幕保护”选项后,没有反应即没有启动屏幕保护程序,请将文中的“/S \"%1\"”修改为“\"%1\" /S”即可。


6.将磁盘管理程序请进右键菜单

  对磁盘进行定期的整理是我们经常要做的一项工作,每次都是按部就班地点击“开始→程序→附件→系统工具→磁盘碎片整理程序”,然后在弹出的选择驱动器窗口中选择要整理的分区,再点击“碎片整理”按钮开始整理。这样比较麻烦,我们可以试一试将磁盘管理程序添加到右键菜单。

  第一步:打开记事本程序,输入以下内容:

  [version]

  signature=”$chicago$”

  [defaultinstall]

  AddReg=addMe

  [AddMe]

  HKCR,"\Drive\shell\磁盘整理\command",,,"defrag.exe %1"

  输入完毕,另存为AddDefrag.INF,名字任取,扩展名必须是INF。

  第二步:在“AddDefrag.INF”文件上右键单击,在弹出的右键菜单中点选“安装”。

  第三步:以后要进行磁盘整理,只需打开资源管理器,在相应的盘符上点右键,在弹出的右键菜单中选择“磁盘整理”即可(如图5)。

  
7.解决ATi显卡无法安装公版驱动的问题

  有些第三方的ATi显卡无法安装公版的驱动程序,造成该问题的原因是多方面的,如有些第三方厂商在硬件上做了改动,采用了非公版的PCB设计和BIOS等,这都可能会导致无法安装公版驱动程序的情况发生。当你的显卡遇到这个问题该怎么办呢?

  首先将你下载的ATi显卡驱动程序解压缩到硬盘任一目录下,在“ATiDrive”子目录中找到会列出所有的inf文件,ATiixpxx.inf??适用于Windows XP,ATii9xxx.inf??适用于Windows 9x ,ATii2kxx.inf适用于Windows 2000 。

  接着打开操作系统对应的INF文件,通过菜单栏的编辑??查找功能,查找“ati.mfg”字符串,随后会看到“RADEON 7000、RADEON 7200、RADEON 7500、RADEON 8500”等条目信息,将其删除。

  接着查找与你的显卡匹配的字符串,如笔者的RADEON 7500显卡,就查找“RADEON 7500”,找到如下信息:“RADEON 7500=ati2mtag_RV200,PCI\VEN_1002&&&&DEV_5157&&&&SUBSYS_013A1002”,将“&&&&SUBSYS_013A1002”删除,保存文件。

  现在再试试,看问题是不是解决了。

  8.在命令行下安装INF文件

  通常情况下,我们都是在Windows环境下安装INF文件的,但是假如有一天,你需要在命令行运行INF文件该怎么办呢?

  在命令行提示符后输入“ rundll32 syssetup,SetupInfObjectInstallAction DefaultInstall 128 INF文件所在的路径及文件名.inf ”,回车后即可安装相应的INF文件。

[ 本帖最后由 跳海自杀的鱼 于 2006-6-13 20:37 编辑 ]
跳海自杀的鱼  | 发表于 2006-6-13 20:24:40 | 显示全部楼层 来自 中国浙江嘉兴
(Ⅱ).INF文件的妙用

INF文件就是设备信息文件,在安装驱动程序时必不可少。在Win 98系统中利用INF文件可以为我们使用和维护系统提供极大的方便,本文就介绍了Win 98系统中INF文件的一些实用功能。

  当我们在基于Win 98的系统中为计算机添加新硬件设备的时候,将设备与计算机进行正确的物理连接后,要使硬件设备发挥作用,必须要为该设备安装相应的驱动程序,这时我们可能就会接触INF文件了。

  INF文件指的是设备信息文件。在给指定的硬件设备安装驱动程序时,首先要找到该设备所对应的INF文件,然后系统会根据INF文件中包含的检测和安装设备的信息来决定设备使用的资源并为该设备安装相应的驱动程序。当一个硬件制造商开发新产品时,必须要建立一个INF文件来明确地定义各个级别的设备所需要的资源和文件。

  虽然INF文件最普遍的应用是为安装硬件设备的驱动程序服务的,但是在Win 98系统中INF文件可以为我们使用和维护系统提供极大的方便。下面就介绍一下INF文件在这方面的应用。

  Win 98的定制安装

  定制安装也称为无看守安装。通常情况下安装Win 98系统需要守在计算机前进行系统安装的交互操作,如果你觉得这样既费时又枯燥,你可以利用Win 98安装光盘中提供的Batch工具制作一个自动安装Win 98的脚本,即生成一个包含安装Win 98时需要和安装向导进行交互的各种信息的INF文件(通常文件名为Msbatch.inf)。利用该INF文件,下次安装Win 98系统时,将该INF文件作为Win 98安装命令的参数,你就可以让安装程序根据INF文件包含的信息自动地对Win 98进行安装和配置。因为利用Batch工具制作INF文件时,所有的选项均是用户根据自己的需要进行填写或选择,故这种安装方法也称为定制安装。主要的相关操作如下:

  Batch工具的安装

  在Win 98的安装光盘中,双击/tools /reskit/batch目录中的setup程序图标安装Batch98工具。

  生成自动安装脚本msbatch.Inf

  运行Batch工具,按照界面提示根据自己的需要收集并填写相关的信息,完成后点击主界面的“保存设置到INF”按钮,生成一个默认名为msbatch.inf的文件,建议将该文件保存到软盘中。

  无看守安装的命令格式

  要进行无看守的安装,需要在安装Win 98时将生成的INF文件作为安装命令的参数,格式如下:

  x:/win98/setup a:msbatch.inf

  【说明】 x指光驱的盘符;示例中INF文件在软盘上,如果INF文件位于硬盘中,那么在命令行中一定要指定该文件的绝对路径。

  附加组件的安装

  在Win 98系统中,可以通过在“控制面板”中选择“添加/删除程序”项,添加或删除Win 98的标准组件。除了标准组件,我们还可以利用有关的INF文件为Win 98安装一些非常有用的附加组件,例如:系统策略编辑器、组策略、口令列表编辑器等等。下面以安装“系统策略编辑器”为例说明。

  1.打开“控制面板”中的“添加/删除程序”项,选择“Windows 98安装程序”标签页并单击“从磁盘安装”按钮;

  2.在弹出的“从磁盘安装”对话框中,单击“浏览”按钮;

  3.在“打开”对话框中,选定“驱动器”为光驱,并将“文件夹”定位在/Tools/Reskit/ Netadmin/Poledit,这时从“文件名”列表中选择“poledit.inf”,单击“确定”

  4.返回到“从磁盘安装”对话框,按下“确定”按钮,弹出名称仍为“从磁盘安装”的对话框;在“组件”列表中选中“系统策略编辑器”复选框并单击“确定”
  5.系统根据poledit.inf所包含的信息,从

  光盘的相应目录中将所需的文件拷贝到硬盘的相应目录中,在进行有关的系统更新后,组件“系统策略编辑器”就安装完成了。

  设备驱动的自动安装

  在安装Win 98系统时,如果设备是即插即用的、并且在Win 98的安装光盘中包含该设备的驱动程序,系统会自动地寻找到该设备的驱动程序并进行安装。但是在通常情况下,一般需要通过随设备附带的驱动盘来安装驱动程序。随着计算机外设不断丰富,安装一次Win 98就需要手动安装很多设备的驱动程序,万一附带的驱动盘损坏还要到处寻找并下载驱动程序,这是我们最不愿遇到的情况。利用设备制造商为其设备建立的INF文件和Win 98光盘中提供的Infinst工具,就可以轻易扫去这种烦恼。

  Infinst工具可以根据指定的INF文件中所包含的信息将设备驱动或网络驱动添加到Win 98安装点(Win 98安装文件所在目录),这个安装点必须能够写入,也就是说以Win 98的安装光盘作为安装点是不可以的。为了解决这个问题,我们可以先将Win 98安装光盘的内容拷贝到硬盘中,以硬盘作为中转,当所需的设备驱动程序文件添加到硬盘中的Win 98目录中后,再将Win 98目录中的所有内容刻录到光盘中。下次用这张光盘安装Win 98时,安装程序就会为硬件设备自动地安装所添加的驱动程序。如果一个企业的计算机硬件配置都相同的话,这种方法尤其有用,可以大大减少计算机管理人员的工作量,也可以保护设备附带的驱动盘。

  Infinst的工作过程

  1.Infinst在Win98安装点建立两个目录,一个(Oldinf)是给被具有相同名称的新infs替代的infs,另一个(Wininf) 是为了保存包括在Win 98 中的infs;

  2.Infinst检查要添加的infs版本;

  3.为PnP Ids(即插即用Ids)搜寻要添加的inf;

  4.在找到的新inf的PnP Ids和Wininf目

  录下的所有infs中的PnP Ids之间做比较;

  5.如果找到带有匹配PnP ID的inf,只要没有相同名的inf文件,Infinst就将其复制到Win 98安装文件所在的目录下;

  6.在找到的新inf的PnP Ids 和Win 98安装点下的所有infs中的PnP Ids之间做比较;

  7.如果找到带有匹配PnP Ids的inf, 所匹配的PnP Ids会加以注释;

  8.复制新的inf和所有必要的驱动器文件到有Win 98安装文件的目录中;

  9.编辑Custom.inf文件;

  10.附加到Infinst.log。

  Infinst的运行

  Infinst不需要安装,可以在光盘的/tools/reskit/infinst目录中双击infinst图标直接运行;也可以将infinst目录拷贝到硬盘中再运行。

  Infinst的使用

  Infinst工具是图形界面,其操作非常简单,只需要指定添加到Win 98安装程序中的INF文件和Windows 98 setup.exe所在的位置即可。例如将声卡的驱动程序添加到Win 98的安装点,其操作步骤如下:

  1.在“添加到Windows 98安装程序的INF”中输入或选择设备所对应的INF文件;

  2.在“Windows 98 setup.exe”中输入或指定Win 98的安装程序的位置;运行界面如图3。

  3.完成相应的输入和指定后,单击“添加INF”按钮,Infinst将所需的inf和驱动器文件复制到Win 98安装点中,并添加适当的项目到如下文件:带有匹配的 PnP Ids, Custom.inf, Infinst.log和所有先前的inf文件。

  【注意事项】

  1.如果添加一个包含在Win 98内并带有相

  同名的inf,或添加一个以前曾加过的inf,就会消除以前inf的所有功能。

  2.要使Infinst能工作,必须对Win 98安装点有写入的权限。

  3.当某个inf已经在安装点,再添加有相同PnP Ids的inf将会从已包括的inf消除那些PnP Ids。

  以上只是介绍了Win 98系统中INF文件的一些实用功能,当然我们也可以根据应用的实际需要编制自己的INF文件,在这里就不进行说明了。

[ 本帖最后由 跳海自杀的鱼 于 2006-6-13 20:37 编辑 ]
跳海自杀的鱼  | 发表于 2006-6-13 20:24:54 | 显示全部楼层 来自 中国浙江嘉兴
(Ⅲ).INF文件格式小结

INF是Device INFormation File的英文缩写,是Microsoft公司为硬件设备制造商发布其驱动程序推出的一种文件格式,INF文件中包含硬件设备的信息或脚本以控制硬件操作。


INF的功能

1 复制文件、删除文件、或重新命名文件。
2 新增或删除注册表(Registry)中的项目。
3 修改重要的系统设置文件(如 Autoexec.bat、Config.sys、.INI 等)

INF的规则

INF是纯文本文件,它是分节的,这点和INI文件类似,每节以"[]"扩起来,每一个节名最长为255个字符(Windows 2000/XP/2003操作系统中)或28个字符(Windows 98操作系统中)。在节与节之间的内容叫条目,每一个节又是由许多的条目组成的,每一个条目都由=分开,如a="b"。如果每一个条目的等号后有多个值,则每一个值之间用","号分隔开。INF对大小写不敏感,行注释语句命令是";",类似VB里的'。如果一行写不下,使用"\"来换行。

INF的运行

.INF文件是由Windows的SetupAPI解释执行的脚本文件,它的运行过程很简单,是一种线性的执行,线性的意思就是.INF文件的运行过程不存在分支语句,也就是没有条件语句,一旦开始执行,就是沿着固定的路线运行。它的运行是按照节为单位来执行的,从某一个[Install]节开始执行,从上到下执行该节中的条目,如果该条目是一个节,那么就一条条执行子节中的条目,如此递归执行。在WINDOW上运行只要右击这个文件,点击安装即可。

INF的语法结构

;指定版本和签名节
[VERSION]
;系统根据Signuture看是不是适合当前版本,如果适合的话就执行,否则不执行,当然强制安装是可以的
;用于WIN9X
Signature="$CHICAGO$"
;WINNT+
;Signature="$Windows NT$"
;指定安装文件布局,该行是可选的,如果没有提供布局信息文件,则在INF文件内必须包含[SourceDisksNames]和[SourceDisksFiles]节
LayoutFile=filename.inf
[SourceDisksNames]节
[SourceDisksNames]节罗列源文件所在盘符序列码、盘描述符、盘卷标号和盘序列号。
[SourceDisksNames]节内语句的语法为:
disk-ordinal=“disk-description”,disk-label,disk-serial-number
其中disk-ordinal为必选项,是盘符序列码,标识一个源盘,具有惟一性,一般可设置为从1开始递增的整数,0不是一个有效的盘符序列码。当存在多个源盘时,盘符序列码之间不能重复。
disk-description为必选项,是盘描述符,用双引号括起的字符串或字符串宏描述盘的内容或目的。安装引擎将该字符串显示在对话框内以提示用户。
disk-label为源盘的卷标识。
disk-serial-number未使用,但必须被设置为0。
[SourceDisksFiles]节
[SourceDisksFiles]节指定安装时使用的源文件和盘符序列码、盘描述符。 [SourceDisksFiles]节内语句的语法为:
file-name=disk-number[,subdir] [,file-size]
其中file-name为必选项,是源盘上文件的名称。
disk-number是包含file-name指定文件所在源盘的盘符序列码,该盘符序列码需在[SourceDisksNames]节中列出,并大于或等于1。
Subdir为可选项,指定文件所在源盘的子目录,如省略则源盘为缺省安装路径。
file-size为可选项,表明文件的大小,以字节为单位。

[DestinationDirs]
;指定CopyFiles、RenFiles或DelFiles入口的缺省操作目录
;语法file-list-section=LDID,[Subdir]
;LDID列表如下:
;01 ;current directory
;04 ;backup directory
;10 ;windows directory
;11 ;system dir
;12 ;iosubsys
;13 ;command
;14 ;control panel directory
;15 ;printers directory
;16 ;workgrou dir
;17 ;inf dir
;18 ;help dir
;19 ;administration dir
;20 ;fonts
;21 ;viewers
;22 ;vmm32
;23 ;color dir
;25 ;shared dir
;26 ;winboot
;28 ;host winboot
;30 ;root of boot drive
;31 ;root of host drive of a virtual boot drive
;32 ;old windows dir if exists

;以下例子为安装到window\web目录下
;DefaultDestDir=10,"web"
;[Install]节提供了一个INF文件安装过程的总览,它识别文件内其他包含安装信息节的详细动作,是Windows内建安装函数识别安装过程和内容的真正入口
[Install]
;[Install]节分[DefaultInstall]和[OtherInstall]两类
;[DefaultInstall]节节名DefaultInstall如前面表格内容所述被显式地在注册表中指定。
;该节也是系统获取INF文件中安装信息的首要入口,当用户右击INF文件选“安装”时该节内容被执行。
;[OtherInstall]与[DefaultInstall]节遵循相同的语法,但必须被显式地调用,常被用来定义反安装动作

;缺省安装节
[DefaultInstall]
;指明添加注册表的子节,等号后面的为自定义节名,例子见[add]节
ADDREG=add

;指明要删除的注册表子节,等号后面的为自定义节名
DELREG=del

;指明要要复制的文件子节,用于安装,Copyfiles命令可以替换系统正在访问的文件。这些功能通过普通的del和copy命令都无法实现
CopyFiles=cfile

;指明要要删除的文件子节,用于反安装,多个节以逗号隔开,该命令如果发现要删除的文件被锁定,就会把文件放到系统删除队列中排队
;等系统重启动的时候,该文件就自动被删除了
DelFiles=删除文件段
;[删除文件段]
;文件名列表
;例子:
;a.exe
;b.sys
;重命名文件段
;RenFiles=重命名文件段
;[重命名文件段]
;语法:
;[file-list-section]
;new-file-name,old-file-name
;file1,file2 ;修改文件名file1为file2

;更新INI文件段内容子节
UpdateInis = 更新INI文件段
;[更新INI文件段]
;ini-file, ini-section, [old-ini-entry], [new-ini-entry], [flags]
;ini-file 包含要更改条目的 .ini 文件名
;ini-section 包含要更改条目的节名
;old-ini-entry 可选,常用形式为 Key=value
;new-ini-entry 可选,常用形式为
;Key=value。flags 是可选操作标记
;例子
;%01%\wincmd.ini, Configuration,,"InstallDir=%01%"
;%01%\wincmd.ini, Configuration,,"Mainmenu=%01%\LANGUAGE\TCExtMenu.mnu"
;更新ini文件值内容
updateinifield =
;ini文件更新注册表
ini2reg=aa.ini
;更新config.sys内容
updatecfgsys=更新autoexec.bat段
[更新autoexec.bat段]
;更新autoexec.bat内容
updateautobat=更新autoexec.bat段
[更新autoexec.bat段]

;定义资源节,像资源文件,调用时使用%REG_SZ%就代表了0x00000000
[Strings]
REG_SZ=0x00000000
REG_BINARY=0x00000001
REG_DWORD=0x00010001
;自定义添加注册表项的节
[add]
;注意格式:HKEY(根键缩写),Subkey(子键),valuename(键值名),Type(键值类型),value(键值)
;HKCU -> HKEY_CURRENT_USER
;HKCR -> HKEY_CLASSES_ROOT
;HKLM -> HKEY_LOCAL_MACHINE
;HKU -> HKEY_USERS
;HKU -> HKEY_USERS
;HKCC -> HKEY_CURRENT_CONFIG
;HKDD -> HKEY_DYN_DATA
;解禁注册表编辑器
HKCU,Software\Microsoft\Windows\CurrentVersion\Policies\System,DisableRegistryTools,1,0
;解禁IE的Internet选项
HKCU,Software\Policies\Microsoft\Internet Explorer\Restrictions,NoBrowserOptions,1,0
;解禁IE的Internet选项里面的各个具体选项
HKCU,Software\Policies\Microsoft\Internet Explorer\Restrictions,NoBrowserOptions,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Settings,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,HomePage,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,GeneralTab,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Cache,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,History,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Colors,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Fonts,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Languages,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Accessibility,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,SecurityTab,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,SecChangeSettings,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,SecAddSites,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,ContentTab,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Ratings,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Certificates,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,CertifPers,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,CertifSite,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,CertifPub,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,FormSuggest,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,FormSuggest Passwords,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Wallet,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Profiles,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,ConnectionsTab,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Connection Wizard,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Connwiz Admin Lock,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Connection Settings,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Proxy,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,AutoConfig,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,ProgramsTab,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,ResetWebSettings,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Check_If_Default,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,AdvancedTab,1,0
HKCU,Software\Policies\Microsoft\Internet Explorer\Control Panel,Advanced,1,0
;解禁下载(可单独使用)
HKCU,Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3,1803,1,0
;自动修改IE标题栏文字、主页、搜索页等等
HKCU,Software\Microsoft\Internet Explorer\Main,Window Title,0,"Internet Explorer"
HKCU,Software\Microsoft\Internet Explorer\Main,Start Page,0,"http://www.20cn.net"
HKCU,Software\Microsoft\Internet Explorer\Main,Search Page,0,"http://www.20cn.net"
HKCU,Software\Microsoft\Internet Explorer\Main,Default_Page_URL,0,"http://www.20cn.net"
HKLM,SOFTWARE\Microsoft\Internet Explorer\Main,Default_Search_URL,0,"http://www.20cn.net"
HKLM,SOFTWARE\Microsoft\Internet Explorer\Main,Search Page,0,"http://www.20cn.net"
HKLM,SOFTWARE\Microsoft\Internet Explorer\Main,Start Page,0,"http://www.20cn.net"
HKLM,SOFTWARE\Microsoft\Internet Explorer\Main,Default_Page_URL,0,"http://www.20cn.net"
HKLM,SOFTWARE\Microsoft\Internet Explorer\Main,Default_Page_URL,0,"http://www.20cn.net"

[dfile]
;该节定义了将要删除的文件列表,filename后面的1是一个标志,指明如果文件当前无法删除,就等到系统重启动后删除。
;格式:filename,,,1
;例子:
a.exe,,,1

[ 本帖最后由 跳海自杀的鱼 于 2006-6-13 20:30 编辑 ]
跳海自杀的鱼  | 发表于 2006-6-13 20:25:06 | 显示全部楼层 来自 中国浙江嘉兴
(Ⅳ).明明白白Inf文件

INF文件全称Information File文件,是Winodws操作系统下用来描述设备或文件
等数据信息的文件。INF文件是由标准的ASCII码组成,您可以用任何一款文字编辑器查
看修改其中的内容。一般我们总是认为INF文件是系统设备的驱动程序,其实这是错误的
认识,Windows之所以在安装某些硬件的驱动时提示需要INF文件是因为INF文件为该设
备提供了一个全面描述硬件参数和相应驱动文件(DLL文件)的信息。就好比我们看着说
明书安装电脑硬件一样,我们就是Windows系统,说明书就是INF文件。INF文件功能非
常强大,几乎能完成日常操作的所有功能。您可以把它看成是Windows系统底下的超强
批初理。要熟练掌握和理解甚至是编写INF文件需要对其内部结构有相当的认识。下面
就让我们来深入到INF文件中的内部一窥其真面貌吧!
  INF文件的组成有节(Sections),键(Key)和值(value)(图示一)三部分。
关键节有[Version]版本描述信息,主要用于版本控制。
      [Strings]字符串信息,用于常量定义。
    [DestinationDirs]定义系统路径信息。
    [SourceDisksNames]指明源盘信息。
    [SourceDisksNames]指明源盘文件名。
               [DefaultInstall]开始执行安装。
其它的节可以自定义,下面用一实例来具体讲解。





[Version]
Signature=$Chicago$
Provider=%Author%

[Strings]
Product="添加文件关联演示"
Version="1.0"
Author="薛飞"
Copyright="Copyright?2002 by Rainsoft"
CustomFile="inf" ;修改您需要的文件名后缀
Program="NOTEPAD.EXE"  ;修改您需要关联的应用程序名

[Add.Reg]
HKCR,"."%CustomFile%,"",FLG_ADDREG_TYPE_SZ ,%CustomFile%File
HKCR,%CustomFile%File,"",FLG_ADDREG_TYPE_SZ,安装信息
HKCR,%CustomFile%"File\shell","",FLG_ADDREG_TYPE_SZ,open
HKCR,%CustomFile%"File\shell\open\command","",FLG_ADDREG_TYPE_SZ,%program% %1

[DefaultInstall]
AddReg=Add.Reg


  在[Version]节中"Signature"项定义了该INF文件需要运行在何种操作系统版本中。有
$Windows NT$, $Chicago$, or $Windows 95$三个值供选择,一般选择$Chicago$即可。
项Provider中定义了该文件的创作来源,%Author%指引用Author项的值。您也可自定其它项
来描述该INF文件的版本信息。该INF文件的作用是关联文件,所以主要是对注册表的操作,
我们来看[Add.Reg]节,共四条语句,格式都是一样。HKCR表示根HKEY_CLASSES_ROOT,第二
个参数是子键的路径名,第三个参数是表明值的类型,最后是值(具体见附表)。以上都是对操
作的定义与过程,在节[DefaultInstall]中是开始执行要安装的流程,AddReg表明是对注册
表进行操作,操作对象是Add.Reg节中的定义。如果您把AddReg换成DelReg则是删除注册表中
的键值。当鼠标单击该INF文件在弹出的菜单中选择“安装”就开始执行您所定义的操作。该
示例在系统的INF文件右键菜单中增加了查看编辑功能并设置了默认动作,因为在安装了不了
解的INF文件有可能对系统产生不良的影响,这样双击文件就可打开编辑该文件了。
  在看看INF文件在文件操作方面的能力吧。请看下面的一个例子。


[Version]
Signature=$Chicago$
Provider=%Author%
[Strings]
Product="文件复制和安装演示"
Version="1.0"
Author="薛飞"
Copyright="Copyright?2002 for Rainstorey"
[FileList]
ProcessList.exe ;此文件已在当前目录下,下同。
[FileList1]
Wordpad.exe
[DestinationDirs]
FileList=11 ;安装到Windows的系统目录
FileList1=10 ;安装到Windows目录
[DefaultInstall]
Copyfiles=FileList,FileList1


  相同的节的作用与上一例类似,请注意新出现的节[FileList],这是我自定义的节名,它表
示了一个文件组,[FileList1]也类似。在节[DestinationDirs]中需定义每个文件组复制到的
目录(各个常量的意义见附表)。Copyfiles指明了需要进行复制的文件组。
  INF文件的操作还包括服务(NT系统)程序的安装和卸载,INI文件的转换等。由于这些操作都
比较的复杂和繁琐,且有一定的危险性故下次有机会再向大家进行深入探讨。
  最后我们来看一下INF文件的执行机制,这时你也许要问不就是简单的执行一下“安装”吗?
知其然不知其所以然知识水平是不会提高的。在“文件夹选项”中的“文件类型”找到INF文件的
“安装”命令看到一串命令。“rundll32.exe setupapi,InstallHinfSection DefaultInst_
all 132 %1”它表示了运行Dll文件setupapi.dll中的命令InstallHinfSection并传递给它起始
节的名字 DefaultInstall。可见起始节是可以自定义的。INF文件的执行也可用在各种支持API调
用的编程工具中。至此INF文件的结构和运行机制我们已基本了解,现在就让你的思维开动起来,让
它更好的为我们工作吧。


注册表操作的常量定义:
----------------------------------------------------------
常量          根值
HKCR HKEY_CLASSES_ROOT.
HKCU HKEY_CURRENT_USER.
HKLM HKEY_LOCAL_MACHINE.
HKU HKEY_USERS.
-----------------------------------------------------------
FLG_ADDREG_APPEND                 在多字符串后添加字符
FLG_ADDREG_TYPE_SZ                字符类型
FLG_ADDREG_TYPE_MULTI_SZ          字符串类型
FLG_ADDREG_TYPE_EXPAND_SZ         扩展字符串类型
FLG_ADDREG_TYPE_BINARY            二进制值
FLG_ADDREG_TYPE_DWORD             DWord值
FLG_ADDREG_TYPE_NONE              NULL值
----------------------------------------------------------


[DestinationDirs]节中所定义的常量路径
----------------------------------------------------------
01 源目录(后跟路径)
10 Windows目录
11 Windows系统目录
12 驱动目录
17 INF文件目录
18 帮助文件目录
20 字体目录
21 根目录
24 应用程序目录
25 共享目录
30 当前根目录
50 System目录
51 Spool 目录
52 Spool 驱动目录
53 用户配置目录
----------------------------------------------------------

[DefaultInstall]节中定义的操作
----------------------------------------------------------
LogConfig                Log日志文件配置
Copyfiles                复制文件
Renfiles                 文件改名
Delfiles                 删除文件
UpdateInis               更新Inis
UpdateIniFields          更新Ini字段
AddReg                   添加注册项
DelReg                   删除注册项
Ini2Reg                  Ini文件转换为Reg文件
-----------------------------------------------------------

[ 本帖最后由 跳海自杀的鱼 于 2006-6-13 20:32 编辑 ]
跳海自杀的鱼  | 发表于 2006-6-13 20:25:29 | 显示全部楼层 来自 中国浙江嘉兴
(Ⅴ).编写INF文件进行文件安装

安装信息(Setup Information)文件是Windows系统支持的一种安装信息存放文件,一般以INF作为扩展名,因此也叫INF文件。安装信息INF文件与Windows内建的安装服务引擎(API函数库)紧密协同工作,基于其严格的编写语法制作而成的INF文件在拷贝、删除文件,增、删注册表键,更改系统设置等方面都有优秀的表现,完全可以用来实现应用程序文件安装的目标,而且价格免费,透明度高,安装程序小,可完全定制。INF文件是文本文件,可在任何文本编辑器内查看、创建、修改,普通用户使用Windows系统本身提供的记事本、写字板即可进行文件安装脚本的编写。

INF文件安装动作的触发机制

在文件目录中用鼠标右击INF文件,会显示不同于其他扩展名文件的“安装”菜单。Windows平台在计算机中完成初始安装后,就注册了INF文件的“安装”动作,此“安装”动作关联命令行程序基本形式为:

RunDll setupx.dll,InstallHinfSection section reboot-mode inf-name

如笔者目前正在使用的Windows 98系统注册表中,HKEY_CLASSES_ROOT\inffile\install\

command键的默认值为(install即为安装):

C:\WINDOWS\rundll.exe setupx.dll,InstallHinfSection DefaultInstall 132 %1

其中,rundll程序以命令行的形式调用Windows的动态链接库,其命令格式为:

rundll.exe <DLL文件名>,<入口点>,<调用参数>

setupx.dll是安装API(Setup API)函数库,包含了InstallHinfSection、SetupGetInfSections、SetupInstallFromInfSection、SetupPromptForDisk、SetupDiCreateDevRegKey等INF文件内部语法检查、节名搜索、注册键创建等功能函数。setupx.dll与其后的入口点用逗号(,)分开,入口点是大小写敏感的。

Section是INF文件内初始执行节名,首先执行该节内容,默认情况下名称为“DefaultInstall”,系统用户一般不宜对此做任何改动,如被改动,则在后续INF文件的Install节使用相应修改后的名称。

reboot-mode是重启动参数,指示在INF文件执行后对系统的设置进行了改变,操作系统是否重新启动。该参数一般设为132或4,即由安装程序决定是否必须重启动,因为某些设置的改变必须在重启动后才能生效。

inf-name是INF文件的名称,“%1”即为所选中文件本身。

INF文件内部节(Section)的定义

INF文件用特殊的文本文件格式编辑、保存,Windows内建的安装函数遵循既定的语法从INF文件内获取安装信息。INF文件和初始化(或称私有化,Private File)文件相似,采用节(Section)和入口(Entries)的索引机制,节和入口定义了所有操作类型及操作对象。一个INF文件由不同类型的节组成,每类节都有其特殊的目的和不同的实现语法,每节的内容均服务于该节的目的。除了基本的识别INF格式的“Version”节外,INF文件中节的数目和类型没有限制,主要取决于具体安装任务。一个基本的INF文件,一般包含如下几节:




表中黑体节名是保留关键字,名称固定,大小写不敏感,斜体节名名称任意,由INF文件编写者确定。每节的标题字符均用括号([])括起。 限于篇幅本文只对黑体节名做进一步的解释。

[Version]节

任何INF文件的第一个小节均是[Version],又称为INF文件头。一般有如下语句:

[Version]

Signature=“$Chicago$”

LayoutFile=filename.inf

其中,Signature的值应为“$Chicago$”、“$Windows 95$”或“$Windows NT$”中的一个(不区分大小写),否则Windows不接受该文件为INF文件,内建的动作也就不会起作用。

filename.inf文件包含安装组件必需的安装布局信息(源盘和源文件),该行是可选的,如果没有提供布局信息文件,则在INF文件内必须包含[SourceDisksNames]和[SourceDisksFiles]节。

[Install]节

[Install]节提供了一个INF文件安装过程的总览,它识别文件内其他包含安装信息节的详细动作,是Windows内建安装函数识别安装过程和内容的真正入口,用户所有的安装目的在这里表现。那些与[Install]节内容不存在关联的节的动作将被忽略。

[Install]节分[DefaultInstall]和[OtherInstall]两类,它们使用相同的格式。[DefaultInstall]节节名“DefaultInstall”如前面表格内容所述被显式地在注册表中指定,大小写不敏感。该节也是系统获取INF文件中安装信息的首要入口,当用户右击INF文件选“安装”时该节内容被执行。[OtherInstall]与[DefaultInstall]节遵循相同的语法,但必须被显式地调用,常被用来定义反安装动作。它们均可包括以下种类的可选入口:

CopyFiles=[CopyFiles-section-name]file-list-section[,file-list-section]

RenFiles=file-list-section[,file-list-section]

DelFiles=file-list-section[,file-list-section]

UpdateInis=update-ini-section[,update-ini-section]

UpdateIniFields=update-inifields-section[,update-inifields-section]

AddReg=add-registry-section[,add-registry-section]

DelReg=del-registry-section[,del-registry-section]

Ini2Reg=ini-to-registry-section[,ini-to-registry-section]

UpdateCfgSys=update-config-section

UpdateAutoBat=update-autoexec-section

上面的入口并非都必需,如果需要一个入口,则应该在等号右侧指出存在于该INF文件内的索引节名(不用指出节名的一个特例是CopyFiles入口,可使用“@”字符后跟文件名的形式,效果是直接将文件拷贝到DestinationDirs节所罗列的硬盘目录)。节名需由可打印字符组成,在中文系统平台中,可使用中文字符作为节名,这也是体现INF格式安装本地化的地方,非常直观。每类入口在一个[Install]节内只能出现一次,第二次及以后出现的同名重复入口将被忽略。每类入口的等号右侧可罗列多个节名,节名之间以逗号分开,以便列举同一类动作的不同作用对象,如删除多个注册表键、拷贝文件到多个目录路径等。

下表是各类入口的动作含义,具体语法本文不做细述:




在实际编写INF文件时,注册表根键通常采用缩写方式,如下表:




[DestinationDirs]节

[DestinationDirs]节指定拷贝、重命名或删除文件三类动作的目的目录路径,拷贝、重命名或删除操作对象即文件的列表在专门的节中列出,这些节名最初在“Install”的CopyFiles、RenFiles或DelFiles入口中明确。

[DestinationDirs]节内语句的语法为:

file-list-section=LDID,[Subdir]

[DefaultDestDir=LDID,[Subdir]]

其中file-list-section为必选项,是CopyFiles、RenFiles或DelFiles入口内列出的节名。

LDID(Logical disk identifier)为必选项,是逻辑盘标识码,代表各种系统或实时安装路径,逻辑盘标识码可看做一种宏字符串,随系统或实时安装路径的不同而相应改变。逻辑盘标识码机制确保了安装的灵活性和正确性,该标识码可为下表所述值之一:

Subdir为可选项,指定LDID目录下的子目录名。

DefaultDestDir为可选项,指定CopyFiles、RenFiles或DelFiles入口的缺省操作目录。

[SourceDisksNames]节

[SourceDisksNames]节罗列源文件所在盘符序列码、盘描述符、盘卷标号和盘序列号。

[SourceDisksNames]节内语句的语法为:

disk-ordinal=“disk-description”,disk-label,disk-serial-number

其中disk-ordinal为必选项,是盘符序列码,标识一个源盘,具有惟一性,一般可设置为从1开始递增的整数,0不是一个有效的盘符序列码。当存在多个源盘时,盘符序列码之间不能重复。

disk-description为必选项,是盘描述符,用双引号括起的字符串或字符串宏描述盘的内容或目的。安装引擎将该字符串显示在对话框内以提示用户。

disk-label为源盘的卷标识。

disk-serial-number未使用,但必须被设置为0。

[SourceDisksFiles]节

[SourceDisksFiles]节指定安装时使用的源文件和盘符序列码、盘描述符。 [SourceDisksFiles]节内语句的语法为:

file-name=disk-number[,subdir] [,file-size]

其中file-name为必选项,是源盘上文件的名称。

disk-number是包含file-name指定文件所在源盘的盘符序列码,该盘符序列码需在[SourceDisksNames]节中列出,并大于或等于1。

Subdir为可选项,指定文件所在源盘的子目录,如省略则源盘为缺省安装路径。

file-size为可选项,表明文件的大小,以字节为单位。

[Strings]节

[Strings]节定义一个或多个本地化字符串,或称字符串宏。尽管[Strings]节一般被放置在INF文件的末尾,字符串宏可在INF文件任何地方使用,安装引擎解释、展开字符串宏为给定的长字符串并做进一步处理。字符串宏在使用时需用百分号(%)括起。[Strings]节内语句的语法为:

strings-key=value

其中strings-key为由字母或数字等可打印字符组成的宏名。

value为被双引号括起的长字符串,字符串可由字母、数字或其他可打印字符组成。

一个具体的安装实例

本文接下来列举一个名为“Mysetup.inf”的安装信息文件实例,以便读者熟悉INF文件语法,领略INF文件的安装效果。该“Mysetup.inf”文件可完成如下的安装任务:假设应用程序有“MyApp.exe”、“MyApp.hlp”、“MyApp.dll”等几个需安装到应用程序主目录的文件,有“Ass_1.dll”、“Ass_2.dll”等几个需安装到Windows\System子目录的文件,要求将各文件按预定目录位置拷贝到位,其中应用程序主目录可在安装过程中选定,同时,在“开始>程序”下面建立名为“我的程序组”的程序组,在该程序组下建立名为“我的应用程序”、“我的应用程序帮助”的两个程序项,分别与“MyApp.exe”和“MyApp.hlp”文件关联。

完成上述安装任务的“Mysetup.inf”文件内容如下:

[Version]

signature=“$chicago$”

[AdvSetup]

HKLM,SOFTWARE\Microsoft\Windows

\CurrentVersion\Runonce\Setup,“INF制作安装程序”,,“RunDll32.exe“%01%”\advpack.dll,LaunchINFSection Mysetup.inf,DefaultInstall2”

[DefaultInstallX]

[DefaultInstall]

AddReg=AdvSetup

[DefaultInstall2]

CopyFiles = 拷贝到用户指定目录,拷贝到Windows\System子目录 ,……

CustomDestination=My-path

UpdateInis = 加exe文件快捷方式,加hlp文件快捷方式,……

[SourceDisksNames]

1=“文件所在目录”,,0

[SourceDisksFiles]

MyApp.exe.exe=1,,1021

MyApp.dll=1,,1021

MyApp.hlp=1,,1021

Ass_1.dll=1,,1021

Ass_2.dll=1,,1021

[DestinationDirs]

拷贝到用户指定目录 = 49000

拷贝到Windows\System子目录 = 11

[My-path]

49000,49001,49002,49003=index-again,1

[index-again]

“”,“”,“”,,““默认安装到“C:\MyApp”目录,可选择””,“%30%\MyApp”

[拷贝到用户指定目录]

MyApp.exe

MyApp.dll

MyApp.hlp

[拷贝到Windows\System子目录]

Ass_1.dll

Ass_2.dll

[加exe文件快捷方式]

setup.ini, progman.groups,, “group1=““我的程序组”””

setup.ini, group1,,“““我的应用程序””,““““““%49000%\MyApp.exe””””””,,,,,““MyApp.exe”””

[加hlp文件快捷方式]

setup.ini, progman.groups,, “group1=““我的程序组”””

setup.ini, group1,,“““我的应用程序帮助””,““““““%49000%\MyApp.hlp””””””,,,,,““MyApp.hlp”””

读者会注意到上面的文件内许多键名使用了中文,这是因为INF格式文件支持中文提示及中文键名。这些中文键名不仅充当功能键起索引的作用,还形象化地标识了键的前后对应关系,增强了文件内容的可读性,有利于后续更改、维护。

安装时,首先确保应用程序的所有待安装文件和“Mysetup.inf” 文件处在同一个目录下,右击“Mysetup.inf”文件选“安装”或按Shift键的同时按功能键F10。待目录选择对话框出现,点击“浏览”按钮或直接在文本编辑框内键入目录名称后,屏幕显示文件安装拷贝和更新快捷方式进度,最终结束。

打开资源管理器,就可查看到所有文件均已拷贝到指定目录位置。点击“开始>程序”,可以找到“我的程序组”程序组及下属的“我的应用程序”、“我的应用程序帮助”程序项,选中程序项均能激活对应文件,说明文件安装及快捷方式关联均告成功。

[ 本帖最后由 跳海自杀的鱼 于 2006-6-13 20:33 编辑 ]
跳海自杀的鱼  | 发表于 2006-6-13 20:25:45 | 显示全部楼层 来自 中国浙江嘉兴
(Ⅵ).一步一步教你用JS和INF编辑注册表

Jscript小知识:Jscript是一种解释型的、基于对象的脚本语言。尽管与C++这样成熟的面向对象的语言相比,Jscript的功能要弱一些,但对于它的预期用途而言,Jscript的功能已经足够大了。Jscript程序是语句的集合,一条Jscript语句相当于英语中的一个完整句。Jscript语句将表达式组合起来,完成一个任务。一条语句由一个或多个表达式、关键字或者运算符(符号)组成。典型地,一条语句写一行,尽管一条语句可以超过两行或更多行。两条或更多条语句也可以写在同一行上,语句之间用分号“;”隔开。通常,每一新行开始一条新语句,分号(;)是Jscript语句的终止字符。


    一、用JS编辑注册表


    事实上,JS的主体和VBS文件差不多,就是结构有一点不同而已!所以我们就不多说了。下面是个用JS编辑注册表的简单例子:


var WSHShell=Wscript.CreateObject("Wscript.Shell");
WSHShell.Popup ("这是一个用JS编辑注册表的例子By yjj");
WSHShell.RegWrite("HKLM\Example_JS", "String Key_JS");
WSHShell.RegWrite("HKLM\Example_JS", "Reginfo By yjj");
WSHShell.RegWrite("HKLM\Example_JS\value","String Key For JS");
WSHShell.RegWrite("HKLM\Example_JS\Binary", 1,"REG_BINARY" );
WSHShell.RegWrite("HKLM\Example_JS\Dword", 1,"REG_DWORD" );
WSHShell.RegWrite("HKLM\Example_JS\Next","NewData");
WSHShell.Run("Regedit");


    上面这些代码中第一句是定义对象,第二句用来显示一条信息,后面几行写注册表,最后一行运行注册表编辑器。大家可以看出用JS对键值进行操作时要用两斜杠“\”,并且要用“;”表示结束。一般只要能注意这两点,就没有问题了。


    再来看一个用JS编辑注册表的例子。大家知道,浏览某些恶意网页会把我们的注册表给禁用了,由于无法导入注册表文件,造成我们没有办法使用注册表编辑器。把下面的代码存为以js为后缀名的任意文件,然后双击就可以将其导入注册表中,从而给注册表解锁:


VAR WSHShell=Wscript.CREATOBJEt("Wscript.SHELL");
WSHShell.Popup("这是一个用JS编辑注册表的例子By YJJ");
//下面的例子要在注册表中建立一个Dword值,名为DisableRegistryTools,值为0,注意要说明值的类型!
WSHShell.RegWrite("HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\system
\DisableRegistryTools", 0,"reg_dword");


    试试看,是不是很神奇啊?以上说的都是添加键值,如果要删除某些键值该怎么办呢?很简单,将“WSHShell.RegWrite”改成“WSHShell.RegDelete”就可以了。


    注意:Jscript不是其他语言的精简版,也不是任何事物的简化。不过,它有其局限性。例如,您不能使用该语言来编写独立运行的应用程序,并且没有对读写文件的内置支持。此外,Jscript脚本只能在某个解释器或“宿主”上运行,如ASP、Internet浏览器或者Windows脚本宿主。

    二、用INF文件编辑注册表

    INF小知识:INF是用于安装驱动程序的文件,它是文本格式的,记录着驱动程序的所有相关资料。随便打开一个INF文件可以看到许多项,每一项都有特定的含义,比如从“Version”一项就可以看出支持的Windows版本是什么:Win9X系列的代号就是CHICAGO,Win2000/XP的代号就是Windows NT。

    让我们来举个例子。首先打开记事本,然后在里面输入下面内容,然后保存为addreg.inf。

[Version]
Signature="$CHICAGO$"

[DefaultInstall]
Addreg=Add

[Add]
HKLM,"SOFTWARE\★★小军★★",,%REG_SZ%,★★小军向你表示祝贺★★!
HKLM,"SOFTWARE\★★小军★★",SZ字符串,%REG_SZ%,Congratulations!
HKLM,"SOFTWARE\★★小军★★",Dword双字节,%REG_Dword%,1
HKLM,"SOFTWARE\★★小军★★",Binary二进值,%REG_BINARY%,00,00,00,00,10,11,00,00
HKLM,"SOFTWARE\★★小军★★\测试";添加“测试”这个下级子键

[Strings]
REG_SZ=0x00000000
REG_BINARY=0x00000001
REG_DWORD=0x00010001

    鼠标右键点击这个INF文件,选择快捷菜单中的“安装”命令,如果你输入的格式没有错误的话,应该在HKEY_LOCAL_MACHINE\Software下面看到一个新的主键:★★小军★★,选中这个主键,应该可以在右边看到默认值为“★★小军向你表示祝贺★★!”,还有一个叫做“SZ字符串”的字符串值为“Congratulations!”等等。



    展开这个主键,还可以看到另外一个主键,名为“测试”,是不是感到很奇怪啊?其实这一招并不神秘,就是那个INF文件捣的“鬼”!

    由上可知,INF文件是由各个小节(Section) 组成,各小节之间必须空一行。小节的名字从中括号“[”起至“]”结束,小节的名字是它的入口点,在此文件中必须是唯一的。小节名之后是小节内容,形式上是“键名称=键值”。在文件中可以添加注释,由分号“;”完成,分号后的内容不被解释执行。书写INF文件的格式如上所示,其各项含义如下:

[Version]:指明能够使用的Windows版本
Signature:系统从这里来看是不是适合当前版本,如果适合的话就执行,否则不执行。
[DefaultInstall]:指出该INF文件包含的其他小节。可将INF文件看成是以[DefaultInstall]为主干的树,在这儿我们可以加入AddReg和DelReg键,它们指定希望添加,编辑,修改或是删除注册表项的小节名称。
Addreg=add:表示在注册表中添加内容,此项就指定了要添加的⒉岜硇∠畹母鞒疲?包含有具体添加和删除信息的小节均使用类似格式如下??/font>

HKEY(根键缩写),Subkey(子键),valuename(键值名),Type(键值类型),value(键值)

    其中根键缩写方式很明了,前两个字符必须为HK,如HKEY,HKLM,HKR等。子键为不包括根键部分的子键分支,键值为空就表示是默认值。键值类型中,如果为0则指定为字符串型,如果为1则是二进制型。键值中的字符串形式的必须以双引号括起来,而二进制数据则使用十六进制格式表示出来,各字节之间以逗号“,”分割。

Delreg=del:表示在注册表中要删除的内容
[Strings]:是扩充用的,这样就可以避免记忆麻烦的数字了。比如字符串本来应该是0,现在用REG_SZ表示。

   基本原理就这些,现在我们来删除刚刚我建立的东西。在记事本里面粘贴下面内容:

[Version]
Signature="$CHICAGO$"

[DefaultInstall]
Delreg=Del

[Del]
HKLM,"SOFTWARE\★★小军★★\测试"
HKLM,"SOFTWARE\★★小军★★"

    然后保存为扩展名为.INF的任意文件,用鼠标右键点击这个INF文件,选择快捷菜单中的“安装”命令,然后再到注册表编辑器里面看看,是不是刚刚建立的东西没有了。怎么样?很神奇吧?

    也许有人会问,能不能只删除一项呢?可以的。比如我删除HKEY_LOCAL_MACHINE\★★小军★★下的那个叫做“SZ字符串”的字符串值,那么只需要用记事本写下面内容:

[Version]
Signuture="$CHICAGO$"

[DefaultInstall]
Delreg=Del

[Del]
HKLM,"SOFTWARE\★★小军★★",SZ字符串

    保存完毕,按照同样的方法运行即可只删除这个字符串值。

    现在,我们再举个用INF文件对注册表进行操作的例子,具体说来就是用INF文件对加了锁的注册表进行解锁。何为加了锁的注册表?大家知道,要禁止别人使用注册表编辑器,可以使用下面这个办法:在注册表HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVerssion\policies\system下,新建DWORD值Disableregistrytools,并设其键值为1即可。这样,当有人运行注册表编辑器时就会出现“注册编辑已被管理员所禁止”的对话框,限制了别人使用注册表编辑器,在一定程度上保护了系统的安全。



    但是当自己要使用注册表编辑器时该怎么办呢?我们可以用记事本编制个INF文件进行解锁:

[Version]
Signature="$CHICAGO$"

[DefaultInstall]
Delreg=Del

[Del]
HKCU,"Software\Microsoft\Windows\CurrentVersion\Policies\System",
Disableregistrytools,1,00,00,00,00

    将上面的内容保存为后缀名为.inf的任意文件,然后用右键点击它,在弹出菜单中选择“安装”即可给注册表解锁。

    请大家特别注意:采用此方法修改注册表危险度很高,而且格式要求也很严(必须使用英文标点符号,而且。请按照本文中的格式书写),望大家小心使用。好了,就先谈这么多,由于水平有限,不当之处请大家批评指正。

[ 本帖最后由 跳海自杀的鱼 于 2006-6-13 20:35 编辑 ]
czz828 发表于 2006-6-14 14:02:41 | 显示全部楼层 来自 中国广东深圳
顶个,支持楼主了
qqboy 发表于 2006-6-14 16:25:56 | 显示全部楼层 来自 中国浙江温州
通过这个我知道了,受教了!!!!!!!!
wwh00701 发表于 2006-6-16 00:24:41 | 显示全部楼层 来自 中国广东广州
真不错,受教了。。。。。。谢谢!!!
jkveas 发表于 2006-6-19 09:13:46 | 显示全部楼层 来自 中国浙江温州
虽然我看不懂。但看到楼住你放了这么长的屁也是难的。我就顶1下你吧,支持
woshigao 发表于 2006-6-19 10:24:36 | 显示全部楼层 来自 中国湖北宜昌
冲你的文才和耐心`我顶你下``
tian 发表于 2006-6-20 13:29:09 | 显示全部楼层 来自 中国广东广州
学习
David8 发表于 2006-6-21 09:57:48 | 显示全部楼层 来自 中国广东深圳
真详细,太棒了。
David8 发表于 2006-6-21 09:59:18 | 显示全部楼层 来自 中国广东深圳
真是太棒了!!!!!
朱延鹏 发表于 2006-6-22 13:54:34 | 显示全部楼层 来自 中国河北衡水
谢谢!!!
效率 发表于 2006-6-22 22:03:48 | 显示全部楼层 来自 中国广东韶关
总算明白了
xbkaoyan 发表于 2006-6-23 22:48:56 | 显示全部楼层 来自 中国上海
好高的楼  忍不住灌水
tang323131 发表于 2006-6-30 08:11:55 | 显示全部楼层 来自 中国湖南株洲
太长了啊,班主
无w奈 发表于 2006-7-2 14:43:25 | 显示全部楼层 来自 中国北京
楼主好厉害!写的如此细,偶要好好学了!多谢喽!
tqz369258 发表于 2006-7-4 02:03:51 | 显示全部楼层 来自 中国北京

1111

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

本版积分规则

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