zoukankan      html  css  js  c++  java
  • Windows驱动 INF文件

    参考一:百度百科

    参考二:INF文件的节

    参考三:wikipedia

    参考四:MSDN: INF File

     

    INF文件的节

           INF文件是一个文本文件,由许多按层次结构排列的节组成,他们以方括号中的节名称开始,如[Version]、[Manufacturer]等,后面是改接所含有的各个项,如Signature、DriverVer等。节中各项的基本定义格式为

    entry=value[,value…]

           其中,“entry”标示项名称,“value”标示该想的取值。节名和项名称都不区分大小写,且对于Windows 98,其必须小于28个字符;对于Windows 2000,其长度的最大值为255个字节。下表是INF文件中常用的节。

    INF文件中常用的节

    说明

    Version

    INF文件的开始

    SourceDisksNames

    指明去的那个程序所在的磁盘或CD-ROM

    SourceDisksFiles

    指明驱动程序的文件名

    Destination

    指明INF文件和驱动程序的目标文件

    Manufacturer

    指明供应商及其对应Models节的名称

    Models

    指明Install/DDInstall节的名称、设备的硬件ID等信息

    Install(Windows 98)

    Install(Windows 2000)

    指明需复制的文件、想注册表中添加的内容等信息

    DDInstall.Services

    仅适用于Windows 2000

    指明驱动程序安装的详细信息

    String

    指明一系列字符串

    1Version节

           Version节通常作为INF文件的开始,下表列出了其包含的各项。所有INF文件都必须含有Version节及其Signature项

    Version节中的各项

    说明

    Signature

    指明驱动程序的签名,其取值为:$Windows NT$、$Windows 95$、$Chicago$、

    Class

    指明驱动程序所属的类别

    ClassGuid

    指明设备类的GUID,其格式为:{nnnnnnnn-nnnn-nnnn-nnnnnnnnnnnn}

    Provider

    指明该INF文件的供应商

    LayoutFile

    仅由操作系统内部提供的INF文件使用

    CatalogFile

    指明数字签名文件的文件名,其扩展名为.cat

    DriverVer

    指明驱动程序的版本信息,其格式为:mm/dd/yyyy[,x.y.v.z]

    注:①n代表一个16进制数

           下面对主要的各项进行详细介绍。

    ①.Signature项:指明驱动程序的签名。对于Windows 98和Windows 2000下的USB设备驱动程序,该项的取值通常为“$Chicago$”。

    ②.Class和ClassGuid项:指明驱动程序所属的设备类别及其GUID,其取值情况见下表。

    常用设备类别及其GUID

    Class

    ClassGuid

    说明

    1394

    6BDD1FC1-810F-11D0-BEC7-08002BE2092F

    1394主控制器

    CDROM

    4D36E965-E325-11CE-BFC1-08002BE10318

    CD-ROM驱动器

    DiskDrive

    4D36E967-E325-11CE-BFC1-08002BE10318

    磁盘驱动器

    Display

    4D36E968-E325-11CE-BFC1-08002BE10318

    显示适配器

    FDC

    4D36E969-E325-11CE-BFC1-08002BE10318

    软盘驱动器

    HDC

    4D36E96A-E325-11CE-BFC1-08002BE10318

    硬盘控制器

    HIDClass

    745a17a0-74d3-11d0-b6fe-00a0c90f57da

    人机接口设备

    Keyboard

    4D36E96B-E325-11CE-BFC1-08002BE10318

    键盘

    Modem

    4d36e96c-e325-11ce-bfc1-08002be10318

    调制解调器

    Monitor

    4d36e96e-e325-11ce-bfc1-08002be10318

    监视器

    Mouse

    4d36e96f-e325-11ce-bfc1-08002be10318

    鼠标

    Net

    4d36e972-e325-11ce-bfc1-08002be10318

    网络适配器

    Ports

    4d36e978-e325-11ce-bfc1-08002be10318

    端口(COM&LPT)

    Printer

    4d36e979-e325-11ce-bfc1-08002be10318

    打印机

    System

    4d36e97d-e325-11ce-bfc1-08002be10318

    系统设备

    TapeDrive

    6D807884-7D21-11CF-801C-08002BE10318

    磁带驱动器

    USB

    36FC9E60-C465-11CF-8056-444553540000

    USB

    ③.DriverVer项:指明驱动程序的版本信息。其“mm/dd/yyyy”代表月/日/年;“x.y.v.z”代表驱动程序的版本号,它是可选的。

    2.SourceDisksNames节

           SourceDisksNames节指明设备驱动程序所在的磁盘或CD-ROM,其各项的格式如下:

    diskid=disk-description,disk-label,disk-serial-number   (Windows 98)

    diskid=disk-description[,[tagfile][,unused,path]]  (Windows 2000)

           其中,“disked”指出磁盘驱动器的编号,它是正整型数,通常从1开始,且不能重复;“disk-description”表示磁盘的描述信息,他通常为一个字符串。对于Windows 98,“disk-label”指出磁盘的卷标;“disk-serial-numbe”指出磁盘的序列号。对于Windows 2000,“tagfile”指出磁盘标签文件的文件名;“unused”保留未用;“path”指出驱动程序所在的路径;“[ ]”表示可选参数。

    3.SourceDisksFiles节

           SourceDisksFiles节指明设备驱动程序的文件全路径,其各项格式如下:

    filename=diskid[,subdir] (Windows 98)

    filename=diskid[,[,subdir][,size]]   (Windows 2000)

           其中,“filename”指出驱动程序的文件名;“diskid”指出磁盘驱动器的编号;“subdir”指出该文件在磁盘上的路径;“size”指出该文件未经压缩时的大小,以字节为单位。

    4.DestinationDirs节

           DestinationDirs节指明INF文件和设备驱动程序的目标目录。当INF文件使用CopyFiles、DelFiles、RenFiles指令时,则必须包含该节。其各项的格式如下:

    DefaultDestDir=dirid[,subdir]

    File-list-section=dirid[,subdir]

           其中,“DefaultDestDir”是一个项名称,代表文件复制、删除、重命名操作的缺色很难干目标目录;“file-list-section”指出CopyFiles、DelFiles、RenFiles指令所引用的节;“dirid”指出目标目录值,见下表;“subdir”指出dirid目录下的子目录。

    DestinationDirs节中的常用dirid

    dirid

    目标目录

    dirid

    目标目录

    10

    Windows目录:%windir%

    17

    INF目录

    11

    系统目录

    Windows 98:%windir%/system

    Windows 2000:%windir%/system32

    18

    帮助目录

    20

    字体目录

    12

    驱动程序目录

    Windows 98:%windir%/system/IoSubsys

    Windows 2000:%windir%/system32/drivers

    23

    颜色目录

    24

    应用程序目录(Windows2000)

    13

    命令目录(Windows98)

    25

    共享目录

    14

    控制面板目录(Windows98)

    50

    %windir%/system(Windows2000)

    15

    打印机目录(Windows98)

    54

    Ntldr.exe和osloader.exe所在的目录(Windows2000)

    16

    工作组目录(Windows98)

    55

    打印处理器目录(Windows2000)

    5.Manufacturer节

           Manufacturer节指明供应商及其对应Models接的名称,其各项的格式如下:

    %strkey%=models-section-name

           其中,“strkey”代表设备制造的名字,其字符串值在String节中定义;“models-section-name”指出Models节的名称。

    6.Models节

           Models节指明Install/DDInstall节的名称、设备的硬件ID和兼容ID等信息,其节名称由Manufacturer节指定。其各项的格式如下:

    device-description=install-section-name,hw-id[,compatiable-id…]

           其中,“device-description”指出设备的表述信息,他可以是一个字符串,也可以使一个%strkey%;“install-section-name”指出Install/DDInstall节的名称;“hw-id”指出设备的硬件ID;“compatiable-id”指出设备的兼容ID。

    7. Install/DDInstall节

           Install/DDInstall节指明需复制的文件、想注册表中添加的内容等信息,其节名称由Models节指定。下表列出了其包含的常用项。

    Install/DDInstall节中的常用项

    说明

    DriverVer

    指明驱动程序的版本信息,格式为:mm/dd/yyyy[,x.y.z]

    CopyFiles

    指明需复制的文件,格式为:

    CopyFiles=@filename|file-list-section[,file-list-section]...

    AddReg

    指明向注册表中添加的其他INF文件按,格式为:

    AddReg=add-registry-section[,add-registry-section]…

    Include

    指明安装时需要的其他INF文件,格式为:

    Include=filename.inf[,filename2.inf]…

    Needs

    指明安装时所需的特定INF文件,格式为:

    Needs=inf-section-name[,inf-section-name]…

    Delfiles

    指明需删除的文件,格式为:

    Delfiles=inf-section-name[,inf-section-name]…

    RenFiles

    指明需重命名的文件,格式为:

    Renfiles=inf-section-name[,inf-section-name]…

    DelReg

    指明需删除的注册表内容,格式为:

    DelReg=del-registry-section[,del-registry-section]…

           Install/DDInstall节中的常用项的详细介绍。

    ①     CopyFiles项:它是Install/DDInstall节中的一个基本指令,用于指明需要复制的文件。其“filename”指出目标文件名;“file-list-section”是其创建的文件列表节,该节格式为

    [file-list-section]

    destination-file-name[,source-file-name][,temporary-file-name][,flag]

           其中,“destination-file-name”指出目标文件名;“source-file-name”指出源文件名,如果其和目标文件名相同,则可忽略该参数;“temporary-file-name”指出复制操作过程中所需要的临时文件名,他只适用于Windows 98;“flag”指出该文件的一些处理方法,其取之情况如下表。

    CopyFiles项中的flag参数

    符号

    说明

    0x00000400

    COPYFLG_REPLACEONLY

    仅替换目标目录中的文件

    0x00000800

    COPYFLG_NODECOMP

    复制并不解压缩

    0x00000008

    COPYFLG_FORCE_FILE_IN_USE

    将源文件赋值为临时文件名,以重新命名

    0x00000010

    COPYFLG_NO_OVERWRITE

    不替换原有文件

    0x00001000

    COPYFLG_REPLACE_BOOT_FILE

    强制用户重新引导系统

    0x00002000

    COPYFLG_NOPRUNE

    强制复制文件

    0x00000020

    COPYFLG_NO_VERSION_DIALOG

    不覆盖新版本的文件

    0x00000004

    COPYFLG_NOVERSIONCHECK

    可覆盖任何版本的文件

    0x00000040

    COPYFLG_OVERWRITE_ORDER_ONLY

    仅覆盖旧版本的文件

    0x00000001

    COPYFLG_WARN_IF_SKIP

    当用户跳过文件时发出警告

    0x00000002

    COPYFLG_NOSKIP

    不允许用户跳过文件

    ②     AddReg项:它是Install/DDInstall节所必须包含的指令,用于指明需项注册表中添加的内容。其“add-registry-section”是它创建的添加注册表节,该节的格式为

    [add-registry-section]

    reg-root, [subkey], [value-entry-name], [flags], [value]

    其中,“reg-root”指出注册表树的根目录,它的取值在下表中;“subkey”指出reg-root下的子目录(或称子键);“value-entry-name”指出要增加的注册表值;“flags”指出其对注册表的一些处理方法,取值在下面的flags表中;“value”指出新增加注册表值的数据。

    AddReg项中的reg-root参数

    说明

    HKCR

    HKEY_CLASSES_ROOT

    HKCU

    HKEY_CURRENT_USER

    HKLM

    HKEY_LOCAL_MACHINE

    HKU

    HKEY_USER

    HKR

    被安装设备的注册表键

    AddReg项中的flags参数

    符号

    说明

    0x00000000

    FLG_ADDREG_TYPE_SZ

    value为REG_SZ类型

    0x00000001

    FLG_ADDREG_BINVALUETYPE

    value为2进制数据

    0x00000002

    FLG_ADDREG_NOCLOBBER

    不替换已有注册表中的value

    0x00000004

    FLG_ADDREG_DELVAL

    从注册表中删除subkey或

    value-entry-name

    0x00000010

    FLG_ADDREG_KEYONLY

    仅建立subkey,忽略value-entry-name

    和value

    0x00000020

    FLG_ADDREG_OVERWRITEONLY

    仅当value-entry-name时替换value

    0x00010000

    FLG_ADDREG_TYPE_MULTI_SZ

    value为REG_MULTI_SZ类型

    0x00000008

    FLG_ADDREG_APPEND

    添加value至已有注册表值

    0x00020000

    FLG_ADDREG_TYPE_EXPEND_SZ

    value为REG_EXPAND_SZ类型

    0x00010001

    FLG_ADDREG_TYPE_DWORD

    value为REG_DWORD类型

    0x00020001

    FLG_ADDREG_TYPE_NONE

    value为REG_NONE类型(Windows2000)

    ③     DelFiles项:它是Install/DDInstall节中的可选指令,用于指明需删除的文件。其“file-list-section”是它创建的文件列表节,该节的格式为

    [file-list-section]

    destination-file-name[,,,flag]

           其中,“destination-file-name”指出目标文件名;“flag”指出该文件的一些处理方法,其取值如下表。

    DelFiles项中的flag参数

    符号

    说明

    0x0000001

    DELFLG_IN_USE

    在其安装处理操作完成后再删除该文件

    0x0001000

    DELFLG_IN_USE1

    功能与DELFLG_IN_USE一样,仅适用Windows2000

    ④RenFiles项:它是Install/DDInstall节中的可选指令,用于指明需重命名的文件。其“file-list-section”是它创建的文件列表节,该节的格式为

    [file-list-section]

    new-dest-file-name, old-source-file-name

           其中,“new-dest-file-name”指出该文件的新文件名;“old-source-file-name”指出其原有文件名。

    ⑤DelReg项:它是Install/DDInstall节中的可选指令,用于指明需从注册表中删除的内容。其“del-registry-section”是它创建的删除注册表节,该节的格式为

    [del-registry-section]

    reg-root, subkey [,value-entry-name]

           其中,“reg-root”指出该注册表树中的根目录,取值与AddReg的ret-root相同; “subkey”指出reg-root下的子目录(或称子键);“value-entry-name”指出要删除的注册表值。

    8.DDInstall.Services节

           DDInstall.Services节指明驱动程序安装的详细信息,他只是用于Windows 2000.他的节名称为[install-section-name.Services],其“install-section-name”由Models节指定。下表列出了其包含的常用项。

    DDInstall.Services节中的常用项

    说明

    AddService

    控制驱动程序的安装过程,格式为

    AddService=ServiceName,[flags],service-install-section

    [,event-log-install-section[,[EventLogType][,EventName]]]…

    DelService

    删除一个或多个已有的驱动程序,格式为

    DelService=ServiceName [,[flags][,[EventLogType][,EventName]]]…

    Include

    指明安装时所需的其他INF文件,格式为

    Include =filename.inf [,filename2.inf]…

    Needs

    之敏感转世所需要的特定INF文件,格式为

    Needs = inf-section-name[,inf-section-name]…

    主要项进行详细介绍。

    ①     AddService项:它是DDInstall.Services节所必须包含的指令,用于控制设备驱动程序的安装过程。其“ServiceName”指出驱动程序的名字;“flags”指出一个或多个系统定义的标识,其取值情况如下表;“event-log-install-section”是其创建的事件日志安装,下表中列出了该节所包含的常用项;“service-install-section”是其创建的服务安装节,下表中列出了该节所包含的常用项;“EventLogType”指出事件日志的类型,其取值为System、Security和Application;“EventName”指出事件日志的名字。

    AddService项的常用flags参数

    符号

    说明

    0x00000002

    SPSVCINST_ASSOCSERVICE

    指明其为PnP功能驱动程序

    0x00000008

    SPSVCINST_NOCLOBBER_DISPLAYNAME

    不覆盖指定服务的名字

    0x00000100

    SPSVCINST_NOCLOBBER_DESCRIPTION

    不覆盖指定服务的描述

    0x00000010

    SPSVCINST_NOCLOBBER_STARTTYPE

    不覆盖指定服务的启动类型

    0x00000020

    SPSVCINST_NOCLOBBER_ERRORCONTROL

    不覆盖指定服务的差错控制值

    event-log-install-section节中的常用项

    说明

    AddReg

    指明向注册表中添加的内容,格式如下

    AddReg=add-registry-section[,add-registry-section]…

    DelReg

    指明需删除的注册表内容,格式如下

    DelReg=del-registry-section[,del-registry-section]…

    BitReg

    有效但几乎无用,格式如下

    BitReg=bit-registry-section[,bit-registry-section]…

    DisplayName

    驱动程序的名字,为字符串值

    Description

    驱动程序的描述,为字符串值

    ServiceType

    驱动程序的类型,为特定16进制数

    StartType

    驱动程序的启动类型,为特定16进制数

    ErrorControl

    驱动程序的差错控制级别,为特定16进制数

    ServiceBinary

    驱动程序的完整路径名:%dirid% /filename

    一下是对event-log-install-section节中的常用项的主要项进行详细介绍。

    <1>ServiceType项:指明驱动程序的类型,取值情况如下表。

    ServiceType项的取值

    符号

    说明

    0x00000001

    SERVICE_BOOT_START

    内核模式驱动程序

    0x00000002

    SERVICE_KERNEL_FILE_SYSTEM_DRIVER

    上层网络驱动程序或文件系统

    0x00000010

    SERVICE_WIN32_OWN_PROCESS

    Win32应用程序

    0x00000020

    SERVICE_WIN32_SHARE_PROCESS

    Win32应用程序

    <2>StartType项:指明驱动程序的启动类型,其取值情况如下表。

    StartType项的取值

    符号

    说明

    0x0

    SERVICE_BOOT_START

    由操作系统加载程序启动

    0x1

    SERVICE_SYSTEM_START

    由操作系统初始化过程中启动

    0x2

    SERVICE_AUTO_START

    由服务控制管理器启动

    0x3

    SERVICE_DEMAND_START

    由PnP管理器或服务控制管理器按需启动

    0x4

    SERVICE_DISABLE

    禁止启动

    <3>ErrorControl项:指明驱动程序的差错控制级别,其取值情况如下表。

    ErrorControl项的取值

    符号

    说明

    0x0

    SERVICE_ERROR_IGNORE

    不显示警告信息

    0x1

    SERVICE_ERROR_NORMAL

    显示警告信息

    0x2

    SERVICE_ERROR_SERVICE

    当驱动程序加载失败时,系统将使用其注册的LastKnownGood重试,并忽略其后的错误

    0x3

    SERVICE_ERROR_CRITICAL

    当驱动程序加载失败时,系统将使用其注册的LastKnownGood重试,并对其后的错误进行检验

    ②     DelService项:它是DDInstall.Service节中的可选指令,用于删除一个或多个已有的设备驱动程序。其“ServiceName”指出驱动程序的名字;“flags”指出一个或多个系统定义的标识,取值见下表;“EventLogType”指出事件日志的类型,其取值为System、Security或Application;“EventName”指出事件日志的名字。

    DelService项的flags参数

    符号

    说明

    SPSVCINST_DELETEEVENTLOGENTRY

    删除与ServiceName有关的事件日志

    SPSVCINST_STOPSERVICE

    在删除之前首先停止服务

    9String节

           String节指明一些列字符串,其所含各项的格式为

    strkey=[“]some string[“]

    其中,“strkey”指出字符串的名字,它只能包含字母和数字;“some string”为字符串的内容。

    附上《windows驱动开发技术详解》的一个例子

    ;--------- Version Section ---------------------------------------------------
    
    [Version]
    Signature="$CHICAGO$";
    Provider=Zhangfan_Device
    DriverVer=11/1/2007,3.0.0.3
    
    ; If device fits one of the standard classes, use the name and GUID here,
    ; otherwise create your own device class and GUID as this example shows.
    
    Class=ZhangfanDevice
    ClassGUID={EF2962F0-0D55-4bff-B8AA-2221EE8A79B0}
    
    
    ;--------- SourceDiskNames and SourceDiskFiles Section -----------------------
    
    ; These sections identify source disks and files for installation. They are
    ; shown here as an example, but commented out.
    
    [SourceDisksNames]
    1 = "HelloWDM",Disk1,,
    
    [SourceDisksFiles]
    HelloWDM.sys = 1,MyDriver_Check,
    
    ;--------- ClassInstall/ClassInstall32 Section -------------------------------
    
    ; Not necessary if using a standard class
    
    ; 9X Style
    [ClassInstall]
    Addreg=Class_AddReg
    
    ; NT Style
    [ClassInstall32]
    Addreg=Class_AddReg
    
    [Class_AddReg]
    HKR,,,,%DeviceClassName%
    HKR,,Icon,,"-5"
    
    ;--------- DestinationDirs Section -------------------------------------------
    
    [DestinationDirs]
    YouMark_Files_Driver = 10,System32Drivers
    
    ;--------- Manufacturer and Models Sections ----------------------------------
    
    [Manufacturer]
    %MfgName%=Mfg0
    
    [Mfg0]
    
    ; PCI hardware Ids use the form
    ; PCIVEN_aaaa&DEV_bbbb&SUBSYS_cccccccc&REV_dd
    ;改成你自己的ID
    %DeviceDesc%=YouMark_DDI, PCIVEN_9999&DEV_9999
    
    ;---------- DDInstall Sections -----------------------------------------------
    ; --------- Windows 9X -----------------
    
    ; Experimentation has shown that DDInstall root names greater than 19 characters
    ; cause problems in Windows 98
    
    [YouMark_DDI]
    CopyFiles=YouMark_Files_Driver
    AddReg=YouMark_9X_AddReg
    
    [YouMark_9X_AddReg]
    HKR,,DevLoader,,*ntkern
    HKR,,NTMPDriver,,HelloWDM.sys
    HKR, "Parameters", "BreakOnEntry", 0x00010001, 0
    
    ; --------- Windows NT -----------------
    
    [YouMark_DDI.NT]
    CopyFiles=YouMark_Files_Driver
    AddReg=YouMark_NT_AddReg
    
    [YouMark_DDI.NT.Services]
    Addservice = HelloWDM, 0x00000002, YouMark_AddService
    
    [YouMark_AddService]
    DisplayName = %SvcDesc%
    ServiceType = 1 ; SERVICE_KERNEL_DRIVER
    StartType = 3 ; SERVICE_DEMAND_START
    ErrorControl = 1 ; SERVICE_ERROR_NORMAL
    ServiceBinary = %10%System32DriversHelloWDM.sys
    
    [YouMark_NT_AddReg]
    HKLM, "SystemCurrentControlSetServicesHelloWDMParameters",
    "BreakOnEntry", 0x00010001, 0
    
    
    ; --------- Files (common) -------------
    
    [YouMark_Files_Driver]
    HelloWDM.sys
    
    ;--------- Strings Section ---------------------------------------------------
    
    [Strings]
    ProviderName="Zhangfan."
    MfgName="Zhangfan Soft"
    DeviceDesc="Hello World WDM!"
    DeviceClassName="Zhangfan_Device"
    SvcDesc="Zhangfan"
    
  • 相关阅读:
    重构学习资源
    cannot be cast to javax.servlet.Servlet 解决
    官网下载eclipse
    mapreduce.Job: Running job: job_1553100392548_0001
    IDEA取消形参名显示
    windows下和linux下运行jar
    idea打包可执行jar
    mkdir: Cannot create directory /file. Name node is in safe mode.
    IDEA2018激活码
    HADOOP集群搭建
  • 原文地址:https://www.cnblogs.com/qiengo/p/5992504.html
Copyright © 2011-2022 走看看