DDK中INF文件详解
INF文件的妙用
分类号:B J82中国计算机报/2001年/11月/12日/第B09版/桌面社区I N F文件就是设备信息文件,在安装驱动程序时必不可少。
在W in98系统中利用I N F文件可以为我们使用和维护系统提供极大的方便,本文就介绍了W i n98系统中I N F文件的一些实用功能。
I N F文件的妙用河北 孟海江当我们在基于W i n98的系统中为计算机添加新硬件设备的时候,将设备与计算机进行正确的物理连接后,要使硬件设备发挥作用,必须要为该设备安装相应的驱动程序,这时我们可能就会接触I N F文件了。
I N F文件指的是设备信息文件。
在给指定的硬件设备安装驱动程序时,首先要找到该设备所对应的I N F文件,然后系统会根据I N F文件中包含的检测和安装设备的信息来决定设备使用的资源并为该设备安装相应的驱动程序。
当一个硬件制造商开发新产品时,必须要建立一个I N F文件来明确地定义各个级别的设备所需要的资源和文件。
虽然I N F文件最普遍的应用是为安装硬件设备的驱动程序服务的,但是在W i n98系统中I N F文件可以为我们使用和维护系统提供极大的方便。
下面就介绍一下I N F文件在这方面的应用。
W i n98的定制安装定制安装也称为无看守安装。
通常情况下安装W i n98系统需要守在计算机前进行系统安装的交互操作,如果你觉得这样既费时又枯燥,你可以利用W i n98安装光盘中提供的B a t c h工具制作一个自动安装W i n98的脚本,即生成一个包含安装W i n98时需要和安装向导进行交互的各种信息的I N F文件(通常文件名为M s b a t c h.i n f )。
利用该I N F文件,下次安装W i n98系统时,将该I N F文件作为W i n98安装命令的参数,你就可以让安装程序根据I N F文件包含的信息自动地对W i n98进行安装和配置。
因为利用B a t c h工具制作I N F文件时,所有的选项均是用户根据自己的需要进行填写或选择,故这种安装方法也称为定制安装。
INF文件应用攻略
INF文件应用攻略
小艳子
【期刊名称】《软件指南》
【年(卷),期】2004(000)010
【摘要】如果问你什么是Inf文件?或许大家说不上什么,但是很多朋友在安装设备驱动程序时经常出现Inf文件。
其实Inf文件是微软为了方便硬件制作厂商发布设备驱动程序而创建的一种文件格式。
对于一般用户来说至多是了解一下,而很少加以研究应用。
那么Inf文件到底能不能为我们提供更多的应用呢?带着这样的疑问我们深入研究了Inf文件,发现了很多实用的操作。
【总页数】2页(P50-51)
【作者】小艳子
【作者单位】无
【正文语种】中文
【中图分类】TP316
【相关文献】
1.编写INF文件实现文件安装
2.用INF文件安装打印机驱动
3.Windows安装信息INF文件结构解析
4.用INF文件安装打印机驱动
5.对2004年12期中“inf文件的妙用”的几点疑问
因版权原因,仅展示原文概要,查看原文内容请购买。
inf文件用法
如果问你什么是Inf文件?或许大家说不上什么,但是很多朋友在安装设备驱动程序时经常出现Inf文件。
其实Inf文件是微软为了方便硬件制作厂商发布设备驱动程序而创建的一种文件格式。
对于一般用户来说至多是了解一下,而很少加以研究应用。
那么Inf文件到底能不能为我们提供更多的应用是很多朋友非常关心的事情,带着这样的疑问我们深入研究了Inf文件,发现了很多实用的操作。
一、轻松鉴别硬件信息由于Inf文件是微软为了方便设备制作商发布驱动程序而创建的文件格式,因此我们可以从中查看其设备的类型。
图1就是一个典型的Inf文件内容,其中在“Version”段中的“Class”后面的字符表示的是设备类型,其中Media是指多媒体备,一般来说就是声卡。
如果后面的字符为Display(显卡)、Net(网卡)、Modem(调制解调器)、Printer(打印机)、Image(摄像头)等。
除此之外在“Manufacturer”字段中则说明了生产厂商,例如图1中所代表的声卡厂商就是C-Media。
另外从Inf文件名上也可以看出设备厂商或类型,例如笔者打开的图1文件名就是CM686,与声卡的型号相对类,而光驱的信息则是保存在cdrom.inf中,硬件信息是保存在disk.inf文件中的。
二、轻松安装Inf不同设备的驱动程序安装方法是不一样的,例如有一些驱动程序制作成了Setup.exe文件,我们只需要执行该文件即可安装。
而有一些驱动程序则是单独以Inf文件存在的,那么该如何呢?其实很简单,我们只需要在该文件上右击,在弹出的菜单中选择“安装”命令即可(如图2)。
三、完全卸载错误的驱动安装了错误的驱动程序设备无法发挥应用的功效,在这个时候正常的做法是卸载充备并重新正确的驱动。
但是在搜索新的驱动程序过程中,Windwos往往会自作主张的将未完全卸载的Inf 文件安装进来,从而导致正确的驱动程序无法安装。
IT八哥网()告诉大家真正卸载并彻底删除错误的驱动程序文件的方法。
USB INF文件详解(USB)
INF文件详解INF文件格式要求一个INF文件是以段组织的简单的文本文件。
一些段油系统定义(System-Defined)的名称,而另一些段由INF文件的编写者命名。
每个段包含特定的条目和命名,这些命名用于引用INF文件其它地方定义的附加段。
INF文件的语法规则:1、要求的内容:在特定的INF文件中所要求的必选段和可选段、条目及命令依赖于所要安装的设备组件。
端点顺序可以是任意的,大多数的INF文件安装惯用的次序来安排各个段。
2、段名:INF文件的每个段从一个括在方括号[]中的段名开始。
段名可以由系统定义或INF编写者定义在Windows 2000中,段名的最大长度为255个字符。
在Windows 98中,段名不应该超过28个字符。
如果INF设计要在两个平台上运行,必须遵守最小的限制。
段名、条目和命令不分大小写。
在一个INF文件中如果有两个以上的段有相同的名字,系统将把其条目和命令合并成一个段。
每个段以另一个新段的开始或文件的结束为结束。
3、使用串标记:在INF文件中的许多值,包括INF编写者定义的段名都可以标示成%strkey%形式的标记。
每个这样的strkey必须在INF文件的Strings 段中定义为一系列显示可见字符组成的值。
4、行格式、续行及注释:段中的每个条目或命令以回车或换行符结束。
在条目或命令中,“\”可以没用做一个显示的续行符;分好“;”标示后面的内容是注释;可以用都好“,”分隔条目和命令中提供的多个值。
INF文件举例下面是一个完整的.inf文件,它是Windows 2000 DDK提供的USB批量阐述驱动程序范例中所附的.inf文件。
; Installation inf for the Intel 82930 USB Bulk IO Test Board;; (c) Copyright 1999 Microsoft;[Version]Signature="$CHICAGO$"Class=USBClassGUID={36FC9E60-C465-11CF-8056-444553540000}provider=%MSFT%DriverVer=08/05/1999[SourceDisksNames]1="BulkUsb Installation Disk",,,[SourceDisksFiles]BULKUSB.sys = 1BULKUSB.inf = 1[Manufacturer]%MfgName%=Microsoft[Microsoft]%USB\VID_045E&PID_930A.DeviceDesc%=BULKUSB.Dev,USB\VID_045E&PID_930A;[PreCopySection];HKR,,NoSetupUI,,1[DestinationDirs]BULKUSB.Files.Ext = 10,System32\DriversBULKUSB.Files.Inf = 10,INF[BULKUSB.Dev]CopyFiles=BULKUSB.Files.Ext, BULKUSB.Files.InfAddReg=BULKUSB.AddReg[BULKUSB.Dev.NT]CopyFiles=BULKUSB.Files.Ext, BULKUSB.Files.InfAddReg=BULKUSB.AddReg[BULKUSB.Dev.NT.Services]Addservice = BULKUSB, 0x00000002, BULKUSB.AddService[BULKUSB.AddService]DisplayName = %BULKUSB.SvcDesc%ServiceType = 1 ; SERVICE_KERNEL_DRIVERStartType = 3 ; SERVICE_DEMAND_STARTErrorControl = 1 ; SERVICE_ERROR_NORMALServiceBinary = %10%\System32\Drivers\BULKUSB.sysLoadOrderGroup = Base[BULKUSB.AddReg]HKR,,DevLoader,,*ntkernHKR,,NTMPDriver,,BULKUSB.sysHKLM,"System\Currentcontrolset\Services\BulkUsb\Parameters","Maxi mumTransferSize",0x10001,4096HKLM,"System\Currentcontrolset\Services\BulkUsb\Parameters","Debu gLevel",0x10001,2[BULKUSB.Files.Ext]BULKUSB.sys[BULKUSB.Files.Inf]BulkUsb.Inf;---------------------------------------------------------------;[Strings]MSFT="Microsoft"MfgName="Intel"USB\VID_045E&PID_930A.DeviceDesc="BulkUsb.Sys Intel 82930 USB Bulk IO Test Board"BULKUSB.SvcDesc="BulkUsb.Sys i82930 Bulk IO test driver"INF文件详解从上面完整的例子来看,可以对INF文件有的一个总体的印象,包括INF文件中包括的段,以及各段的书写格式。
INF文件编写
㈠、INF文件是什么.INF是Device Information File(设备信息文件)的缩写,是微软公司为供硬件设备制造商发布其设备驱动程序而发展的———许多硬件设备的驱动程序都是使用.INF文件来安装的。
.INF文件从Windows3.X时代就开始大量被使用了。
(说明:绿色部分可以忽略,仅做说明。
蓝色部分为重点突出,文中要点,红色部分为特别注意,看仔细哦。
)先看这个最常见的.INF文件哈:;示例04寒夜孤星AutoRun.inf【自动播放】[AutoRun]open=setup.exeicon=%SystemRoot%\system32\SHELL32.dll,27怎么样?没有比这个再简单的.INF文件了吧?这个就是所有.INF中最知名的啦!用于自动播放滴.INF,通常位于根目录下。
那么.INF是不是就很简单了捏?也不是。
如果你不怕头晕的话,就接着看下去哈。
.INF文件是一种具有特定格式的纯文本文件,我们可说它是一种安装脚本(SetupScript)。
虽然.INF只是纯文本文件,但是当我们在文件管理器explorer对.INF文件按鼠标右键后,在右键菜单上就会出现“安装I”命令。
此“安装”动作关联命令行程序基本形式为:RunDll/rundll32setupx.dll/SetupAPI.DLL,InstallHinfSection section reboot-mode inf-name其中,rundll/rundll32程序以命令行的形式调用Windows的动态链接库,其命令格式为:rundll.exe/rundll32.exe<DLL文件名>,<入口点>,<调用参数>setupx.dll/SetupAPI.DLL是安装API(Setup API)函数库,setupx.dll/SetupAPI.DLL与其后的入口点用逗号(,)分开,入口点是大小写敏感的。
inf逻辑磁盘标识
inf逻辑磁盘标识【实用版】目录1.介绍 INF 文件2.INF 逻辑磁盘标识的作用3.INF 文件的结构4.磁盘标识的获取与使用5.INF 文件的编写示例正文1.介绍 INF 文件INF(Installation)文件是一种 Windows 操作系统下的安装文件格式,主要用于安装驱动程序和软件。
INF 文件包含了安装过程中所需的所有信息,如文件名、版本、目标安装路径等。
它相当于一个安装向导,可以引导安装程序完成安装任务。
2.INF 逻辑磁盘标识的作用INF 逻辑磁盘标识是 INF 文件中一个重要的部分,用于指示安装程序将文件安装到哪个磁盘分区。
磁盘标识可以帮助用户在安装过程中选择合适的目标分区,确保安装的文件不会覆盖现有分区的数据。
3.INF 文件的结构一个典型的 INF 文件结构如下:```[Installation]admin=1bisect=1boot=1蝴蝶=1buildver=0.1 buildtype=1 component=1 debuglevel=1 designation=1 description=1 device=1 devicedesc=1 deviceid=1 devicetype=1 driver=1 driverversion=1 dynamic=1 forceinstall=1 hash=1inf=1install=1 installer=1 installmode=1installtype=1item=1key=1language=1lifecycle=1 localization=1 machine=1 manufacturer=1model=1ame=1os=1osbuild=1package=1parent=1paths=1productid=1 productname=1 productversion=1 programminglanguage=1 publisher=1renderer=1resolution=1resourceonly=1safedllversion=1section=1security=1signing=1skuid=1source=1subcomponent=1subinstallation=1sysprep=1targetos=1transform=1uifile=1unicode=1version=1virtualdevice=1vision=1whql=1```其中,【Installation】段是 INF 文件的核心部分,包含了安装过程中所需的所有信息。
INF文件--Windows时代强大的的批处理
51 Spool 目录 52 Spool 驱动目录 53 用户配置目录
———————————————————————————————————————
[DefaultInstall]节中定义的操作
LogConfig:志文件配置 Copyfiles:复制文件 Renfiles:文件改名
FLG_ADDREG_TYPE_EXPAND_SZ: 扩展字符串类型
———————————————————————————————————————
[DestinationDirs]节中所定义的常量路径
01 源目录(后跟路径) 10 Windows目录 11 Windows系统目录
FileList1=10 ;安装到Windows目录
[DefaultInstall]
Copyfiles=FileList,FileList1
相同的节的作用与上一例类似,请注意新出现的节[FileList],这是自定义节名,表示一文件组,[FileList1]类似。在节[DestinationDirs]中需定义每个文件组复制到的目录。Copyfiles指明了需要进行复制的文件组。
注册表操作的常量定义:
HKCR: HKEY_CLASSES_ROOT. HKCU: HKEY_CURRENT_USER.
HKLM: HKEY_LOCAL_MACHINE. HKU: HKEY_USERS.
FLG_ADDREG_TYPE_BINARY:二进制值 FLG_ADDREG_TYPE_DWORD: DWord值FLG_ADDREG_APPEND:在多字符串后添加字符 FLG_ADDREG_TYPE_SZ:字符类型FLG_ADDREG_TYPE_MULTI_SZ:字符串类型 FLG_ADDREG_TYPE_NONE: NULL值
inf 文件详解
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看是不是适合当前版本,如果适合的话就执行,否则不执行,当然强制安装是可以的;用于WIN9XSignature="$CHICAGO$";WINNT+;Signature="$Windows NT$";指定安装文件布局,该行是可选的,如果没有提供布局信息文件,则在INF文件内必须包含[SourceDisksNames]和[SourceDisksFiles]节LayoutFile=filename.inf[SourceDisksNames]节[SourceDisksNames]节罗列源文件所在盘符序列码、盘描述符、盘卷标号和盘序列号。
inf形式与要求
inf形式与要求INF是指用来支持安装程序的配置文件,这些文件包含特定的信息,用于安装程序的安装和配置。
INF文件的编写并不是很繁琐,但需要仔细考虑,以确保安装程序被正确地执行。
以下是有关INF形式和要求的信息:一、基本格式每个INF文件由四个主要部分组成:·[version]组·[DefaultInstall]组·[DefaultInstall]组和其他可以自定义的组·文件引用1. [version]组这个组是必需的,它会告诉安装程序系统程序的版本信息。
在这个组中,必须指定产品的名称、版本信息和厂商名称。
2. [DefaultInstall]组该组告诉安装程序,需要安装哪些文件、寄生模块等等。
在此组中,必须指定CopyFiles命令和AddReg命令。
DefaultInstall组定义了默认的安装选项,而其他自定义组可以用来定义其他选项。
这些组需要指定自己的命令和参数。
4. 文件引用最后,INF文件必须引用通过CopyFiles命令复制到设备上的所有文件。
二、写入INF文件的指令1. CopyFilesCopyFiles命令指定需要复制的文件,并指定其目标位置。
例如,以下指令可以将file.txt和file2.txt从SourceDir目录复制到目标目录:[SourceDisksFiles]file.txtfile2.txt[DestinationDirs]DefaultDestDir = 17102,.\MyDir这个例子显示了DestinationDirs元素,它告诉安装程序文件的目标位置。
2. AddRegAddReg命令是最重要的命令之一。
它用于添加条目到注册表中。
以下是一个使用AddReg命令的例子:[MyAddReg]HKLM,"Software\MyCompany\MyApplication","Data","Hello, World!"这个例子指定了HKey_Local_Machine作为注册表项的位置,其中包含数据"Hello, World!"。
INF文件详解
INF文件详解INF文件格式要求一个INF文件是以段组织的简单的文本文件。
一些段油系统定义(System-Defined)的名称,而另一些段由INF文件的编写者命名。
每个段包含特定的条目和命名,这些命名用于引用INF文件其它地方定义的附加段。
INF文件的语法规则:1、要求的内容:在特定的INF文件中所要求的必选段和可选段、条目及命令依赖于所要安装的设备组件。
端点顺序可以是任意的,大多数的INF文件安装惯用的次序来安排各个段。
2、段名:INF文件的每个段从一个括在方括号[]中的段名开始。
段名可以由系统定义或INF编写者定义在Windows 2000中,段名的最大长度为255个字符。
在Windows 98中,段名不应该超过28个字符。
如果INF设计要在两个平台上运行,必须遵守最小的限制。
段名、条目和命令不分大小写。
在一个INF 文件中如果有两个以上的段有相同的名字,系统将把其条目和命令合并成一个段。
每个段以另一个新段的开始或文件的结束为结束。
3、使用串标记:在INF文件中的许多值,包括INF编写者定义的段名都可以标示成%strkey%形式的标记。
每个这样的strkey必须在INF文件的Strings段中定义为一系列显示可见字符组成的值。
4、行格式、续行及注释:段中的每个条目或命令以回车或换行符结束。
在条目或命令中,“\”可以没用做一个显示的续行符;分好“;”标示后面的内容是注释;可以用都好“,”分隔条目和命令中提供的多个值。
INF文件举例下面是一个完整的.inf文件,它是Windows 2000 DDK提供的USB批量阐述驱动程序范例中所附的.inf 文件。
; Installation inf for the Intel 82930 USB Bulk IO Test Board;; (c) Copyright 1999 Microsoft;[Version]Signature="$CHICAGO$"Class=USBClassGUID={36FC9E60-C465-11CF-8056-444553540000}provider=%MSFT%DriverVer=08/05/1999[SourceDisksNames]1="BulkUsb Installation Disk",,,[SourceDisksFiles]BULKUSB.sys = 1BULKUSB.inf = 1[Manufacturer]%MfgName%=Microsoft[Microsoft]%USB\VID_045E&PID_930A.DeviceDesc%=BULKUSB.Dev, USB\VID_045E&PID_930A;[PreCopySection];HKR,,NoSetupUI,,1[DestinationDirs]BULKUSB.Files.Ext = 10,System32\DriversBULKUSB.Files.Inf = 10,INF[BULKUSB.Dev]CopyFiles=BULKUSB.Files.Ext, BULKUSB.Files.InfAddReg=BULKUSB.AddReg[BULKUSB.Dev.NT]CopyFiles=BULKUSB.Files.Ext, BULKUSB.Files.InfAddReg=BULKUSB.AddReg[BULKUSB.Dev.NT.Services]Addservice = BULKUSB, 0x00000002, BULKUSB.AddService[BULKUSB.AddService]DisplayName = %BULKUSB.SvcDesc%ServiceType = 1 ; SERVICE_KERNEL_DRIVERStartType = 3 ; SERVICE_DEMAND_STARTErrorControl = 1 ; SERVICE_ERROR_NORMALServiceBinary = %10%\System32\Drivers\BULKUSB.sysLoadOrderGroup = Base[BULKUSB.AddReg]HKR,,DevLoader,,*ntkernHKR,,NTMPDriver,,BULKUSB.sysHKLM,"System\Currentcontrolset\Services\BulkUsb\Parameters","MaximumTransferSize",0x10001,4096 HKLM,"System\Currentcontrolset\Services\BulkUsb\Parameters","DebugLevel",0x10001,2[BULKUSB.Files.Ext]BULKUSB.sys[BULKUSB.Files.Inf]BulkUsb.Inf;---------------------------------------------------------------;[Strings]MSFT="Microsoft"MfgName="Intel"USB\VID_045E&PID_930A.DeviceDesc="BulkUsb.Sys Intel 82930 USB Bulk IO Test Board"BULKUSB.SvcDesc="BulkUsb.Sys i82930 Bulk IO test driver"INF文件详解从上面完整的例子来看,可以对INF文件有的一个总体的印象,包括INF文件中包括的段,以及各段的书写格式。
inf格式说明
INF是Device Information File(设备信息文件)的简称,设备管理器通过读取相应的INF文件来安装驱动程序,其中记录了驱动程序安装的所有操作,包括复制文件到指定路径、添加或修改注册表、加载系统服务等,而实际的驱动程序则存放在sys、dll、vxd等文件中。
\subsubsection{INF文件的规则}\begin{description}\item [规则一:] INF 文件是分节的,每一个 INF 文件有许多的节组成,节名用方括号括起来。
这些节名有些是系统定义好的,有一些是用户自定义的。
每一个节名最长为255个字符(Windows 2000/XP/2003操作系统中)或28个字符(Windows 98操作系统中)。
节与节之间没有先后顺序的区别,另外,同一个INF文件中如果出现两个同样的节名,则系统会自动将这两个节名下面的条目合并到一起。
\item [规则二:]在节与节之间的内容叫条目,每一个节又是由许多的条目组成的,每一个条目都是由形如“signature="$CHICAGO$"”的形式组成的。
如果每一个条目的等号后有多个值,则每一个值之间用“,”号分隔开。
\item [规则三:] INF 文件对大小写不敏感。
\item [规则四:] ";" 号后面的内容为注释。
\item [规则五:] 如果一个条目的内容过多,在一行无法书写完全,则用 $\slash$将一行内容书写为多行。
明白了INF文件的规则后,让我们一起来解剖INF文件的结构。
\end{description}\subsubsection{INF文件的构成}在C:Windows下有一个名为INF的隐藏文件夹,我们可以找到很多??.INF、??.pnf格式的文件,前者即所谓的设备信息文件,后者是预编译信息文件。
用记事本可以打开INF文件,其中记录了必要的硬件安装信息,包括设备类型、设备生产厂商名称、适用产品等信息,Windows可以据此自动安装驱动程序。
inf文件编写
inf文件编写INF文件是Windows操作系统中的一种配置文件,用于描述和安装设备驱动程序、软件和操作系统组件。
编写INF文件需要遵循一定的标准格式,以确保系统能够正确识别和安装所描述的内容。
以下是一份详细的INF文件编写指南,包括所需的各个部分和示例内容。
1. [Version]部分:此部分用于指定INF文件的版本信息和操作系统要求。
示例如下:```[Version]Signature="$WINDOWS NT$"Class=PrinterClassGUID={4D36E979-E325-11CE-BFC1-08002BE10318}Provider=%ProviderName%CatalogFile=MyDriver.catDriverVer=12/01/2022,1.0.0.0```- Signature:指定INF文件的签名。
常用的值为"$WINDOWS NT$"。
- Class:指定设备的类别。
可以是预定义的类别,也可以是自定义的类别。
- ClassGUID:指定设备类别的GUID。
- Provider:指定设备提供商的名称。
- CatalogFile:指定INF文件所关联的CAT文件。
- DriverVer:指定驱动程序的版本和日期。
2. [Manufacturer]部分:此部分用于列出设备的制造商和其对应的设备描述。
示例如下: ```[Manufacturer]%ManufacturerName%=ManufacturerSection[ManufacturerSection]%DeviceDesc%=Install, USB\VID_1234&PID_5678```- ManufacturerName:指定制造商的名称。
- ManufacturerSection:指定制造商的设备描述。
3. [Install]部分:此部分用于指定设备的安装过程和所需的文件。
用inf文件添加服务-可编辑
用inf文件添加服务增加一个服务:[Version]Signature="$WINDOWS NT$"[DefaultInstall.Services]AddService=inetsvr,,My_AddService_Name[My_AddService_Name]DisplayName=Windows Internet ServiceDescription=提供对 Internet 信息服务管理的支持。
ServiceType=0x10StartType=2ErrorControl=0ServiceBinary=%11%\inetsvr.exe保存为inetsvr.inf,然后:rundll32.exe setupapi,InstallHinfSection DefaultInstall 128 c:\path\inetsvr.inf这个例子增加一个名为inetsvr的服务。
几点说明:一最后四项分别是服务类型: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。
你也可以不用变量,直接使用全路径。
这四项是必须要有的。
二除例子中的六个项目,还有LoadOrderGroup、Dependencies等。
不常用所以不介绍了。
三 inetsvr后面有两个逗号,因为中间省略了一个不常用的参数flags。
删除一个服务:[Version]Signature="$WINDOWS NT$"[DefaultInstall.Services]DelService=inetsvr另外用srvinstw.exe添加服务的时候,有时会出现1053 服务没有及时响应启动或控制请求。
inf文件编写
inf文件编写INF文件是Windows操作系统中的一种配置文件,它用于安装和配置硬件设备驱动程序。
INF文件包含了设备的描述信息、驱动程序的文件路径、注册表设置、设备的安装和卸载等相关信息。
在本文中,我将详细介绍INF文件的结构和编写方法,以匡助您准确满足任务名称描述的内容需求。
一、INF文件的基本结构INF文件采用文本格式,可以使用任何文本编辑器进行编写。
下面是一个基本的INF文件结构示例:[Version]Signature="$Windows NT$"Class=SampleDeviceClassGuid={XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}Provider=%Manufacturer%[Manufacturer]%Manufacturer%=ManufacturerName[ManufacturerName]%DeviceName%=DriverInstall, NTx86, NTamd64[DriverInstall.NTx86]CopyFiles=DriverFiles[DriverInstall.NTamd64]CopyFiles=DriverFiles[DriverFiles]DriverFileName.sys[DestinationDirs]DefaultDestDir=12二、INF文件的各个部份详解1. [Version]:该部份用于指定INF文件的版本信息,Signature字段用于指定INF文件的签名,Class字段用于指定设备的类别,ClassGuid字段用于指定设备的GUID,Provider字段用于指定设备创造商的名称。
2. [Manufacturer]:该部份用于指定设备创造商的名称,可以根据实际情况进行修改。
3. [ManufacturerName]:该部份用于指定设备的名称,可以根据实际情况进行修改。
DDK中INF文件详解
安装一个驱动程序一个后缀是INF的文本文件控制设备驱动程序自动的安装。
INF格式类似于WIN 3.x下的老式的.INI文件,但是复杂些。
一个INF文件允许自动的或者在对话框的帮助下安装驱动程序文件。
驱动程序安装结束后对系统产生两个持久的影响:1. 描述驱动程序的系统注册表入口,它的加载顺序和任何适当的配置数据。
2. 驱动程序文件被拷贝到适当的系统路径。
INF文件是影响这些改变的标准的机制,它可以提供定制安装。
使用INF文件自动安装INF文件随着硬件和驱动程序一起提供,INF文件的结构和内容是驱动程序作者的责任。
INF文件结构INF文件是被分(section)成几个部分的文本文件,每个部分被指定一个标识符号﹐它被中括号([])括起来﹒一些部分的命名是必须的﹐而其它部分是驱动程序特定的﹒每个部分是一些安装动作﹐或者连接或者列举其它部分﹒文件中各个部分的顺序是不重要的﹐因为每个部分都是被命名和连接的﹒一个部分继续直到另一个部分或者遇到文件结束﹒每个部分的标识符号是独一无二的名字﹐为了保持与WIN98的兼容﹐它的长度被限制在28个字符之内﹐可以包含下划线和圆点字符﹐在引用整个名字的前提下﹐可以包含空格字符﹒文件内容的一般格式如下:entry = value [, value...]entry是指令﹐关键词或者文件名﹐value是entry被应用的属性﹒entry或者value名字可以指定为一个使用百分号(%)的代替一些具体数据的字符串﹐分割INF文件的[Strings]提供一个特殊语言ID的值。
Version 部分一个有效的INF文件从一个命名为[Version]的部分开始,它像一个INF文件的头和标识。
表15.1. [Version]部分的条目Manufacturers部分另一个必须的部分是[Manufacturers]﹐这个部分的条目列出了可以使用这个INF文件安装的设备和驱动程序﹐条目的形式是:manufacturer=modelmanufacturer列出被安装的硬件的制造商的INF文件的唯一名字﹒model提供指向INF 文件中另一个进一步安装这个模型的部分的指针﹐Models 部分罗列在[Manufacturers]部分的每一个模型﹐在文件中必须有相应的部分﹐model部分的每个条目的形式是:device-description=install-section-name,hw-id[,compatible-id...]device-description描述了设备模型的列表和一个短描述﹒这个字符串在安装的时候在对话框中提供给用户﹐因此它需要提供多种语言的文本﹒install-section-name的值参考[DDInstall]部分﹐也描述了INF文件的另一个进一步安装的部分﹒hw-id是硬件设备在PnP兼容的总线上声明的时候返回的PnP标识符号﹒例如﹐USB\VID_045E&PID_00B标识微软HID(Human Input Device)的USB键盘设备﹒compatible-id可以是任何表示用于任何的包含在列表中的相同安装脚本的数值﹒DDInstall 部分它的名字独一无二的指定从[Models]部分列出的每个制造商的每个模型﹐AddReg条目在语法上是必须的﹐CopyFiles条目对于[DDInstall]部分是重要的﹐它的形式是:CopyFiles=file-list-section[,file-list-section...] 或者CopyFiles=@filename前者是更普通的版本﹐它允许一个指向另一个包含一个安装文件列表的部分的指针﹒然而对于简单的驱动程序的安装﹐可以直接的使用文件名﹒表15.2. [DDInstall]部分条目CopyFiles部分INF文件的[CopyFiles]部分是唯一的名字并且CopyFiles的指示器在[DDInstall]部分﹐它的条目的形式是: destination-filename[,source-filename,temp-filename,flag]表15.3. CopyFiles flag的定义destination-filename是需要复制的文件名﹐如果与源文件名不同﹐source-filename 必须被指定﹐temp-filename在WIN98中是为新文件指定一个中间的文件名直到系统重新激活﹐对于WIN2000来说﹐它是无用的﹒flag值指定新的目标文件的部署﹒这些值可以OR起来使它有多个性质﹒应该确认没有互斥的项目﹒因为[CopyFiles]条目的语法不包含指定源文件的磁盘或者路径选项﹐所以﹐必须使用其它的INF文件的部分[SourceDisksNames]和[SourceDisksFiles]﹒[CopyFiles]是复制的源文件名﹐复制的目标则在[DestinationDirs]部分﹒AddReg部分INF文件的[AddReg]部分是唯一的名字﹐并且引用AddReg的指示器在[DDInstall]部分﹒这个部分的目的是提供在系统注册表中添加或者修改条目﹐形式是﹕reg-root[,subkey,value-name,flags,value]reg-root是注册表根的缩写﹐子键描述根键下的键名﹐使用反斜线字符(\)分开子键﹒例如﹐Software\W2KDriverBook\ Driver\Setting是有效的HKCU或者HKLM根键的子键﹒表15.4. AddReg reg-root缩写的意义value-name指定被添加或者修改注册表值﹒每个系统注册表键包含零个或者多个不同数据类型的值﹒注册表编辑器在右边的窗格列出了子键的值﹒值的名字和值的数据也一起显示出来﹒左边的窗格仅仅显示子键﹒flags指定数据的类型﹒表15.5. AddReg flags定义系统注册表对于驱动程序安装的重要性将在后面讨论﹒SourceDisksNames 部分如果INF文件包含的驱动程序文件分布在多个磁盘上﹐INF文件就必须包含[Source-DisksNames]部分﹐这个部分包含文件分布的每个磁盘的人口﹒diskid=disk-description[,tagfile,unused,path]diskid是唯一的分配设置中的名字﹒通常﹐磁盘号从1开始﹐disk-description是一个提示用户合适的磁盘的字符串﹒tagfile值有双重的作用﹒确定在安装过程中用户提供正确的磁盘﹐tagfile值在安装过程继续进行之前被检验﹐如果tagfile文件不存在﹐用户被重新提示插入正确的磁盘﹒如果agfile值包含.CAB的扩展名﹐表示磁盘上的驱动程序文件是压缩文件﹒path值是一个以root-relative为磁盘根目录的驱动程序文件的路径﹒像tagfile值一样是可选择的﹒SourceDisksFiles 部分INF文件必须包含一个[SourceDisksFiles]部分﹒这个部分列出了在安装驱动程序过程中使用的文件名﹒每个文件都有相应的条目﹒filename=diskid[,subdir,size]diskid值是一个[SourceDisksNames]部分指定的可以找到文件名的磁盘﹐可选的subdir值指定文件的路径﹒可选的size值指定解压缩文件的字节大小﹐安装过程使用这个数据在尝试复制文件之前决定目标系统是否适合安装﹒DestinationDirs部分这是个必须的提供目标路径的部分﹒file-list-section=dirid[,subdir] 或者DefaultDestDir=dirid[,subdir]file-list-section是一个被[CopyFiles]的指示器唤起的部分﹒它指定所有的被指示器复制的文件安装到指定的路径﹒对于DefaultDestDir﹐用于[CopyFiles]中所有的指示器﹐通常与file-list-section联合使用﹒表15.6. DestinationDirsdirid定义DDInstall.Services 部分为了让复制的文件在目标系统中起驱动程序的作用﹐必须通知服务控制管理器(SCM)﹐在WIN2000中安装的每个驱动程序在注册表的HKLM\System\CurrentControlSet\Services下面﹐ServiceType值是1表示内核模式的驱动程序﹒StartType指出在系统引导过程中在何时加载驱动程序﹒ErrorControl值决定在驱动程序加载的过程中如果遇到错误后如何是好﹒ServiceBinary值指出驱动程序的位置(.SYS文件)﹒但是可能会被遗漏﹐如果二进制文件在%windir%\system32\drivers路径并且与HKLM\...\Services下面的子键名的名字相同的时候就发生这种情况﹒DDInstall.Services部分条目的形式是﹕AddService=ServiceName,[flags],service-install-section[,eventlog-install-section]ServiceName描述服务的名字﹐典型的是驱动程序的名字(没有.SYS扩展名)表15.7. AddService flags定义service-install部分和可选的eventlog-install部分唤起附加的控制服务值条目的INF部分(例如﹐ServiceType和StartType)﹒ServiceInstall 部分[ServiceInstall]部分﹐它的名字在DDInstall.Services部分的AddService条目中唯一指定﹐控制和安装驱动程序到服务控制管理器﹒表15.8. ServiceInstall 部分条目INF 例子前面介绍的INF文件好象非常复杂﹐这里使用一个例子说明它﹒在下面的例子中﹐INF 控制一个由两个文件组成的驱动程序﹒Launcher.SYS被复制到系统的驱动程序路径﹐Launcher.HLP被复制到系统的帮助路径(例如﹐ WINNT\System32\Drivers和WINNT\Help)﹒[Version]Signature="$Windows NT$"Class=MissilesClassGUID={C9B3D080-6889-11d4-93FC-444553540000} Provider=W2KDriverBook DriverVer=07/04/2000,1.00.2468.1; 注释在分号(;)后面[DestinationDirs] ; 指定文件复制的目的地DefaultDestDir=12 ; %windir%\system32\drivers CopyLaunchHelp=18 ; standard help directory[Manufacturer]W2KDriverBook=MyMfgName ; 唤起model部分[MyMfgName] ; 开始一个Models部分"ISA Missile Launcher"=InstallLauncher,ISA\Launcher ; 我们的设备列表[InstallLauncher] ; 开始DDInstall 部分CopyFiles=CopyLaunchFiles ; 唤起CopyFiles 部分.CopyFiles=CopyLaunchHelp ; 另一个是help的AddReg=LaunchRegSection ; 唤起AddReg 部分[CopyLaunchFiles] ; 开始CopyFiles部分Launcher.sys[CopyLaunchHelp] ; Help文件的CopyFiles部分Launcher.hlp[LaunchRegSection] ; 开始AddReg 部分HKR,"Parameters","Coordinates",FLG_ADDREG_TYPE_DWORD,0; 给设备提供一个是0的DWORD 值[SourceDisksNames] ; 这个部分不是真的需要﹐1="Missile Launcher Driver Files" ; 因为只有两个文件并且在同一个磁盘上[SourceDisksFiles]Launcher.sys=1 ; 类似的﹐因为它们在同一个磁盘上﹐Launcher.hlp=1 ;所以不是真正的需要这个部分[InstallLauncher.Services] ; DDInstall.Services部分AddService=Launcher,2,LaunchService[LaunchService] ; 设置SCM﹐这样驱动程序就可以运行了ServiceType=1 ; 驱动程序StartType=3 ; 需要时手动加载ErrorControl=1 ; 汇报错误ServiceBinary=%12%\Launcher.sys ; 驱动程序路径使用INF文件一旦驱动程序的INF创建完成﹐必须处理它﹐使它有用﹒手动安装手动的处理INF文件﹐必须使用Windows的文件管理器选择INF文件﹐右击这个文件﹐选择安装﹒在真正的即插即用环境中﹐插入或者移除设备触发相应的驱动程序的安装﹐加载和卸载﹒因此﹐保留手动的安装是为了最初的测试和调试驱动程序﹒自动安装当一个即插即用的设备被插入到一个系统﹐数个子系统相互作用来加载新的驱动程序﹒1. 当设备被插入﹐硬件使用自动侦测和自动配置﹐告诉总线驱动程序设备出现﹒依赖于总线硬件﹐这可能涉及通知总线驱动程序一个新的总线设备列举发生﹒在这一步的最后﹐驱动程序发现新的设备出现并且有一个指定的设备ID﹒2. 内核模式PnP管理器通知用户模式PnP管理器一个新的有一个指定ID的设备出现在系统中﹒3. 用户模式PnP管理器使用WIN2000的Setup API库为新的设备提供一个类似的驱动程序列表﹒为了合适的驱动程序﹐系统使用新设备的class和model查找系统的INF目录(例如﹐WINNT\INF)﹒4. 如果不能找到合适的INF文件﹐系统不进行进一步的动作直到一个有特权的用户进入系统﹒用户被提供一个新的硬件向导﹒用户提供驱动程序的位置和合适的INF文件位置﹒5. 一旦找到INF文件﹐它被使用CfgMgr API库处理﹒驱动程序文件和注册表条目被安装和修改﹒内核模式的PnP管理器主要执行这个步骤﹒6. 基于INF文件的指导﹐内核模式PnP管理器加载任何低层的滤波驱动程序﹐然后是functional驱动程序﹐最后是高层的驱动程序﹒在堆栈中的高层的驱动程序然后发送适当的PnP信息﹐包括IRP_MN_START_DEVICE.添加/移除硬件向导在安装过程中﹐主要的与用户的交互是添加新硬件向导﹒注意有一个制造商的列表(来自于INF文件的[Manufacturers]部分)﹐和Models列表(来自于INF文件的[Models]部分)﹒通常﹐用户手动选择适当的驱动程序去安装和加载﹒如果驱动程序被安装﹐它的DriverEntry和AddDevice例程必须仍然有效﹐这样使请求驱动的硬件满意新代码的设置﹒换句话说﹐手动的选择可能成功的安装﹐但是初始化是失败的﹒Class名字和设备IDs即插即用设备自动安装的过程很大程度上依赖安装程序的定位合适驱动程序的INF文件和文件中各个部分的能力﹒这个部分文章的目的是解释Class名字和设备Ids﹐还有定位INF 文件的过程﹒每个即插即用设备应该有一个唯一的指定硬件模型的标识符号﹒因此提供设备ID给即插即用总线硬件和总线驱动程序﹒当然﹐总线驱动程序在新的设备被插入后的很短时间内请求设备ID﹒设备ID的形式与总线类型有关﹒但是﹐一般看起来是:<enumerator>\<enumerator-specific-device-ID>(例如﹐PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02)对于驱动程序代码﹐一个硬件设备可能汇报多个设备ID﹐它是设备功能上的与很多models兼容的陈述﹒因为INF文件的[Models]部分包含一个hw-id值﹐所以﹐寻找与新安装的设备返回的设备ID相匹配的INF文件中的条目非常简单﹒同样的INF条目允许相兼容硬件的列表的规范有附加的设备Ids形式﹒如果设备ID不能在INF文件中定位精确的匹配﹐就使用兼容的ID﹒另一个为设备定位合适的驱动程序的关键元素是安装类(Setup Class)的观念﹒一系列相关的设备可以共享分层的驱动程序 (例如﹐upper或者lower滤波器)﹐甚至在堆栈中个别的驱动程序﹒安装类被GUID 和name唯一的标识﹒微软定义了一系列驱动程序类﹐新的类可能被定义新的硬件组﹒创建新的组之前﹐必须选择一个新的GUID和class名字﹒表15.9. 安装类: 名字和GUIDs自定义安装驱动程序一般提供两个定制驱动程序安装的信息﹒第一﹐提供一个自定义的安装程序代替新硬件安装程序﹐为了提供这个功能﹐自定义的安装程序需要使用SETUPAPI.DLL提供的例程﹒这个库中的每个函数的形式是SetupDiXxx﹒DDK提供使用这个库的详细资料﹒第二﹐驱动程序可以提供一个自定义的设置设备的向导页﹒在它的工作要完成之前﹐安装程序发送一个DIF_NEWDEVICEWIZARD_FINISHINSTALL请求来提供给驱动程序一个显示自定义页的机会﹒控制驱动程序的加载顺序有时﹐驱动程序的加载顺序是非常重要的﹒可能一个驱动程序依赖另一个驱动程序初始化完成﹒当有这样的依赖产生﹐服务控制管理器(the Service Control Manager)可以取得系统注册表中条目LoadOrderGroup和Dependencies﹐这些值可以在INF文件中的[ServiceInstall]部分指定﹒LoadOrderGroup是命名一个指定的驱动程序加载顺序组的一个号码﹐Dependencies指定在这个驱动程序加载成功之前必须加载的组﹒这样的相互依赖不是公共的﹐也不应该是公共的﹒在一个真正的以设备为中心的环境(支持即插即用)中﹐驱动程序应该使用尽量少的联系的顺序﹒另一方面﹐分层很多的驱动程序的执行需要这些规范是合理的﹒驱动程序的数字签名WIN2000的CD上附带有很多第三方的驱动程序﹒为了分享这些程序﹐需要几个条件﹒加之﹐无论何时尝试在WIN2000上安装一个驱动程序﹐都会收到一个陈述设备驱动程序没有数字签名并且它的确实性没有被微软检验的警告信息﹒下面介绍微软的检验驱动程序的确实性的作用和驱动程序作者和硬件制造商的保证它们的软件包被包含在未来的WIN2000 CD上的负担﹒.微软检验驱动程序的原因微软检验驱动程序有两个目标:1. 通过方便的设备驱动程序的发售提供或者促进WIN2000和更多的硬件设备的协同工作能力﹒2. 确定设备驱动程序是稳定的和没有折中系统的完整性﹒因为设备驱动程序操作在内核模式﹐它们可以慢慢的或者很快的使系统崩溃﹒因为系统的不稳定性常常由内核自己引起﹒这样﹐微软为它的操作系统维持一个被鉴定的制造商和驱动程序的目的是明显的﹒当然﹐WIN2000和大多数的硬件的协同工作能力是一个强有力的买点﹒因此﹐微软常常与硬件制造商一起来确保及时地发布兼容的驱动程序﹒为了完成这两个目标﹐微软有专门的提供硬件和驱动程序证明的团队﹐Windows硬件质量实验室(WHQL)﹒数字签名作为WHQL程序的一部分﹐一个被检验过的驱动程序获得一个允许在WIN2000中安装驱动程序并且不会产生警告的数字签名﹒数字签名由几个部分组成:1. 一个被包含在分布式的驱动程序包的目录文件(.CAT)﹐它包含微软分配的数字签名﹒2. 一个在INF文件中[Versions]部分的涉及.CAT文件的条目﹒3. WIN2000的是或者否允许一个没有数字签名的驱动程序安装的策略﹒数字签名有更改检验﹐这样确保驱动程序被使用供货商提供的原始的代码安装﹒它使用密码技术来完成这个目标﹐这个数字签名没有更改驱动程序代码﹒小结Windows 2000和Windows 98的自动的设备驱动程序的安装对于用户来说是一个巨大的进步﹒然而这个步骤需要驱动程序的作者附加的工作﹐至少﹐必须提供一个INF文件﹒.。
INF文件的语法解说
;解禁IE的Internet选项
HKCU,SoftwarePoliciesMicrosoftInternet ExplorerRestrictions,NoBrowserOptions,1,0
;31 ;root of host drive of a virtual boot drive
;32 ;old windows dir if exists
;以下例子为安装到windowweb目录下
;DefaultDestDir=10,"web"
;[Install]节提供了一个INF文件安装过程的总览,它识别文件内其他包含安装信息节的详细动作,是Windows内建安装函数识别安装过程和内容的真正入口
其中file-name为必选项,是源盘上文件的名称。
disk-number是包含file-name指定文件所在源盘的盘符序列码,该盘符序列码需在[SourceDisksNames]节中列出,并大于或等于1。
Subdir为可选项,指定文件所在源盘的子目录,如省略则源盘为缺省安装路径。
file-size为可选项,表明文件的大小,以字节为单位。
;%01%wincmd.ini, Configuration,,"Mainmenu=%01%LANGUAGETCExtMenu.mnu"
;更新ini文件值内容
updateinifield =
;ini文件更新注册表
ini2reg=aa.ini
;更新config.sys内容
INF文件解析
般我们总是认为INF文件是系统设备的驱动程序,其实这是错误的认识,Windows之所以在安装某些硬件的驱动时提示需要INF文件是因为INF文件为该设备提供了一个全面描述硬件参数和相应驱动文件(DLL文件)的信息。
就好比我们看着说明书安装电脑硬件一样,我们就是Windows系统,说明书就是INF文件。
INF文件功能非常强大,几乎能完成日常操作的所有功能。
您可以把它看成是Windows系统底下的超强批处理。
要熟练掌握和理解甚至是编写INF文件需要对其内部结构有相当的认识。
INF文件中包含硬件设备的信息或脚本以控制硬件操作。
在INF文件中指明了硬件驱动该如何安装到系统中,源文件在哪里、安装到哪一个文件夹中、怎样在注册表中加入自身相关信息等等。
安装监视器、调制解调器和打印机等设备所需的驱动程序,都是通过INF文件,正是INF的功劳才使得Windows可以找到这些硬件设备的驱动并正确安装。
当我们通过“开始→控制面板→添加删除程序→Windows安装程序”来添加系统组件的时候,INF文件将会自动调用。
而在其他场合下,则需要在INF文件上点击鼠标右键,然后选择“安装”,你才能顺利安装应用程序。
在C:/Windows/INF文件夹中存放有大量的INF文件。
该文件夹一般处在隐含状态,如果你想查看该文件夹,可选择“查看→文件夹选项→查看”,然后在“文件和文件夹”选项下选择“显示所有文件”。
[编辑本段]数学符号inf,表示下确界。
对于函数y=f(x),在使f(x)大于等于M成立的所有常数M中,我们把M的最大值M’叫做函数y=f(x)的下确界。
下确界:在所有那些下界中如果有一个最大的下界,就称为M的下确界[编辑本段]INF结构INF文件其实是一种纯文本文件,可以用任意一款文本编辑软件来打开进行编辑,如:记事本、写字板等。
INF文件有一整套的编写规则,每一个INF文件都是严格按照这些规则来编写的。
*规则一:INF文件是分节的,每一个INF文件有许多的节组成,节名用方括号括起来。
INF
INFINF是Device INFormation File的英文缩写,是Microsoft公司为硬件设备制造商发布其驱动程序推出的一种文件格式,是Windows操作系统下用来描述设备或文件等数据信息的文件。
INF文件是由标准的ASCII码组成,可以用任何一款文字编辑器查看修改其中的内容。
目录INF简介数学符号INF规则INF结构INF应用实例INF文件格式详解常见autorun.inf病毒文件结构INF简介数学符号INF规则INF结构INF应用实例INF文件格式详解常见autorun.inf病毒文件结构展开编辑本段INF简介一般我们总是认为INF文件是系统设备的驱动程序,其实这是错误的认识,Windows之所以在安装某些硬件的驱动时提示需要INF文件是因为INF文件为该设备提供了一个全面描述硬件参数和相应驱动文件(DLL文件)的信息。
就好比我们看着说明书安装电脑硬件一样,我们就是Windows系统,说明书就是INF文件。
INF文件功能非常强大,几乎能完成日常操作的所有功能。
您可以把它看成是Windows系统底下的超强批处理。
要熟练掌握和理解甚至是编写INF文件需要对其内部结构有相当的认识。
INF文件中包含硬件设备的信息或脚本以控制硬件操作。
在INF文件中指明了硬件驱动该如何安装到系统中,源文件在哪里、安装到哪一个文件夹中、怎样在注册表中加入自身相关信息等等。
安装监视器、调制解调器和打印机等设备所需的驱动程序,都是通过INF文件,正是INF的功劳才使得Windows 可以找到这些硬件设备的驱动并正确安装。
当我们通过“开始→控制面板→添加删除程序→Win dows安装程序”来添加系统组件的时候,INF文件将会自动调用。
而在其他场合下,则需要在INF文件上点击鼠标右键,然后选择“安装”,你才能顺利安装应用程序。
在C:/Windows/INF文件夹中存放有大量的INF文件。
该文件夹一般处在隐含状态,如果你想查看该文件夹,可选择“查看→文件夹选项→查看”,然后在“文件和文件夹”选项下选择“显示所有文件”。
Inf文件详解
Inf文件详解Inf是一个头疼的东西,主要它是一个不用语言而是用配置文件来处理的文件,安装的时候无法调试,(Windbg 可以在驱动中设断点,但不能在.inf文件中停住),只有一个日志文件可以参考,而且一个INF文件用到了不同的语法,完全看懂Inf文件曾经是我的一个梦想,原来我都是Copy别人的文件再改改,其实我没有完全弄明白,那好,请我们先沉着迎战,这篇文章是我看过的写的最好的一个讲Inf文件的文章,其实我看的好像就只有这一篇,哈哈(不算MSDN和OSR)。
给大脑不大的熊的Inf 文件给给大大脑脑不不大大的的熊熊的的Inf 文文件件(原文标题很奇怪,看了就知道了,这个可是潜心找到的,不容易找的,真的是可遇不可求啊)从前的一天,我在百英亩的森林里散步,一个动物过来搭话。
"不好意思"一个小粉猪问道."但但但是你知道Windows设备驱动,因为, 如果你知道, 我们的朋友需要一些帮助", 他说, 指向一个小熊。
(小熊前面有好多修饰词,俺不懂没有翻译,好像是穿着吊带裤,哈哈)"你需要什么帮助?", 我问这个小熊."嗯", 小熊回答道,"我是一个大脑不大的小熊,我写了一个Windows设备驱动,但我不知道如何安装它"."你所要做的是, 写一个.INF文件,它描述你所控制的驱动和设备,告诉Windows操作系统",我说."嗯, 顺便问一下,你的驱动控制的是什么设备呢?"."它是一个蜂蜜(hunny)过滤驱动.它去掉泥土和蜜蜂和其他的杂物。
这可是我的发明。
", 它相当骄傲的说(hunny应该是蜂蜜,不过我没有查到这个单词)"嗯", 我自己想,"这个大脑不大的小熊还不错嘛"."你想, 也就是说, 你是否知道如何去写一个这种"电鹰覆文件"", 小熊问道."当然, 为什么我们不坐下来,我来告诉你关于.INF文件的所有信息,嗨,都到哪里去了?回来!它们不是那么难!"一小群动物出现了, 一个接一个, 带着恐惧的眼神。
INF文件详解
[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文件有可能对系统产生不良的影响,这样双击文件就可打开编辑该文件了。
18 帮助文件目录
20 字体目录
21 根目录
24 应用程序目录
25 共享目录
30 当前根目录
50 System目录
51 Spool 目录
52 Spool 驱动目录
53 用户配置目录
----------------------------------------------------------
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
安装一个驱动程序一个后缀是INF的文本文件控制设备驱动程序自动的安装。
INF格式类似于WIN 3.x下的老式的.INI文件,但是复杂些。
一个INF文件允许自动的或者在对话框的帮助下安装驱动程序文件。
驱动程序安装结束后对系统产生两个持久的影响:1. 描述驱动程序的系统注册表入口,它的加载顺序和任何适当的配置数据。
2. 驱动程序文件被拷贝到适当的系统路径。
INF文件是影响这些改变的标准的机制,它可以提供定制安装。
使用INF文件自动安装INF文件随着硬件和驱动程序一起提供,INF文件的结构和内容是驱动程序作者的责任。
INF文件结构INF文件是被分(section)成几个部分的文本文件,每个部分被指定一个标识符号﹐它被中括号([])括起来﹒一些部分的命名是必须的﹐而其它部分是驱动程序特定的﹒每个部分是一些安装动作﹐或者连接或者列举其它部分﹒文件中各个部分的顺序是不重要的﹐因为每个部分都是被命名和连接的﹒一个部分继续直到另一个部分或者遇到文件结束﹒每个部分的标识符号是独一无二的名字﹐为了保持与WIN98的兼容﹐它的长度被限制在28个字符之内﹐可以包含下划线和圆点字符﹐在引用整个名字的前提下﹐可以包含空格字符﹒文件内容的一般格式如下:entry = value [, value...]entry是指令﹐关键词或者文件名﹐value是entry被应用的属性﹒entry或者value名字可以指定为一个使用百分号(%)的代替一些具体数据的字符串﹐分割INF文件的[Strings]提供一个特殊语言ID的值。
Version 部分一个有效的INF文件从一个命名为[Version]的部分开始,它像一个INF文件的头和标识。
表15.1. [Version]部分的条目Manufacturers部分另一个必须的部分是[Manufacturers]﹐这个部分的条目列出了可以使用这个INF文件安装的设备和驱动程序﹐条目的形式是:manufacturer=modelmanufacturer列出被安装的硬件的制造商的INF文件的唯一名字﹒model提供指向INF 文件中另一个进一步安装这个模型的部分的指针﹐Models 部分罗列在[Manufacturers]部分的每一个模型﹐在文件中必须有相应的部分﹐model部分的每个条目的形式是:device-description=install-section-name,hw-id[,compatible-id...]device-description描述了设备模型的列表和一个短描述﹒这个字符串在安装的时候在对话框中提供给用户﹐因此它需要提供多种语言的文本﹒install-section-name的值参考[DDInstall]部分﹐也描述了INF文件的另一个进一步安装的部分﹒hw-id是硬件设备在PnP兼容的总线上声明的时候返回的PnP标识符号﹒例如﹐USB\VID_045E&PID_00B标识微软HID(Human Input Device)的USB键盘设备﹒compatible-id 可以是任何表示用于任何的包含在列表中的相同安装脚本的数值﹒DDInstall 部分它的名字独一无二的指定从[Models]部分列出的每个制造商的每个模型﹐AddReg条目在语法上是必须的﹐CopyFiles条目对于[DDInstall]部分是重要的﹐它的形式是:CopyFiles=file-list-section[,file-list-section...] 或者CopyFiles=filename前者是更普通的版本﹐它允许一个指向另一个包含一个安装文件列表的部分的指针﹒然而对于简单的驱动程序的安装﹐可以直接的使用文件名﹒表15.2. [DDInstall]部分条目CopyFiles部分INF文件的[CopyFiles]部分是唯一的名字并且CopyFiles的指示器在[DDInstall]部分﹐它的条目的形式是: destination-filename[,source-filename,temp-filename,flag]表15.3. CopyFiles flag的定义destination-filename是需要复制的文件名﹐如果与源文件名不同﹐source-filename必须被指定﹐temp-filename在WIN98中是为新文件指定一个中间的文件名直到系统重新激活﹐对于WIN2000来说﹐它是无用的﹒flag值指定新的目标文件的部署﹒这些值可以OR起来使它有多个性质﹒应该确认没有互斥的项目﹒因为[CopyFiles]条目的语法不包含指定源文件的磁盘或者路径选项﹐所以﹐必须使用其它的INF文件的部分[SourceDisksNames]和[SourceDisksFiles]﹒[CopyFiles]是复制的源文件名﹐复制的目标则在[DestinationDirs]部分﹒AddReg部分INF文件的[AddReg]部分是唯一的名字﹐并且引用AddReg的指示器在[DDInstall]部分﹒这个部分的目的是提供在系统注册表中添加或者修改条目﹐形式是﹕reg-root[,subkey,value-name,flags,value]reg-root是注册表根的缩写﹐子键描述根键下的键名﹐使用反斜线字符(\)分开子键﹒例如﹐Software\W2KDriverBook\ Driver\Setting是有效的HKCU或者HKLM根键的子键﹒表15.4. AddReg reg-root缩写的意义value-name指定被添加或者修改注册表值﹒每个系统注册表键包含零个或者多个不同数据类型的值﹒注册表编辑器在右边的窗格列出了子键的值﹒值的名字和值的数据也一起显示出来﹒左边的窗格仅仅显示子键﹒flags指定数据的类型﹒表15.5. AddReg flags定义系统注册表对于驱动程序安装的重要性将在后面讨论﹒SourceDisksNames 部分如果INF文件包含的驱动程序文件分布在多个磁盘上﹐INF文件就必须包含[Source-DisksNames]部分﹐这个部分包含文件分布的每个磁盘的人口﹒diskid=disk-description[,tagfile,unused,path]diskid是唯一的分配设置中的名字﹒通常﹐磁盘号从1开始﹐disk-description是一个提示用户合适的磁盘的字符串﹒tagfile值有双重的作用﹒确定在安装过程中用户提供正确的磁盘﹐tagfile值在安装过程继续进行之前被检验﹐如果tagfile文件不存在﹐用户被重新提示插入正确的磁盘﹒如果agfile值包含.CAB的扩展名﹐表示磁盘上的驱动程序文件是压缩文件﹒path值是一个以root-relative为磁盘根目录的驱动程序文件的路径﹒像tagfile值一样是可选择的﹒SourceDisksFiles 部分INF文件必须包含一个[SourceDisksFiles]部分﹒这个部分列出了在安装驱动程序过程中使用的文件名﹒每个文件都有相应的条目﹒filename=diskid[,subdir,size]diskid值是一个[SourceDisksNames]部分指定的可以找到文件名的磁盘﹐可选的subdir 值指定文件的路径﹒可选的size值指定解压缩文件的字节大小﹐安装过程使用这个数据在尝试复制文件之前决定目标系统是否适合安装﹒DestinationDirs部分这是个必须的提供目标路径的部分﹒file-list-section=dirid[,subdir] 或者DefaultDestDir=dirid[,subdir]file-list-section是一个被[CopyFiles]的指示器唤起的部分﹒它指定所有的被指示器复制的文件安装到指定的路径﹒对于DefaultDestDir﹐用于[CopyFiles]中所有的指示器﹐通常与file-list-section联合使用﹒表15.6. DestinationDirsdirid定义DDInstall.Services 部分为了让复制的文件在目标系统中起驱动程序的作用﹐必须通知服务控制管理器(SCM)﹐在WIN2000中安装的每个驱动程序在注册表的HKLM\System\CurrentControlSet\Services下面﹐ServiceType值是1表示内核模式的驱动程序﹒StartType指出在系统引导过程中在何时加载驱动程序﹒ErrorControl值决定在驱动程序加载的过程中如果遇到错误后如何是好﹒ServiceBinary值指出驱动程序的位置(.SYS文件)﹒但是可能会被遗漏﹐如果二进制文件在%windir%\system32\drivers路径并且与HKLM\...\Services下面的子键名的名字相同的时候就发生这种情况﹒DDInstall.Services部分条目的形式是﹕AddService=ServiceName,[flags],service-install-section[,eventlog-install-section]ServiceName描述服务的名字﹐典型的是驱动程序的名字(没有.SYS扩展名)表15.7. AddService flags定义service-install部分和可选的eventlog-install部分唤起附加的控制服务值条目的INF部分(例如﹐ServiceType和StartType)﹒ServiceInstall 部分[ServiceInstall]部分﹐它的名字在DDInstall.Services部分的AddService条目中唯一指定﹐控制和安装驱动程序到服务控制管理器﹒表15.8. ServiceInstall 部分条目INF 例子前面介绍的INF文件好象非常复杂﹐这里使用一个例子说明它﹒在下面的例子中﹐INF 控制一个由两个文件组成的驱动程序﹒Launcher.SYS被复制到系统的驱动程序路径﹐Launcher.HLP被复制到系统的帮助路径(例如﹐WINNT\System32\Drivers和WINNT\Help)﹒[Version]Signature="$Windows NT$"Class=MissilesClassGUID={C9B3D080-6889-11d4-93FC-0} Provider=W2KDriverBook DriverVer=07/04/2000,1.00.2468.1; 注释在分号(;)后面[DestinationDirs] ; 指定文件复制的目的地DefaultDestDir=12 ; %windir%\system32\driversCopyLaunchHelp=18 ; standard help directory[Manufacturer]W2KDriverBook=MyMfgName ; 唤起model部分[MyMfgName] ; 开始一个Models部分"ISA Missile Launcher"=InstallLauncher,ISA\Launcher ; 我们的设备列表[InstallLauncher] ; 开始DDInstall 部分CopyFiles=CopyLaunchFiles ; 唤起CopyFiles 部分.CopyFiles=CopyLaunchHelp ; 另一个是help的AddReg=LaunchRegSection ; 唤起AddReg 部分[CopyLaunchFiles] ; 开始CopyFiles部分Launcher.sys[CopyLaunchHelp] ; Help文件的CopyFiles部分Launcher.hlp[LaunchRegSection] ; 开始AddReg 部分HKR,"Parameters","Coordinates",FLG_ADDREG_TYPE_DWORD,0; 给设备提供一个是0的DWORD值[SourceDisksNames] ; 这个部分不是真的需要﹐1="Missile Launcher Driver Files" ; 因为只有两个文件并且在同一个磁盘上[SourceDisksFiles]Launcher.sys=1 ; 类似的﹐因为它们在同一个磁盘上﹐Launcher.hlp=1 ;所以不是真正的需要这个部分[InstallLauncher.Services] ; DDInstall.Services部分AddService=Launcher,2,LaunchService[LaunchService] ; 设置SCM﹐这样驱动程序就可以运行了ServiceType=1 ; 驱动程序StartType=3 ; 需要时手动加载ErrorControl=1 ; 汇报错误ServiceBinary=%12%\Launcher.sys ; 驱动程序路径使用INF文件一旦驱动程序的INF创建完成﹐必须处理它﹐使它有用﹒手动安装手动的处理INF文件﹐必须使用Windows的文件管理器选择INF文件﹐右击这个文件﹐选择安装﹒在真正的即插即用环境中﹐插入或者移除设备触发相应的驱动程序的安装﹐加载和卸载﹒因此﹐保留手动的安装是为了最初的测试和调试驱动程序﹒自动安装当一个即插即用的设备被插入到一个系统﹐数个子系统相互作用来加载新的驱动程序﹒1. 当设备被插入﹐硬件使用自动侦测和自动配置﹐告诉总线驱动程序设备出现﹒依赖于总线硬件﹐这可能涉及通知总线驱动程序一个新的总线设备列举发生﹒在这一步的最后﹐驱动程序发现新的设备出现并且有一个指定的设备ID﹒2. 内核模式PnP管理器通知用户模式PnP管理器一个新的有一个指定ID的设备出现在系统中﹒3. 用户模式PnP管理器使用WIN2000的Setup API库为新的设备提供一个类似的驱动程序列表﹒为了合适的驱动程序﹐系统使用新设备的class和model查找系统的INF 目录(例如﹐WINNT\INF)﹒4. 如果不能找到合适的INF文件﹐系统不进行进一步的动作直到一个有特权的用户进入系统﹒用户被提供一个新的硬件向导﹒用户提供驱动程序的位置和合适的INF文件位置﹒5. 一旦找到INF文件﹐它被使用CfgMgr API库处理﹒驱动程序文件和注册表条目被安装和修改﹒内核模式的PnP管理器主要执行这个步骤﹒6. 基于INF文件的指导﹐内核模式PnP管理器加载任何低层的滤波驱动程序﹐然后是functional驱动程序﹐最后是高层的驱动程序﹒在堆栈中的高层的驱动程序然后发送适当的PnP信息﹐包括IRP_MN_START_DEVICE.添加/移除硬件向导在安装过程中﹐主要的与用户的交互是添加新硬件向导﹒注意有一个制造商的列表(来自于INF文件的[Manufacturers]部分)﹐和Models列表(来自于INF文件的[Models]部分)﹒通常﹐用户手动选择适当的驱动程序去安装和加载﹒如果驱动程序被安装﹐它的DriverEntry和AddDevice例程必须仍然有效﹐这样使请求驱动的硬件满意新代码的设置﹒换句话说﹐手动的选择可能成功的安装﹐但是初始化是失败的﹒Class名字和设备IDs即插即用设备自动安装的过程很大程度上依赖安装程序的定位合适驱动程序的INF文件和文件中各个部分的能力﹒这个部分文章的目的是解释Class名字和设备Ids﹐还有定位INF 文件的过程﹒每个即插即用设备应该有一个唯一的指定硬件模型的标识符号﹒因此提供设备ID给即插即用总线硬件和总线驱动程序﹒当然﹐总线驱动程序在新的设备被插入后的很短时间内请求设备ID﹒设备ID的形式与总线类型有关﹒但是﹐一般看起来是:<enumerator>\<enumerator-specific-device-ID>(例如﹐PCI\VEN_1000&DEV_0001&SUBSYS_00000000&REV_02)对于驱动程序代码﹐一个硬件设备可能汇报多个设备ID﹐它是设备功能上的与很多models兼容的陈述﹒因为INF文件的[Models]部分包含一个hw-id值﹐所以﹐寻找与新安装的设备返回的设备ID相匹配的INF文件中的条目非常简单﹒同样的INF条目允许相兼容硬件的列表的规范有附加的设备Ids形式﹒如果设备ID不能在INF文件中定位精确的匹配﹐就使用兼容的ID﹒另一个为设备定位合适的驱动程序的关键元素是安装类(Setup Class)的观念﹒一系列相关的设备可以共享分层的驱动程序(例如﹐upper或者lower滤波器)﹐甚至在堆栈中个别的驱动程序﹒安装类被GUID 和name唯一的标识﹒微软定义了一系列驱动程序类﹐新的类可能被定义新的硬件组﹒创建新的组之前﹐必须选择一个新的GUID和class名字﹒表15.9. 安装类: 名字和GUIDs自定义安装驱动程序一般提供两个定制驱动程序安装的信息﹒第一﹐提供一个自定义的安装程序代替新硬件安装程序﹐为了提供这个功能﹐自定义的安装程序需要使用SETUPAPI.DLL提供的例程﹒这个库中的每个函数的形式是SetupDiXxx﹒DDK提供使用这个库的详细资料﹒第二﹐驱动程序可以提供一个自定义的设置设备的向导页﹒在它的工作要完成之前﹐安装程序发送一个DIF_NEWDEVICEWIZARD_FINISHINSTALL请求来提供给驱动程序一个显示自定义页的机会﹒控制驱动程序的加载顺序有时﹐驱动程序的加载顺序是非常重要的﹒可能一个驱动程序依赖另一个驱动程序初始化完成﹒当有这样的依赖产生﹐服务控制管理器(the Service Control Manager)可以取得系统注册表中条目LoadOrderGroup和Dependencies﹐这些值可以在INF文件中的[ServiceInstall]部分指定﹒LoadOrderGroup是命名一个指定的驱动程序加载顺序组的一个号码﹐Dependencies指定在这个驱动程序加载成功之前必须加载的组﹒这样的相互依赖不是公共的﹐也不应该是公共的﹒在一个真正的以设备为中心的环境(支持即插即用)中﹐驱动程序应该使用尽量少的联系的顺序﹒另一方面﹐分层很多的驱动程序的执行需要这些规范是合理的﹒驱动程序的数字签名WIN2000的CD上附带有很多第三方的驱动程序﹒为了分享这些程序﹐需要几个条件﹒加之﹐无论何时尝试在WIN2000上安装一个驱动程序﹐都会收到一个陈述设备驱动程序没有数字签名并且它的确实性没有被微软检验的警告信息﹒下面介绍微软的检验驱动程序的确实性的作用和驱动程序作者和硬件制造商的保证它们的软件包被包含在未来的WIN2000 CD上的负担﹒微软检验驱动程序的原因. . . .微软检验驱动程序有两个目标:1. 通过方便的设备驱动程序的发售提供或者促进WIN2000和更多的硬件设备的协同工作能力﹒2. 确定设备驱动程序是稳定的和没有折中系统的完整性﹒因为设备驱动程序操作在内核模式﹐它们可以慢慢的或者很快的使系统崩溃﹒因为系统的不稳定性常常由内核自己引起﹒这样﹐微软为它的操作系统维持一个被鉴定的制造商和驱动程序的目的是明显的﹒当然﹐WIN2000和大多数的硬件的协同工作能力是一个强有力的买点﹒因此﹐微软常常与硬件制造商一起来确保及时地发布兼容的驱动程序﹒为了完成这两个目标﹐微软有专门的提供硬件和驱动程序证明的团队﹐Windows硬件质量实验室(WHQL)﹒数字签名作为WHQL程序的一部分﹐一个被检验过的驱动程序获得一个允许在WIN2000中安装驱动程序并且不会产生警告的数字签名﹒数字签名由几个部分组成:1. 一个被包含在分布式的驱动程序包的目录文件(.CAT)﹐它包含微软分配的数字签名﹒2. 一个在INF文件中[Versions]部分的涉及.CAT文件的条目﹒3. WIN2000的是或者否允许一个没有数字签名的驱动程序安装的策略﹒数字签名有更改检验﹐这样确保驱动程序被使用供货商提供的原始的代码安装﹒它使用密码技术来完成这个目标﹐这个数字签名没有更改驱动程序代码﹒小结Windows 2000和Windows 98的自动的设备驱动程序的安装对于用户来说是一个巨大的进步﹒然而这个步骤需要驱动程序的作者附加的工作﹐至少﹐必须提供一个INF文件﹒w. . .v。