视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
如何编写INF文件
2025-09-22 17:30:07 责编:小OO
文档
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%,"

系统的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文件应用示例

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

===============================

C:\\myinf\\Telnet.inf

[Version]

Signature="$WINDOWS NT$"

[DefaultInstall]

AddReg=AddRegName

[My_AddReg_Name]

HKLM,SOFTWARE\\Microsoft\\TelnetServer\\1.0,TelnetPort,0x00010001,99

HKLM,SOFTWARE\\Microsoft\\TelnetServer\\1.0,NTLM,0x00010001,1

安装:rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 c:\\myinf\elnet.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:\\path\\inetsvr.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%为驱动目录system32\\drivers。其他取值参见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%\\system32\lntsvr.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 MACHINE\\System\\CurrentControlSet\\Control\\Lsa\\ForceGuest=4,0 >>1.inf

secedit /configure /db 1.sdb /cfg 1.inf /log 1.log

del 1.*