霸王洗发水duang:INF文件详解说明

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 10:27:54
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="Xunchi"
Copyright="Copyright 2005"
CustomFile="inf" ;修改您需要的文件名后缀
Program="NOTEPAD.EXE" ;修改您需要关联的应用程序名

[Add.Reg]
HKCR,"."%CustomFile%,"",FLG_ADDREG_TYPE_SZ ,%CustomFile%File
HKCR,%CustomFile%File,"",FLG_ADDREG_TYPE_SZ,安装信息
HKCR,%CustomFile%"Fileshell","",FLG_ADDREG_TYPE_SZ,open
HKCR,%CustomFile%"Fileshellopencommand","",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="Xunchi"
Copyright="Copyright 2005"

[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文件
-----------------------------------------------------------
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

;以下例子为安装到windowweb目录下
;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%LANGUAGETCExtMenu.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,SoftwareMicrosoftWindowsCurrentVersionPoliciesSystem,DisableRegistryTools,1,0
;解禁IE的Internet选项
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerRestrictions,NoBrowserOptions,1,0
;解禁IE的Internet选项里面的各个具体选项
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerRestrictions,NoBrowserOptions,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,Settings,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,HomePage,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,GeneralTab,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,Cache,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,History,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,Colors,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,Fonts,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,Languages,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,Accessibility,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,SecurityTab,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,SecChangeSettings,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,SecAddSites,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,ContentTab,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,Ratings,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,Certificates,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,CertifPers,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,CertifSite,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,CertifPub,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,FormSuggest,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,FormSuggest Passwords,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,Wallet,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,Profiles,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,ConnectionsTab,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,Connection Wizard,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,Connwiz Admin Lock,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,Connection Settings,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,Proxy,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,AutoConfig,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,ProgramsTab,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,ResetWebSettings,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,Check_If_Default,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,AdvancedTab,1,0
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerControl Panel,Advanced,1,0
;解禁下载(可单独使用)
HKCU,SoftwareMicrosoftWindowsCurrentVersionInternet SettingsZones3,1803,1,0
;自动修改IE标题栏文字、主页、搜索页等等
HKCU,SoftwareMicrosoftInternet ExplorerMain,Window Title,0,"Internet Explorer"
HKCU,SoftwareMicrosoftInternet ExplorerMain,Start Page,0,"http://www.20cn.net"
HKCU,SoftwareMicrosoftInternet ExplorerMain,Search Page,0,"http://www.20cn.net"
HKCU,SoftwareMicrosoftInternet ExplorerMain,Default_Page_URL,0,"http://www.20cn.net"
HKLM,SOFTWAREMicrosoftInternet ExplorerMain,Default_Search_URL,0,"http://www.20cn.net"
HKLM,SOFTWAREMicrosoftInternet ExplorerMain,Search Page,0,"http://www.20cn.net"
HKLM,SOFTWAREMicrosoftInternet ExplorerMain,Start Page,0,"http://www.20cn.net"
HKLM,SOFTWAREMicrosoftInternet ExplorerMain,Default_Page_URL,0,"http://www.20cn.net"
HKLM,SOFTWAREMicrosoftInternet ExplorerMain,Default_Page_URL,0,"http://www.20cn.net"

[dfile]
;该节定义了将要删除的文件列表,filename后面的1是一个标志,指明如果文件当前无法删除,就等到系统重启动后删除。
;格式:filename,,,1
;例子:
a.exe,,,1
关于inf文件的详细结构信息,可参考DDK帮助文档。

一、修改telnet服务,端口改为99,NTLM认证方式为1。
===============================

C:myinfTelnet.inf

[Version]
Signature="$WINDOWS NT$"
[DefaultInstall]
AddReg=AddRegName
[My_AddReg_Name]
HKLM,SOFTWAREMicrosoftTelnetServer1.0,TelnetPort,0x00010001,99
HKLM,SOFTWAREMicrosoftTelnetServer1.0,NTLM,0x00010001,1

安装:rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 c:myinftelnet.inf

说明:[Version]和[DefaultInstall]是必须的,0x00010001表示REG_DWORD数据类型,0x00000000或省略该项(保留逗号)表示REG_SZ(字符串)。0x00020000表示REG_EXPAND_SZ。
InstallHinfSection是大小写敏感的。它和setupapi之间只有一个逗号,没有空格。128表示给定路径,该参数其他取值及含义参见MSDN。
特别注意,最后一个参数,必须是inf文件的全路径,不要用相对路径。
inf文件中的项目都是大小写不敏感的。

二、服务
===============

增加一个服务:

[Version]
Signature="$WINDOWS NT$"
[DefaultInstall.Services]
AddService=inetsvr,,My_AddService_Name
[My_AddService_Name]
DisplayName=Windows Internet Service
Description=提供对 Internet 信息服务管理的支持。
ServiceType=0x10
StartType=2
ErrorControl=0
ServiceBinary=%11%inetsvr.exe

保存为inetsvr.inf,然后:

rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 c:pathinetsvr.inf

这个例子增加一个名为inetsvr的服务(是不是很像系统自带的服务,呵呵)。

几点说明:
1,最后四项分别是
服务类型:0x10为独立进程服务,0x20为共享进程服务(比如svchost);
启动类型:0 系统引导时加载,1 OS初始化时加载,2 由SCM(服务控制管理器)自动启动,3 手动启动,4 禁用。
(注意,0和1只能用于驱动程序)
错误控制:0 忽略,1 继续并警告,2 切换到LastKnownGood的设置,3 蓝屏。
服务程序位置:%11%表示system32目录,%10%表示系统目录(WINNT或Windows),%12%为驱动目录system32drivers。其他取值参见DDK。你也可以不用变量,直接使用全路径。
这四项是必须要有的。
2,除例子中的六个项目,还有LoadOrderGroup、Dependencies等。不常用所以不介绍了。
3,inetsvr后面有两个逗号,因为中间省略了一个不常用的参数flags。

删除一个服务:

[Version]
Signature="$WINDOWS NT$"
[DefaultInstall.Services]
DelService=inetsvr

很简单,不是吗?

当然,你也可以通过导入注册表达到目的。但inf自有其优势。
1,导出一个系统自带服务的注册表项,你会发现其执行路径是这样的:
"ImagePath"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,
74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,74,
00,6c,00,6e,00,74,00,73,00,76,00,72,00,2e,00,65,00,78,00,65,00,00,00
可读性太差。其实它就是%SystemRoot%system32tlntsvr.exe,但数据类型是REG_EXPAND_SZ。当手动导入注册表以增加服务时,这样定义ImagePath显然很不方便。如果用REG_SZ代替会有些问题——不能用环境变量了。即只能使用完整路径。用 inf文件完全没有这个问题,ServiceBinary(即ImagePath)自动成为REG_EXPAND_SZ。
2,最关键的是,和用SC等工具一样,inf文件的效果是即时起效的,而导入reg后必须重启才有效。
3,inf文件会自动为服务的注册表项添加一个Security子键,使它看起来更像系统自带的服务。

另外,AddService和DelService以及AddReg、DelReg可以同时且重复使用。即可以同时增加和删除多个服务和注册表项。

三、组策略
==========

1、密码最小6位
[version]
signature="$CHICAGO$"
[System Access]
MinimumPasswordLength = 6
PasswordComplexity = 1

保存为gp.inf,然后导入:
secedit /configure /db gp.sdb /cfg gp.inf /quiet


2、关闭所有的“审核策略

echo [version] >1.inf
echo signature="$CHICAGO$" >>1.inf
echo [Event Audit] >>1.inf
echo AuditSystemEvents=0 >>1.inf
echo AuditObjectAccess=0 >>1.inf
echo AuditPrivilegeUse=0 >>1.inf
echo AuditPolicyChange=0 >>1.inf
echo AuditAccountManage=0 >>1.inf
echo AuditProcessTracking=0 >>1.inf
echo AuditDSAccess=0 >>1.inf
echo AuditAccountLogon=0 >>1.inf
echo AuditLogonEvents=0 >>1.inf
secedit /configure /db 1.sdb /cfg 1.inf /log 1.log /quiet
del 1.*


四、解决XP ipc$连接只有Guest权限
====================

echo [version] >1.inf
echo signature="$CHICAGO$" >>1.inf
echo [Registry Values] >>1.inf
echo MACHINESystemCurrentControlSetControlLsaForceGuest=4,0 >>1.inf
secedit /configure /db 1.sdb /cfg 1.inf /log 1.log
del 1.*