登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

IT_问天

王道酬勤

 
 
 

日志

 
 
关于我

给我一个解释,我可以再相信一次人世,我就可以接纳历史,就可以义无反顾的拥抱这座荒凉的城市。

INF文件详解  

2012-08-28 22:01:01|  分类: windows driver |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

最近看书看到一些内容,解决了以前遗留下来的INF写法的一些困惑,所以就写下INF文件用到的比较多的一些域的详解;

一般我们总是认为INF文件是系统设备的驱动程序,其实这是错误的认识,Windows之所以在安装某些硬件的驱动时提示需要INF文件是因为INF文件为该设备提供了一个全面描述硬件参数和相应驱动文件(DLL文件)的信息。 

基本知识:

1.域,基本形式[]加上域名,如[DefaultInstall],相同域名的内容可以合并为一个域,每个域名最长为255字符

2.子域[A.B],如[DefaultInstall.Service]

3.指令 指令名=指令参数1、参数2...

4.;代表注释分号后面的内容,

5. 如果一个条目的内容过多,在一行无法书写完全,则用“\”将一行内容书写为多行 

6.INF文件对大小写不敏感。

 

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

的名称

的作用

[Version]

INF文件头,提供有效INF文件的版本信息

[DefaultInstall]

安装包含所关联动作(文件拷贝或删除,注册表键值更新、子键增删等)在INF文件内的名指针,默认情况下首先执行该内容

[OtherInstall]

[DefaultInstall]遵循相同的语法,但必须显式的调用,常被用来定义反安装动作

[DestinationDirs]

指定罗列于一个内将被拷贝、删除或重命名的文件在硬盘上的位置

[FileCopy/Delete/RenameSection(s)]

罗列将被拷贝、删除或重命名的文件

[RegistryUpdateSection(s)]

指定对注册表键值更新、子键增删等动作

[IniFileUpdateSection(s)]

指定对ini文件的更新、快捷方式可通过该进行创建

[SourceDisksNames]

罗列文件所在盘盘名、盘卷标、盘序列号

[SourceDisksFiles]

罗列安装时使用的源文件及其所在盘

[Strings]

罗列本地化字符串(或称宏字符串)

CopyFiles

等号右侧是拷贝文件罗列域域名,将文件拷贝到DestinationDirs指定的目的地,所有的源文件必须在SourceDisksFiles列出

RenFiles

重命名文件

DelFiles

删除文件

UpdateInis

安装过程中更新INI初始化文件内容

UpdateIniField

安装过程中更新INI初始化文件值内容

AddReg

增加注册表键或键值

DelReg

删除注册表键或键值

Ini2Reg

INI文件内容更新注册表

UpdateCfgSys

更新Config.sys文件内的设置

UpdateAutoBat

更新Autoexec.bat文件内的设置

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

HKCR

HKEY_CLASSES_ROOT的简写

HKCU

HKEY_CURRENT_USER的简写

HKLM

HKEY_LOCAL_MACHINE的简写

HKU

HKEY_USERS的简写

HKR

相对键,对于硬件设备驱动程序类安装的


[Classinstall32]

HKR = HKLM\SYSTEM\CurrentControlSet\Control\Class

[InterfaceInstall32]

HKR=HKLM\SYSTEM\CurrentControlSet\Control\DeviceClasses\GUID

...更多HKR不同域内的值请参考《深入浅出Windows驱动开发P436》

由于上述表格内的内容展开实在太多,所以这里不详细展开,如果需要的话可以参考《深入浅出Windows驱动开发》第13章或者OSR上的http://www.osronline.com/ddkx/install/inf-format_2fzm.htm 详解

下面举例:

; OsnDf.inf

;

; Installation file (.inf) for Infocore Corporation OsnDiskCopy driver.

;

; (c) Copyright 2007-2008 Infocore Corporation

;

[Version]

Signature="$Windows NT$"                       ;签名是必须的,一般是$windows NT$

                                              ;$Chicago$和$windows NT$一个意思

Provider=%StorTrust%                ;inf 文件作者,提供者

                          ;设备安装类,一般用系统预定义的,像这个就是系统定义的diskguid,可以在注册表

                          ;HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Class中找到自己要的设备类GUID

ClassGUID={4D36E967-E325-11CE-BFC1-08002BE10318}   

 

Class=DiskDrive                         ;设备类名称

DriverVer=01/16/2001, 4.0.0             ;驱动版本 格式:日期(月/日/年,version num )

[DestinationDirs]

DefaultDestDir   = 12                    ;将文件copy到12=%systemroot%\system32\drivers

;

; Class installation section

;

[ClassInstall32]        ;将新的设备注册或安装到系统中(以后先检查这个, ;如果已经存在就不继续注册了)

Addreg=DiskClassReg      ;新创建的设备类在注册表中添加的必要信息,                                    ;HKR,,,,%DevClassName%

[DiskClassReg]

HKR,,,0,%ClassName%             ;class键值为diskdrive

HKR,,Icon,,-53             ;Icon(Icon键值)的作用为新建的类选择一个图标,-53等负数 ;为系统预定义的图标

;

; Driver information

;

[Manufacturer]                       ;厂商域

%StorTrust%   = StorTrust.Mfg ;

[StorTrust.Mfg]

%StorTrust.DeviceDesc% = OsnDSS, *OsnDSS

;

; General installation section

;

[OsnDSS]

AddReg=OsnDSS.AddReg               ;在class 中对应设备下注册表的upperfilters项里append OsnDSS

CopyFiles=OsnDSS.Files             ;copy the OsnDSS.Files域中的文件,和文件域相关[SourceDisksFiles][DestinationDirs]

[OsnDSS.AddReg]

                            ; append this service to existing REG_MULTI_SZ list, if any

HKR,,"UpperFilters",0x00010008,"OsnDSS"         ;0x0001008表示 reg_muti_sz 类型和操作标志,不存在创;                                              ; 建,存在添加在后面 ,添加内容 osndss

;

; File sections

;

[OsnDSS.Files]

OsnDSS.sys

;

; Service Installation

;

[OsnDSS.Services]

AddService = OsnDSS,, OsnDSS_Service_Inst, OsnDSS_EventLog_Install

[OsnDSS_Service_Inst]

DisplayName    = %OsnDSS.SvcDesc%          ;注册表diskplayName

ServiceType    = 1                  ; SERVICE_KERNEL_DRIVER ;

StartType      = 0                  ; SERVICE_BOOT_START ;详细在下面图2-1

ErrorControl   = 1                  ; SERVICE_ERROR_NORMAL

ServiceBinary  = %12%\OsnDSS.sys                    ;.sys 文件路径,注册表imagepath

[OsnDSS_EventLog_Install]

AddReg = OsnDSSEventLogInstall        ;向EventLog\SYSTEM\OSNDSS注册表里写入键值信息

[OsnDSSEventLogInstall]            ;设备向系统注册事件log入口

                              ;键值名EventMessageFile,REG_EXPAND_SZ类型,值为;""里的内容

HKR,,EventMessageFile,0x00020000,"%SystemRoot%\System32\IoLogMsg.dll;%SystemRoot%\System32\drivers\OsnDSS.sys"

HKR,,TypesSupported,0x00010001,7                ;键TypesSupported,REG_DWORD,7

;

; Source file information

;

[SourceDisksNames]

1 = %DiskId1%,,,""                 ;ID=磁盘描述[],一般都是"1=Disk1"这种简单类型的

[SourceDisksFiles]

OsnDSS.sys = 1,,                    ;文件名1= 磁盘号[,[路径] [,大小]]

[Strings]

;

; Non-Localizable Strings

;

REG_SZ         = 0x00000000

REG_MULTI_SZ   = 0x00010000

REG_EXPAND_SZ  = 0x00020000

REG_BINARY     = 0x00000001

REG_DWORD      = 0x00010001

SERVICEROOT    = "System\CurrentControlSet\Services"

;

; Localizable Strings

;

ClassName = "DiskDrive"

StorTrust = "Enterprise Information Management Inc."

DiskId1 = "EIM Installation Disk #1"

StorTrust.DeviceDesc = "EIM Disk Shadow Copy Driver"

OsnDSS.SvcDesc = "EIM Disk Shadow Copy Driver"

                                    图2-1

INF文件详解 - 逍遥凌辰 - IT_问天
 

DDK 自带的工具里提供了一个geninf.exe 专门生成INF工具的,挺好用(由衷的告诉新手,安装文件最好用这个或则其他工具生成,如果自己写一旦写错会很难找到错误的,如果是安装不上,那还可以找找错哪里了,但是如果装上了驱动没起作用,无法进入DriverEntry这类找起来就麻烦了);
1.公司名称和 INF文件string域内 代表公司名称的 EIM变量
2.驱动类型这里选的是diskDriver
3.Inf文件存放的地址,INF LOCATION 是什么还不清楚,貌似填或不填影响不大
4.数字验证文件名字osndss.cat
INF文件详解 - 逍遥凌辰 - IT_问天
 1.驱动文件选择,直接游览文件找到。sys文件即可;
INF文件详解 - 逍遥凌辰 - IT_问天
 1.驱动名称和驱动描述;
2.x86平台和IA64平台选择;
INF文件详解 - 逍遥凌辰 - IT_问天
1. 添加设备 identifier 这里选择Other了,35也是随便填的,还没搞清楚作用,下次搞清楚了,在来修改;
 
INF文件详解 - 逍遥凌辰 - IT_问天
 
INF文件详解 - 逍遥凌辰 - IT_问天
 1.填写注册表的,一般只要一个Add a Service 就行了,当然你需要的话也可以 自己再建
一个Add registry entry  
2.然后点击Add 会自动把 文件域copy 源文件路径和copy 到Driver directory
INF文件详解 - 逍遥凌辰 - IT_问天
1.上面选择的add a service 中需要填写的 服务名,驱动启动类型 这里选择的是
随系统启动而启动,错误类型NORMAL,
 
INF文件详解 - 逍遥凌辰 - IT_问天
 

参考
【2】OSR 网站上INF的详解
【3】深入浅出windows驱动开发


  评论这张
 
阅读(1871)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018