INF安装信息文件⑤

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

上一节INF安装信息文件④

 

㈨、[IniFileUpdateSection(s)]节:指定 .ini 文件的更新。链接将在该节中创建。 节的名字是 UpdateInis。

 

㈩、[DDInstall.Services]节:为了真正的使复制的文件成为目标系统上的驱动程序,必须通知服务器管理程序(SCM)。

 

  例如安装在Windows 2000下的每个驱动程序在HKLM\System\Current-ControlSet\Services下的注册表中有一项。ServiceType值为1表示一个内核模式设备驱动程序。StartType指定在引导过程中的什么点上驱动程序装入(3表示按需或手动启动)。在驱动程序装入过程中遇到错误时,ErrorControl值确定发生了什么情况。ServiceBinary值指向驱动程序文件(.SYS文件)的位置,但是,如果二进制值位于%windir%\system32\drivers目录,并且与HKLM\…\Services下的子键有相同的名字,则可以忽略ServiceBinary值。

DDInstall.Services节项目中包括一个形式如下的项目:

AddService = ServiceName[flags]service – install – section[eventlog – install – section]

  这里的ServiceName表示设备的名字,通常是驱动程序的名字,没有.SYS扩展名。(Flags值的描述见下表AddService Flags定义Service – install – section和可选的eventlog- install – section值调出控制服务值项目(诸如ServiceTypeStartType)的新增的INF节名字。

 AddService Flags定义

 位值 符号名称-SPSVCINST_ 说明 0x00002 ASSOCSERVICE 驱动程序是一个FDO(功能驱动程序),不是一个过滤器 0x00008 NOCLOBBER_DISPLAYNAME 不覆盖友好的名字 0x00100 NOCLOBBER_DESCRIPTION 不覆盖说明 0x00010 NOCLOBBER_STARTTYPE 不覆盖启动类型 0x00020 NOCLOBBER_ERRORCONTROL 不覆盖错误控制

 

 

[ServiceInstall]节:

[ServiceInstall]节名字实际上由 [DDInstall.Services] 节中每个AddService项唯一规定,它控制把驱动程序安装到服务控制管理程序。[ServiceInstall]节允许的项见下表(ServiceInstall节中的项目)所列。

ServiceInstall节中的项目

 

   Display Name 驱动程序的友好名字,显示在设备管理器中 Description 驱动程序或服务的简短描述,由设备驱动程序描述 ServiceType

 驱动程序类型:

0x01:内核驱动程序

0x02:文件系统驱动程序

 StartType

 规定驱动程序何时装入:

0:引导时间

1:系统启动

2:系统自动启动后

3:按需启动(手动)

4:禁用

 ErrorControl

 驱动程序装入期间对错误的处理:

0:忽略所有错误

1:把错误显示给用户

2:用“最后一次正确配置”重新启动,忽略伺候发生的错误

3:用“最后一次正确配置”重新启动,如果此后出现错误,则进行故障检验

 ServiceBinary 驱动程序的完整路径名,他可以包括 LDID

 

 

(十一)、[SourceDisksNames] 节:列出包含文件的磁盘。

 

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

 

disk-ordinal=“disk-description”,disk-label,disk-serial-number
其中disk-ordinal为必选项,是盘符序列码,标识一个源盘,具有惟一性,一般可设置为从1开始递增的整数,0不是一个有效的盘符序列码。当存在多个源盘时,盘符序列码之间不能重复。
disk-description为必选项,是盘描述符,用双引号括起的字符串或字符串宏描述盘的内容或目的。安装引擎将该字符串显示在对话框内以提示用户。
disk-label为源盘的卷标识。
disk-serial-number未使用,但必须被设置为0。

参考示例051 = %SRCDISKNAME%,,,

 

 

 

;示例05 寒夜孤星 usbvm31b.inf华尔特F18型摄像头驱动

。。。。。。

[SourceDisksNames]
1 = %SRCDISKNAME%,,,

[SourceDisksFiles]
usbVM31b.sys = 1
VM31bPrp.Ax = 1
VM31bSTI.dll = 1
VM31bTWN.DS = 1
VM31bTXP.DS = 1
amcap.exe = 1
StillCap.exe = 1
VMCap.exe = 1
VM_STI.EXE = 1
config.set = 1
RunSetup.dll=1

。。。。。。

 

 

 

(十二)、[SourceDisksFiles] 节:列出每个文件所在的特定磁盘。

 

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

file-name=disk-number[,subdir] [,file-size]
其中file-name为必选项,是源盘上文件的名称。
disk-number是包含file-name指定文件所在源盘的盘符序列码,该盘符序列码需在[SourceDisksNames]节中列出,并大于或等于1
Subdir为可选项,指定文件所在源盘的子目录,如省略则源盘为缺省安装路径。
file-size为可选项,表明文件的大小,以字节为单位。

参考示例05usbVM31b.sys = 1

 

说明如果所有文件都在根目录中,[SourceDisksFiles] 节可以是空的。

 

(十三)、其他的节还有许多,如:Update .ini Fields 节 (UpdateIniFields),Add Ini File to Registry 节 (Ini2Reg),Update Config.sys 节 (UpdateCfgSys),Update Autoexec.bat 节 (UpdateAutoBat),Optional Components 节,等等。由于这些极少用到,所以就不详细讲解了。

 

  以下是常用命令列表:

 

 

 

INF AddReg 命令
INF DelReg 命令
INF CopyFiles 命令
INF DelFiles 命令
INF RenFiles 命令
INF AddService 命令
INF DelService 命令
INF AddInterface 命令
INF BitReg 命令
INF LogConfig 命令
INF ProfileItems 命令
INF UpdateInis 命令
INF UpdateIniFields 命令
INF Ini2Reg 命令

 

 

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


  这样的脚本看起来功能很弱,但是对于简单的安装任务已经足够了,安装不外乎复制文件,添加注册表,修改.INI文件等任务,这些都可以用.INF文件来完成。对于更复杂的安装要求,如要求安装程序的界面漂亮方便,要求有选择性的安装,要求安装程序自动修复的功能,就只好求助于其他的工具了,如微软的Windows Installer ,就具备更加强大的功能。

 

验证INF语法

  DDK(Device Development Kit,设备开发包)包含一个基本的工具CHKINF,在DDKTools目录中。它依赖于Perl脚本引擎,该引擎可以从www.perl.com上下载。虽然工具没有什么优点,但它在检查标准Microsoft INF文件时能报告许多错误。工具以HTML文件形式输出。

  DDK Tools目录还包括一个用语简化INF文件构造的实用程序CENINFEXE 。 必须把该工具区分为基本工具,它对入门者是有用的。

最后,DDK提供了STAMPINFEXE这一简单工具,它提供了快速增加或修改INF中版本信息的机制