Windows驱动之INF文件

提示:本篇文章旨在记录个人学习笔记,如有错误欢迎各位大佬指出。未经许可,不可擅自转载!

概要

INF文件的安装信息是驱动程序包中的文本文件,其中包含设备安装组件用于在设备上安装驱动程序包的所有信息。 Windows 使用 INF 文件为设备安装驱动程序。

整体架构流程

官方话说完了,开始进入正题吧

学过Windows驱动的都知道,驱动文件一般都包括inf、cat和sys文件。这里简单解释一下这几个文件的作用:

inf–驱动安装信息文件,操作系统会根据inf文件中的信息找到对应的设备安装驱动。
cat–驱动签名证书文件,可靠的证书一般都会有微软的签名,像平时开发时都是用的测试签名。
sys–系统驱动文件,二进制文件,可以理解为应用程序的exe文件。

INF文件的注释为分号(“;”),引用字符用双百分号(“%str%”)。

1. Version Section

按照约定, “version” 部分首先显示在 INF 文件中。 每个 INF 文件都必须有此节。
参考格式如下:

[Version]
Signature="$WINDOWS NT$"
Class=System ; TODO: specify appropriate Class
ClassGuid={4d36e97d-e325-11ce-bfc1-08002be10318} ; TODO: specify appropriate ClassGuid
Provider=%ManufacturerName%
CatalogFile=test1.cat
DriverVer = 09/15/2023,17.24.46.989
PnpLockdown=1

Signature表示适用的系统版本,目前大多都为" C H I C A G O CHICAGO CHICAGO"和" W I N D O W S N T WINDOWS NT WINDOWSNT"两个版本;Class表示该驱动是哪一类设备比如USB、System、Printer等,每个class都有唯一的一个标识符对应,即classguid;Provider表示供应商名字;CatalogFile表示安装的证书文件名(包含后缀);DriverVer指定驱动的日期及版本;PnpLockdown = 1表示其他应用或程序修改该文件无效。
class和classguid是一一对应的,可以在devguid.h文件中找到这些guid。
常用的class及其guid:


36fc9e60-c465-11cf-8056-444553540000    //USB 

88bae032-5a81-49f0-bc3d-a4ff138216d6    //USBDevice

4d36e97e-e325-11ce-bfc1-08002be10318    //UNKNOWN

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

e0cbf06c-cd8b-4647-bb8a-263b43f0f974    //BUETOOTH

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

4d36e968-e325-11ce-bfc1-08002be10318    //DISPAY

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

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

4d36e96b-e325-11ce-bfc1-08002be10318    //KEYBOARD

6bdd1fc1-810f-11d0-bec7-08002be2092f    //1394

66f250d6-7801-4a64-b139-eea80a450b24    //1394DEBUG

7ebefbc0-3200-11d2-b4c2-00a0c9697d07    //61883

4d36e964-e325-11ce-bfc1-08002be10318    //ADAPTER

xd45b1c1-8c8f-a11d-19f7-70000f805f530    //APMSUPPORT

c06ff265-ae09-48f0-812c-16753d7cba83    //AVC 

72631e54-78a4-11d0-bcf7-00aa00b7b32a    //BATTERY

53d29ef7-377c-4d14-864b-eb3a85769359    //BIOMETRIC

ca3e7ab9-b4c3-4ae6-8251-579ef933890f    //CAMERA

4d36e965-e325-11ce-bfc1-08002be10318    //CDROM

f01a9d53-3ff6-48d2-9f97-c8a7004be10c    //COMPUTEACCEERATOR

4d36e966-e325-11ce-bfc1-08002be10318    //COMPUTER

6bdd1fc2-810f-11d0-bec7-08002be2092f    //DECODER

4d36e967-e325-11ce-bfc1-08002be10318    //DISKDRIVE

48721b56-6795-11d2-b1a8-0080c72e74a2    //DOT4

49ce6ac8-6f86-11d2-b1e5-0080c72e74a2    //DOT4PRINT

9da2b80f-f89f-4a49-a5c2-511b085b9e8a    //EHSTORAGESIO

c459df55-db08-11d1-b009-00a0c9081ff6    //ENUM1394

e2f84ce7-8efa-411c-aa69-97454ca4cb57    //EXTENSION

4d36e969-e325-11ce-bfc1-08002be10318    //FDC 

f2e7dd72-6468-4e36-b6f1-6488f42c1b52    //FIRMWARE

4d36e980-e325-11ce-bfc1-08002be10318    //FOPPYDISK

ff494df1-c4ed-4fac-9b3f-3786f6e91e7e    //GENERIC

6bdd1fc3-810f-11d0-bec7-08002be2092f    //GPS 

4d36e96a-e325-11ce-bfc1-08002be10318    //HDC 

d612553d-06b1-49ca-8938-e39ef80eb16f    //HOOGRAPHIC

6bdd1fc6-810f-11d0-bec7-08002be2092f    //IMAGE

30ef7132-d858-4a0c-ac24-b9028a5cca3f    //INFINIBAND

6bdd1fc5-810f-11d0-bec7-08002be2092f    //INFRARED

8ecc055d-047f-11d1-a537-0000f8753ed1    //EGACYDRIVER

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

ce5939ae-ebde-11d0-b181-0000f8753ec4    //MEDIUM_CHANGER

5099944a-f6b9-4057-a056-8c550228544c    //MEMORY

4d36e96d-e325-11ce-bfc1-08002be10318    //MODEM

4d36e970-e325-11ce-bfc1-08002be10318    //MTD 

4d36e971-e325-11ce-bfc1-08002be10318    //MUTIFUNCTION

50906cb8-ba12-11d1-bf5d-0000f805f530    //MUTIPORTSERIA

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

4d36e973-e325-11ce-bfc1-08002be10318    //NETCIENT

87ef9ad1-8f70-49ee-b215-ab1fcadcbe3c    //NETDRIVER

4d36e974-e325-11ce-bfc1-08002be10318    //NETSERVICE

4d36e975-e325-11ce-bfc1-08002be10318    //NETTRANS

78912bc1-cb8e-4b28-a329-f322ebadbe0f    //NETUIO

4d36e976-e325-11ce-bfc1-08002be10318    //NODRIVER

4d36e977-e325-11ce-bfc1-08002be10318    //PCMCIA

4658ee7e-f050-11d1-b6bd-00c04fa372a7    //PNPPRINTERS

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

242681d1-eed3-41d2-a1ef-1468fc843106    //PRIMITIVE

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

4d36e97a-e325-11ce-bfc1-08002be10318    //PRINTERUPGRADE

1ed2bbf9-11f0-4084-b21f-ad83a8e6dcdc    //PRINTQUEUE

50127dc3-0f36-415e-a6cc-4cb3be910B65    //PROCESSOR

d48179be-ec20-11d1-b6b8-00c04fa372a7    //SBP2

53966cb1-4d46-4166-bf23-c522403cd495    //SCMDISK

53ccb149-e543-4c84-b6e0-bce4f6b7e806    //SCMVOUME

4d36e97b-e325-11ce-bfc1-08002be10318    //SCSIADAPTER

268c95a1-edfe-11d3-95c3-0010dc4050a5    //SECURITYACCEERATOR     

5175d334-c371-4806-b3ba-71fd53c9258d    //SENSOR

997b5d8d-c442-4f2e-baf3-9c8e671e9e21    //SIDESHOW

50dd5230-ba8a-11d1-bf5d-0000f805f530    //SMARTCARDREADER

53487c23-680f-4585-acc3-1f10d6777e82    //SMRDISK

53b3cf03-8f5a-4788-91b6-d19ed9fcccbf    //SMRVOUME

5c4c3332-344d-483c-8739-259e934c9cc8    //SOFTWARECOMPONENT

4d36e97c-e325-11ce-bfc1-08002be10318    //SOUND

6d807884-7d21-11cf-801c-08002be10318    //TAPEDRIVE

e6f1aa1c-7f3b-4473-b2e8-c97d8ac71d53    //UCM 

71a27cdd-812a-11d0-bec7-08002be2092f    //VOUME

533c5b84-ec70-11d2-9505-00c04f79deaf    //VOUMESNAPSHOT

25dbce51-6c8f-4a72-8a6d-b54c2b4fc835    //WCEUSBS
  
eec5ad98-8080-425f-922a-dabf3de3f69a    //WPD

2. DestinationDirs Section

在DestinationDirs节中,定义了复制、删除或重命名节文件的目标路径,可以包含以下内容:

file-list-section:指定需要操作的文件列表及其对应的操作(例如CopyFiles、RenFiles或DelFiles)。
DefaultDestDir:为没有明确在DestinationDirs节中命名的CopyFiles、RenFiles或DelFiles节指定默认目标文件夹。
语法如下:

[DestinationDirs]  
    file-list-section = ldid, subdir  
    DefaultDestDir = ldid, subdir

其中,ldid是指定的操作标识符,subdir是指定的子目录。在DefaultDestDir命令中,ldid和subdir都是可选的。如果没有指定subdir,则默认目标文件夹将是在节文件中定义的位置。

例如,假设我们有一个名为[DestinationDirs]的节文件,它包含以下内容:

[DestinationDirs]  
    CopyFiles = \Windows, Windows\System32  
    RenFiles = \Windows, Windows\System32

这意味着复制和重命名操作的目标路径都被定义为\Windows\System32。因此,当执行复制或重命名操作时,目标文件夹将是\Windows\System32。

3. SourceDisksNames Section

在SourceDisksNames节中,定义了源盘的名称和路径,可以包含以下内容:

disk-description:指定源盘的描述信息。
disk-id:指定源盘的磁盘标识符。
disk-label:指定源盘的卷标或标签。
disk-signature:指定源盘的签名标识符。
volume-info:指定源盘的卷信息。
例如,假设我们有一个名为[SourceDisksNames]的节文件,它包含以下内容:

[SourceDisksNames]  
    1 = "My Disk 1", "D:, \\windows\system32\drivers\mydisk.sys"

这意味着源盘1的描述是"My Disk 1",源文件路径是"D:\Windows\System32\drivers\mydisk.sys"。

4. SourceDisksFiles Section

在SourceDisksFiles节中,定义了设备驱动程序的文件全路径,可以包含以下内容:

filename:指定驱动程序的文件名。
diskid:指定磁盘驱动器的编号。
subdir:指定该文件在磁盘上的路径。
size:指定该文件未经压缩时的大小,以字节为单位。
例如,假设我们有一个名为[SourceDisksNames]的节文件,它包含以下内容:

filename=diskid[,subdir][,size]
file1="C:\Windows\System32\drivers\mydisk.sys" (Windows 98)
file1="C:\Windows\System32\drivers\mydisk.sys", "C:\Windows\System32\Drivers" (Windows 2000)

这表示文件"mydisk.sys"在磁盘驱动器C上的路径是"C:\Windows\System32\drivers",并且它的大小未压缩时是1个字节。当INF文件使用CopyFiles指令时,必须包含该节。

5. Manufacturer Section

Manufacturer Section用于指定制造商信息。简单地说就是包含了制造商的名字和驱动安装在哪个CPU架构平台上。例如:

[Manufacturer]
%ManufacturerName%=Standard,NTamd64

ManufacturerName是strings section中定义的字符常量,Standard这个可以随便命名,AAA或者BBB都行,后面需要根据这个名称定义一些服务和注册表信息。NTamd64是固定的名字,表面该驱动安装在amd 64位的机器上,当然还有其他的平台,比如:NTx86、 NTia64、NTarm 或 NTarm64。还有一个偷懒的写法,可以用$ARCH $变量表示,该变量表示当前系统使用的环境。
以下是一个多平台的样例部分:

[Manufacturer]
%ManufacturerName%=Standard,NTx86,NTamd64,NTarm64
;%ManufacturerName%=Standard,NT$ARCH$

[Standard.NTx86]
...

[Standard.NTamd64]
...

[Standard.NTarm64]
...

在其子section中需要说明该驱动是用来做什么的以及安装的节点(硬件ID)。例如:

[Standard.NTx86]
%test.DeviceDesc%=test_Device, Root\VID_1100&PID_2233 

[Strings]
test.DeviceDesc = "This is a test Device"

6. Strings Section

INF 文件必须至少有一个 Strings 节,才能定义该 INF 中其他位置指定的每个 %strkey% 标记。
这就跟定义一个字符串常量差不多,看下面的例子:

[Version]
...
Provider=%ManufacturerName%
...

[Strings]
ManufacturerName="<Your manufacturer name>" ;

version section中的provider指令就用到了strings中定义的ManufacturerName,用法也很简单双百分号括起来就行。

inf文件样例

以下test1.inf样例:

;
; test1.inf
;

[Version]
Signature="$WINDOWS NT$"
Class=System ; TODO: specify appropriate Class
ClassGuid={4d36e97d-e325-11ce-bfc1-08002be10318} ; TODO: specify appropriate ClassGuid
Provider=%ManufacturerName%
CatalogFile=test1.cat
DriverVer = 09/15/2023,17.24.46.989
PnpLockdown=1

[DestinationDirs]
DefaultDestDir = 12
test1_Device_CoInstaller_CopyFiles = 11

[SourceDisksNames]
1 = %DiskName%,,,""

[SourceDisksFiles]
test1.sys  = 1,,
;


;*****************************************
; Install Section
;*****************************************

[Manufacturer]
%ManufacturerName%=Standard,NTamd64

[Standard.NTamd64]
%test1.DeviceDesc%=test1_Device, Root\test1 ; TODO: edit hw-id

[test1_Device.NT]
CopyFiles=Drivers_Dir

[Drivers_Dir]
test1.sys

;-------------- Service installation
[test1_Device.NT.Services]
AddService = test1,%SPSVCINST_ASSOCSERVICE%, test1_Service_Inst

; -------------- test1 driver install sections
[test1_Service_Inst]
DisplayName    = %test1.SVCDESC%
ServiceType    = 1               ; SERVICE_KERNEL_DRIVER
StartType      = 3               ; SERVICE_DEMAND_START
ErrorControl   = 1               ; SERVICE_ERROR_NORMAL
ServiceBinary  = %12%\test1.sys

[test1_Device.NT.Wdf]
KmdfService =  test1, test1_wdfsect
[test1_wdfsect]
KmdfLibraryVersion = 1.15

[Strings]
SPSVCINST_ASSOCSERVICE= 0x00000002
ManufacturerName="<Your manufacturer name>" ;TODO: Replace with your manufacturer name
DiskName = "test1 Installation Disk"
test1.DeviceDesc = "test1 Device"
test1.SVCDESC = "test1 Service"

过滤驱动inf样例:

;-------------------------------------------------------------------------------

[Version]
Signature   = "$WINDOWS NT$"
Class       = USB
Provider    = %Mfg%
ClassGUID   = {36FC9E60-C465-11CF-8056-444553540000}
DriverVer = 08/24/2023,1.0.7.7
CatalogFile = filter.cat
PnpLockdown = 1

[Manufacturer]
%Mfg%  = ManufacturerFilter, NTx86.5.1, NTamd64.5.1, NTx86.10.0, NTamd64.10.0, NTarm.5.1, NTarm.10.0, NTarm64.5.1, NTarm64.10.0

[ControlFlags]
ExcludeFromSelect = *

[SourceDisksNames.x86]
1000 = %SrcDisk%,"",,\filter\i386

[SourceDisksNames.amd64]
1000 = %SrcDisk%,"",,\filter\amd64

[SourceDisksNames.arm]
1000 = %SrcDisk%,"",,\filter\arm

[SourceDisksNames.arm64]
1000 = %SrcDisk%,"",,\filter\arm64

[SourceDisksFiles]
filter.sys  = 1000

[ManufacturerFilter.NTx86.5.1]
%filter.DeviceDesc%     = filter, USB\VID_0000&PID_0000


[ManufacturerFilter.NTamd64.5.1]
%filter.DeviceDesc%     = filter, USB\VID_0000&PID_0000


[ManufacturerFilter.NTarm.5.1]
%filter.DeviceDesc%     = filter, USB\VID_0000&PID_0000


[ManufacturerFilter.NTarm64.5.1]
%filter.DeviceDesc%     = filter, USB\VID_0000&PID_0000


[ManufacturerFilter.NTx86.10.0]
%filter.DeviceDesc%     = filter, USB\VID_0000&PID_0000


[ManufacturerFilter.NTamd64.10.0]
%filter.DeviceDesc%     = filter, USB\VID_0000&PID_0000

[ManufacturerFilter.NTarm.10.0]
%filter.DeviceDesc%     = filter, USB\VID_0000&PID_0000


[ManufacturerFilter.NTarm64.10.0]
%filter.DeviceDesc%     = filter, USB\VID_0000&PID_0000


[filter.NT]  
;-----------------------------------------------------------------
; Get the standard stuff from USB.inf
;-----------------------------------------------------------------
Include   = USB.inf
Needs     = Composite.Dev.NT
CopyFiles = filter.NT.Copy

[filter.NT.Copy]
filter.sys

[DestinationDirs]
filter.NT.Copy = 12

[filter.NT.HW]
AddReg = LowerFilterAddReg, USBCompositionChange

[LowerFilterAddReg]
HKR,,"LowerFilters",0x00010000,"filter"
; HKR,,"UpperFilters",0x00010000,"filter"

;-----------------------------------------------------------------
; Filter Device Filter Service Section
;-----------------------------------------------------------------
[filter.NT.Services]
Include    = USB.inf
Needs      = Composite.Dev.NT.Services
AddService = filter,, filter_Service_Inst 

[filter_Service_Inst]
DisplayName    = %filter.SvcDesc%                            
ServiceType    = 1
StartType      = 3
ErrorControl   = 1
ServiceBinary  = %12%\filter.sys                            

[Strings]
Mfg                       = "Manufacturer Incorporated"
SrcDisk                   = "USB Driver Disk"
filter.DeviceDesc         = "USB Composite Device"

总结

这只是简单的一个inf文件编写过程,还有一些更为复杂的本文没有写上,需要的可自行查找资料。

参考

【1】为供应商提供的系统定义的设备安装程序类
【2】保留给系统使用的系统定义的设备安装程序类
【3】INF Version section
【4】INF Manufacturer section
【5】INF DestinationDirs section
【6】INF SourceDisksFiles section
【7】INF SourceDisksNames section
【8】INF Strings Section
【9】INF AddReg directive
【10】INF AddService directive
【11】Using INX Files to Create INF Files
【12】Summary of INF Sections
【13】Windows驱动预定义设备GUID

### 回答1: Altera USB Blaster驱动inf文件是一种Windows设备驱动程序,用于连接和管理Altera FPGA开发板。驱动程序可以通过官方网站下载。 下载后,将驱动程序解压到计算机上,并使用管理员权限安装。在设备管理器中找到未安装驱动的设备,右键单击它,选择“更新驱动程序软件”,然后选择“浏览计算机以查找驱动程序软件”。在文件浏览器中找到驱动程序文件夹,并选择.inf文件,点击安装即可。 .inf文件是设备驱动程序的配置信息文件,它包含设备的厂商、设备ID、驱动程序文件名等信息。在安装驱动程序时,首先会查找.inf文件,加载设备的信息,然后将设备和驱动程序连接起来。 通过安装Altera USB Blaster驱动程序,可以实现在Windows系统中访问Altera FPGA开发板。开发人员可以使用该开发板进行FPGA芯片开发,开发嵌入式系统、数字信号处理和通信系统等应用。因此,对于需要使用这些技术开发的人员,安装Altera USB Blaster驱动程序非常重要。 ### 回答2: Altera USB Blaster驱动INF文件是一个驱动程序文件,用于支持Altera USB Blaster设备的连接和通信。这个驱动程序文件包含了操作系统与设备的沟通协议和指令,确保Altera USB Blaster能够正常工作。 该文件通常存储在安装驱动程序软件的目录中,通过设备管理器可以找到并安装该驱动程序。在Windows系统中,可以通过设备管理器中对设备驱动程序进行更新或安装来安装Altera USB Blaster驱动INF文件。 此外,在安装驱动程序前,需要确保Altera USB Blaster设备已经正确连接到计算机上,并且没有任何的硬件或软件冲突。如果在安装驱动程序时遇到问题,可以尝试重新连接设备或检查计算机系统环境。 总之,Altera USB Blaster驱动INF文件是支持Altera USB Blaster设备的关键程序文件,通过正确安装驱动程序可以确保设备与计算机之间的正常通讯,并有效的进行程序烧录操作等。 ### 回答3: Altera USB Blaster驱动INF文件包含用于安装和使用该设备的信息。这个INF文件被称为设备驱动程序安装程序。此文件用于安装 USB Blaster驱动程序。以下是该文件的作用和使用的步骤: 该驱动程序用于与Altera USB Blaster通信。它允许使用Altera Quartus软件和其他编程工具来连接和编写FPGA的程序代码。 在使用Altera USB Blaster之前,需要将其驱动程序安装在计算机上。要安装驱动程序,首先需要从Altera网站下载最新版本的驱动程序。当你下载并解压缩文件后,会发现驱动程序包括.inf文件和USB Blaster驱动程序本身。 要安装该驱动程序,请遵循以下步骤: 1.将Altera USB Blaster连接到计算机,并确保它被识别为设备。 2.单击INF文件并选择安装选项。这将启动Altera USB Blaster驱动程序的自动安装过程。 3.根据指示完成设备驱动程序安装程序的安装过程。 注:如果你使用的是64位操作系统,请注意选择64位驱动程序。 一旦安装成功,你就可以使用Altera Quartus和其他编程工具来连接和编写FPGA 的程序代码了。Altera USB Blaster驱动程序的使用非常简单且易于理解。只需要按照上述步骤进行操作即可使用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值