windows驱动开发-INF文件(二)

下面是INF文件中会出现的节的说明,我尽可能涵盖所有的部分。

inf-version
[Version]Signature="signature-name"
[Class=class-name]
[ClassGuid={nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}]
[Provider=%INF-creator%]
[ExtensionId={xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}]
[LayoutFile=filename.inf [,filename.inf]... ]  (Windows 2000 and Windows XP)[CatalogFile=filename.cat]
[CatalogFile.nt=unique-filename.cat]
[CatalogFile.ntx86=unique-filename.cat]
[CatalogFile.ntia64=unique-filename.cat]  (Windows XP and later versions of Windows)
[CatalogFile.ntamd64=unique-filename.cat]  (Windows XP and later versions of Windows)
[CatalogFile.ntarm=unique-filename.cat]  (Windows 8 and later versions of Windows)
[CatalogFile.ntarm64=unique-filename.cat]  (Windows 10 version 1709 and later versions of Windows)DriverVer=mm/dd/yyyy,w.x.y.z
[PnpLockDown=0|1] (Windows Vista and later versions of Windows)
[DriverPackageDisplayName=%driver-package-description%]
[DriverPackageType=PackageType]

 这部分一般也是inf文件最开始的部分,里面需要注意的是class、CatalogFile这两部分;CatalogFile指定的文件就是数字签名文件。下面是一个正常的inf文件:

[Version]
Signature="$Windows NT$"
Class=SCSIAdapter
ClassGUID={4D36E97B-E325-11CE-BFC1-08002BE10318}
Provider=%INF_Provider%
CatalogFile=example.cat
DriverVer=01/29/2010,1.2.3.4
PnpLockdown=1
  • Signature=“signature-name”:必须为 $Windows NT$ 或 $Chicago$。 这表示此 INF 对其有效的操作系统;
  • Class=class-name:对于任何标准类型的设备,这将指定使用此 INF 文件安装的设备类型的设备 安装类 的名称。 此名称通常是 Devguid.h 中列出的系统定义的类名称之一,例如 Net 或 Display;
  • ClassGuid={nnnnnn-nnnn-nn nnnn-nnnn-nnnnnn}:指定 设备安装类 GUID。 GUID 值的格式如下所示,其中每个 n 是一个十六进制数字。此 GUID 值指定要分配给从此 INF 文件安装的设备的设备安装程序类。 此类特定的 GUID 值还标识设备类型和类特定属性页提供程序(如果有)的设备类安装程序;
  • ExtensionId={xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}:指定创作扩展 INF 时扩展 ID GUID。 GUID 值的格式如下所示,其中每个 x 都是十六进制数字。创建扩展 INF 的初始版本时,INF 必须指定新生成的 ExtensionId 值。 但是,在更新现有扩展 INF 时, ExtensionId 必须保持不变,以便扩展 INF 的多个相关版本相互进行版本控制,而不是被视为可以同时安装在同一设备实例上的独立扩展 INF; 
  • ClassVer=major.small: 保留供系统使用,除非设备类(如 Printer)明确要求;
  • Provider=%INF-creator%:标识 INF 文件的提供程序。 通常,这是指定为 %组织名称% 字符串,稍后将在 INF 文件的 Strings 节中展开;
  • CatalogFile=filename.cat:指定目录 (.cat) 要包含在驱动程序包的分发介质上的文件。将 驱动程序包 提交到 Microsoft 进行数字签名时,在 WHQL 测试并向其分配数字签名后,WHQL 会提供驱动程序包的 目录文件 。 有关 IHV 或 OEM 驱动程序包的测试和签名的详细信息, 目录文件未在 INF 的 SourceDisksFiles 部分或 CopyFiles 指令中列出。 Windows 假定目录文件与 INF 文件位于同一位置。系统提供的 INF 文件永远不会有 CatalogFile= 条目,因为操作系统会针对系统提供的所有 xxx.cat 文件验证此类 INF 的签名;
  • DriverVer=mm/dd/yyyy,w.x.y.z:此项指定此 INF 文件安装的驱动程序的版本信息。 从 Windows 2000 开始,此条目是必需的;
  • PnpLockDown=0|1:指定 PnP)即插即用 是否阻止应用程序直接修改驱动程序包的 INF 文件指定的文件。 如果 PnpLockDown 指令设置为 1,PnP 会阻止应用程序直接修改由 INF CopyFiles 指令复制的文件。 否则,如果该指令未包含在 INF 文件中,或者指令的值设置为零,则具有管理员权限的应用程序可以直接修改这些文件。 以这种方式保护的驱动程序文件称为 第三方受保护的驱动程序文件;

 

inf-string
[Strings] | 
[Strings.LanguageID] ...strkey1 = ["]some string["]
strkey2 = "    string-with-leading-or-trailing-whitespace     "  | "very-long-multiline-string" | "string-with-semicolon" | "string-ending-in-backslash" |""double-quoted-string-value""...

一般这个节都是在最后定义,因为许多字符串都会使用宏的方式指定。

  • strkey1, strkey2, ...:INF 文件中的每个字符串键必须指定由字母、数字和或其他显式可见字符组成的唯一名称。此类 strkey 标记中的 % 字符必须表示为 %%;
  •  “some string”:指定一个字符串,可以选择使用双引号字符 (“) 分隔,其中包含字母、数字、标点符号,甚至可能包含某些隐式可见字符,尤其是内部空格和/或制表符。 但是,未带引号的字符串不能包含内部双引号 (“) 、分号 (;) 、换行、返回或任何不可见的控制字符,并且不能将反斜杠 作为其最后一个字符;
INF-SourceDisksNames 

SourceDisksNames 部分标识包含要在安装期间传输到目标计算机的源文件的磁盘或 CD-ROM 光盘。

[SourceDisksNames] |
[SourceDisksNames.x86] |
[SourceDisksNames.ia64] | (Windows XP and later versions of Windows)
[SourceDisksNames.amd64] | (Windows XP and later versions of Windows)
[SourceDisksNames.arm] | (Windows 8 and later versions of Windows)
[SourceDisksNames.arm64] (Windows 10 version 1709 and later versions of Windows)diskid = disk-description[,tag-or-cab-file] |
diskid = disk-description[,[tag-or-cab-file][,[unused][,path]]] |
diskid = disk-description[,[tag-or-cab-file],[unused],[path][,flags]] |
diskid = disk-description[,[tag-or-cab-file],[unused],[path],[flags][,tag-file]]  (Windows XP and later versions of Windows)
...
  • diskid:指定标识源磁盘的十进制格式的非否定整数。 此值需要的存储不能超过 4 个字节。 如果分发有多个源磁盘,则本部分中的每个 diskid 条目必须具有唯一值,例如 1、 2、 3 等;
  • disk-description:指定 %strkey% 标记或描述 diskid 标识的磁盘的内容和/或用途的“带引号的字符串”。 安装程序可以在安装过程中向最终用户显示此字符串的值,例如,标识要在安装过程的特定阶段插入驱动器的源磁盘。本节中的每个 %strkey% 规范都必须在 INF 的 string 部分中定义。 任何不是 %strkey%字符串的磁盘说明都是用户可见的字符串,如果具有任何前导空格或尾随空格,则必须用双引号字符 (“) 分隔;
  • tag-or-cab-file:此可选值指定分发磁盘上提供的 标记文件 或 cabinet (.cab) 文件 的名称,该文件位于 安装根 目录或 路径指定的子目录中(如果有)。 值应仅指定文件名和扩展名,而不指定任何目录或子目录。Windows 使用标记文件来验证用户是否插入了正确的安装磁盘。 可移动媒体需要标记文件,对于固定媒体,标记文件是可选的。如果 Windows 无法在安装介质上按名称找到安装文件,并且 tag-or-cab-file 的扩展名为 .cab,Windows 将其用作包含安装文件的 cabinet 文件的名称。如果 为 .指定了 cab 扩展,Windows 将该文件视为标记文件和内阁文件;
  • unused:Windows 2000 及更高版本的 Windows 不再支持此项;
  • path:此可选值指定包含源文件的分发磁盘上的目录路径。 路径相对于安装根目录,表示为 \dirname1\dirname2...等。 如果某个条目中省略此值,则假定文件位于分发磁盘的安装根目录中,可以使用 INF SourceDisksFiles 节 指定包含源文件的子目录(相对于给定路径目录)。 但是,标记文件和 cabinet 文件 必须驻留在给定的路径目录或安装根目录中;
  • flag:从 Windows XP 开始,将其设置为 0x10 将强制 Windows 使用 tag-or-cab-file 作为 cabinet 文件名,并使用 tag-file 作为标记文件名。 否则, 标志 仅供内部使用;
  • tag-file:从 Windows XP 开始,如果 标志 设置为 0x10,则此可选值指定在分发介质上提供的 标记文件 的名称,该文件位于 安装根 目录或 路径指定的子目录中。 值应指定不带路径信息的文件名和扩展名;
INF-SourceDisksFiles 

SourceDisksFiles 部分命名安装期间使用的源文件,标识包含这些文件的安装磁盘,并提供包含单个文件的分发磁盘上的目录路径(如果有)。

为了使驱动程序文件或应用程序文件作为已签名驱动程序包的一部分包含在内,该文件必须具有相应的 INF SourceDisksFiles 节条目和相应的 INF CopyFiles 指令。

[SourceDisksFiles] | 
[SourceDisksFiles.x86] | 
[SourceDisksFiles.ia64] | (Windows XP and later versions of Windows)
[SourceDisksFiles.amd64] | (Windows XP and later versions of Windows)
[SourceDisksFiles.arm] | (Windows 8 and later versions of Windows)
[SourceDisksFiles.arm64] (Windows 10 version 1709 and later versions of Windows)filename=diskid[,[ subdir][,size]]
...
  • filename:指定源磁盘上文件的名称;
  • diskid:指定标识包含文件的源磁盘的整数。 如果包含任何命名文件 ,则该值与初始子目录 (子目录) 路径 (必须在同一 INF 的 SourceDisksNames 节中定义;
  • subdir:此可选值指定子目录 ,相对于 SourceDisksNames 节的路径值。如果某个条目中省略此值,则假定命名的源文件位于在给定磁盘的 SourceDisksFiles 节中指定的路径目录中,如果未指定路径目录,则位于安装根目录中;
  • size:此可选值指定给定文件的未压缩大小(以字节为单位);

注意: 

SourceDisksFiles 节可以包含任意数量的条目,分发磁盘上的每个文件对应一个条目。 具有 SourceDisksFiles 节的任何 INF 还必须具有 INF SourceDisksNames 节。 按照约定, SourceDisksNames 和 SourceDisksFiles 部分遵循 INF 版本部分。

每个文件名条目都必须指定源磁盘上文件的确切名称。 不能使用 %strkey% 字符串来指定文件名。

若要支持在多个系统体系结构上分发驱动程序文件,可以通过将 .x86、.ia64、.amd64、.arm 或 .arm64 扩展添加到 SourceDisksFiles 来指定特定于体系结构的 SourceDisksFiles 部分。 请注意,与其他部分(如 DDInstall 部分)不同, SourceDisksFiles 部分的平台扩展不是 .ntx86、 .ntia64、 .ntamd64 等。

例如,若要为基于 x86 的系统指定源磁盘名称部分,请使用 SourceDisksFiles.x86 节,而不是 SourceDisksFiles.ntx86 节。 同样,使用 SourceDisksFiles.ia64 节指定基于 Itanium 的系统,使用 SourceDisksFiles.amd64 节指定基于 x64 的系统。

INF-Manufacturer

Manufacturer部分标识使用INF文件安装的一个或多个设备的制造商。

[Manufacturer]manufacturer-identifier
[manufacturer-identifier] 
[manufacturer-identifier] 
...manufacturer-name |
%strkey%=models-section-name |
%strkey%=models-section-name [,TargetOSVersion] [,TargetOSVersion] ...  (Windows XP and later versions of Windows)
  • manufacturer-name:标识设备的制造商。 INF 还必须包含同名的相应 INF models部分 ;
  • strkey:指定一个标记,该标记在表示制造商名称的 INF 文件中是唯一的。 每个此类 %strkey% 字符串都必须在 INF 文件的 INF 字符串部分中 定义;
  • models-section-name:为 INF 文件中每个制造商 的 INF models 部分 指定 INF 编写器定义的名称。 此值在 INF 文件中必须是唯一的,并且必须遵循定义节名称的一般规则;
  • TargetOSVersion:指定可以使用各种 INF models 部分的一个或多个目标操作系统版本。 Windows 选择与执行它的操作系统版本最匹配的 INF models 部分;
INF-model

每个制造商 的model 部分标识至少一个设备,引用该设备的 INF 文件的 DDInstall 部分,并为该设备指定唯一到model部分的硬件标识符 (ID) 。

[models-section-name] |
[models-section-name.TargetOSVersion]  (Windows XP and later versions of Windows)device-description=install-section-name,[hw-id][,compatible-id...]
[device-description=install-section-name,[hw-id][,compatible-id]...] ...
  • device-description:标识要安装的设备,表示为可见字符的任何唯一%组合或在 INF string节中定义的%strkey% 标记;
  • install-section-name:指定要用于设备的 INF 安装部分的未修饰名称和兼容型号的设备(如果有任何) ;
  • hw-id: 指定供应商定义的 硬件 ID 字符串,该字符串标识设备,PnP 管理器使用该字符串查找此设备的 INF 文件匹配项。 此类硬件 ID 具有以下格式之一:
  • 1. enumerator\enumerator-specific-device-id: 单个枚举器向 PnP 管理器报告的单个 PnP 设备的典型格式。 例如, USB\VID_045E&PID_00B 标识 USB 总线上的 Microsoft HID 键盘设备。 根据枚举器的不同,此类规范甚至可以包括设备的硬件修订号,例如 PCI\VEN_1011&DEV_002&SUBSYS_00000000&REV_02;
  • 2. *enumerator-specific-device-id: 用星号 (*) 指示设备受多个枚举器支持。 例如, *PNP0F01 标识 Microsoft 串行鼠标,该鼠标的兼容 ID 规范 SERENUM\PNP0F01也为 ;
  • 3. device-class-specific-ID: 是特定于 I/O 总线的格式,如总线的硬件规范中所述,适用于该类型 I/O 总线上所有外围设备的硬件 ID;
  • compatible-id: 指定供应商定义的 兼容 ID 字符串,用于标识兼容设备。 可以为“模型”部分中的条目指定任意数量的 compatible-id 值,每个值与下一个值用逗号分隔。 所有此类兼容设备和/或设备型号都由与初始 hw-id 指定的设备相同的驱动程序控制;
INF-DestinationDirs

DestinationDirs 节指定对 INF 文件中其他位置按名称引用的文件执行的所有复制、删除和/或重命名操作的目标目录。

[DestinationDirs][DefaultDestDir=dirid[,subdir]] 
[file-list-section=dirid[,subdir]]...
  • DefaultDestDir=dirid[,subdir]: 指定对文件执行的所有复制、删除和重命名操作的默认目标目录,这些操作未显式列在此处由其他条目引用的文件 列表节 中。 若要确保文件操作始终发生在正确的目录中,包含 Include 和 Needs 条目的 INF 文件不应指定默认目标目录;
  • file-list-section=dirid[,subdir]] ...:指定 INF 文件中其他位置的 CopyFiles、 RenFiles 或 DelFiles 指令引用的节的 INF 编写器确定的名称。 如果此部分具有 DefaultDestDir 条目,并且此 INF 中指定的所有复制文件操作具有相同的目标目标,则此类条目是可选的。 但是,INF 中其他位置的 RenFiles 或 DelFiles 指令引用的任何 file-list-section 都必须在此处列出;
  • dirid:为按名称引用的文件(可能位于 INF 的命名 file-list-section 内)的操作指定目标目录的目录标识符。  在Windows 10版本 1709 及更高版本的 Windows 上,建议使用 DIRID 13;
  • subdir: 指定 由 dirid 标识的目录下的子目录 (及其路径的其余部分(如果有),) 指定为给定 file-list-section 中文件操作的目标;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/837172.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客网刷题 | BC82 乘法表

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 输出九九乘法表&am…

ASP.NET医药进销存系统

摘 要 目前,大中型城市的多数药品店已经实现了商品管理、客户管理、销售管理及销售管理等的信息化和网络化,提高了管理效率。但是,在大多数小药品店,药品店管理仍然以传统人工管理为主,特别是在药品的采购、销售、库…

污水设备远程监控

随着环保意识的日益增强,污水处理作为城市建设和环境保护的重要一环,越来越受到社会各界的关注。然而,传统的污水处理设备管理方式往往存在着效率低下、响应速度慢、维护成本高等问题。为了解决这些痛点,HiWoo Cloud平台凭借其强大…

【数据结构】栈和队列OJ面试题

20. 有效的括号 - 力扣(LeetCode) 思路:由于C语言没有栈的接口,所以我们需要自己造一个“模子”。我们直接copy之前的实现的栈的接口就可以了(可以看我之前的博客【数据结构】栈和队列-CSDN博客copy接口)&…

BGP基础配置实验

BGP基础配置实验 一、实验拓扑 初始拓扑: 最终拓扑: 二、实验要求及分析 实验要求: 1,R1为AS 100区域;R2、R3、R4为AS 200区域且属于OSPF协议;R5为AS 300区域; 2,每个设备上都有…

python中匿名函数简单样例

目录 一、匿名函数(也称为 lambda 函数): 二、简单样例: 2.1 filter() 函数: 2.2 map() 函数: 2.3 sorted() 函数: 一、匿名函数(也称为 lambda 函数): 简洁性:匿名函数通常比命…

全面监控:系统日志分析与记录

全面监控:系统日志记录 系统日志是记录计算机系统各种活动和事件的文件或数据库。它们包含了系统的运行状态、错误信息、警告、用户操作记录等。 系统管理员和软件开发人员经常使用系统日志来诊断问题、监视系统性能和跟踪用户活动。 日志记录通常包括时间戳、事…

I. Integer Reaction

Problem - I - Codeforces 看到最小值最大值,二分答案。 思路:每次二分时开两个集合,分别表示 0 0 0颜色和 1 1 1颜色。如果是 c c c颜色,先将值存入 c c c颜色,之后在 ! c !c !c颜色中找大于等于 m i d − a mid - a…

软件设计师笔记(三)-设计模式和算法设计

本文内容来自笔者学习zst 留下的笔记,都是零碎的要点,查缺补漏,希望大家都能通过,记得加上免费的关注!谢谢!本章主要以下午题出现形式为主! 文章编辑于:2024-5-13 13:43:47 目录 1…

数据分离和混淆矩阵的学习

1.明确意义 通过训练集建立模型的意义是对新的数据进行准确的预测(测试集的准度高才代表good fit); 2.评估流程 3.单单利用准确率accuracy进行模型评估的局限性 模型一:一共1000个数据(分别为900个1和100个0&#x…

Adobe After Effects AE v24.3.0 解锁版 (视频合成及视频特效制作)

Adobe系列软件安装目录 一、Adobe Photoshop PS 25.6.0 解锁版 (最流行的图像设计软件) 二、Adobe Media Encoder ME v24.3.0 解锁版 (视频和音频编码渲染工具) 三、Adobe Premiere Pro v24.3.0 解锁版 (领先的视频编辑软件) 四、Adobe After Effects AE v24.3.0 解锁版 (视…

安阳在线知识付费系统,培训机构如何进行课程体系的设置?

校外培训不管是从招生还是课程体系都是截然不同的,在课程体系设置上,不同的层次设计也就不同。课程体系设计在功能诉求上可以分为入门课、核心课、高利润课、种子课四个类别。下面为大家介绍一下。 1、入门课 “入门课”就是最易、最省、最少障碍的满足家…

AI网络爬虫:用kimichat自动批量提取网页内容

首先,在网页中按下F12键,查看定位网页元素: 然后在kimi中输入提示词: 你是一个Python编程专家,要完成一个爬取网页内容的Python脚本,具体步骤如下: 在F盘新建一个Excel文件:提示词…

ubuntu 22.04 安装 RTX 4090 显卡驱动 GPU Driver(PyTorch准备)

文章目录 1. 参考文章2. 检查GPU是Nvidia3. 卸载已有驱动3.1. 命令删除3.2. 老驱动包 4. 官网下载驱动5. 运行5.1. 远程安装关闭交互界面5.2. 运行5.3. 打开交互界面 6. 检测与后续安装 1. 参考文章 https://blog.csdn.net/JineD/article/details/129432308 2. 检查GPU是Nvid…

Typescript 哲学 - ts模块使用最佳实践

ts的作用域 默认是全局(global),这也是为什么在 两个ts文件声明同一个变量报错变量名冲突,解决方法是使某个文件以模块的形式存在(文件顶层使用 export 、import ) In TypeScript, just as in ECMAScript 2…

【软考高项】四十六、项目管理科学计算之运筹学

1、线性规划问题 解题思路: 先把文字转化成图表 最快方式应该是把第一题的4个答案直接代入计算,很快得知X2时利润最大。 A0时,利润5*630 A2时,利润2*25*634 A4时,利润4*23*523 A6时,利润4*2(因为甲的…

【JavaScript超详细的学习笔记-上】JavaScrip超详细的学习笔记,共27部分,12多万字

想要获取笔记的可以点击下面链接获取 JavaScript超详细的学习笔记,点击我获取 一,JavaScript详细笔记 1,基础知识 1-1 基础知识 // 1,标识符命名规则:第一个字母必须是字母,下划线或一个美元符号。不能…

MySQL基础使用指南

难度就是价值所在。大家好,今天给大家分享一下关于MySQL的基础使用,MySQL 是一个流行的关系型数据库管理系统,被广泛应用于各种类型的应用程序开发中。本文中将介绍 MySQL 的基础使用方法,包括创建数据库、创建表格以及进行增删改…

【qt】数值的输入与输出

数值的输入与输出 一.与c中的输入与输出的区别二.QString转数值三.数值转QString1.number()2.asprintf() 四.小项目1.总价和进制2.QSpinBox代替3.QSlider滑动块4.QScrollBar滚动条5.QDial表盘6.QLcdnumber lcd显示 五.总结一下下 一.与c中的输入与输出的区别 在c中我们一般通过…

Ubuntu系统安装NVIDIA驱动

通过发行版仓库安装驱动 1. 刷新你的软件包索引(更新可用软件包列表) sudo apt update 2. 安装推荐的NVIDIA驱动 sudo ubuntu-drivers autoinstall 或者可以使用ubuntu-drivers工具查看推荐的驱动 ubuntu-drivers devices 然后,按照推…