windows驱动开发-inf文件(一)

news2024/12/28 4:13:04

驱动总是和inf文件相关,在WinDDK的时候,许多inf文件都需要开发工程师手动编写,不过,现在已经可以使用inx文件来生成inf文件了,它经常用于驱动的安装和卸载;不过,并不是所有的驱动都需要使用inf文件安装,也不是所有inf文件都是用来安装驱动,在inf系列文章的最后,我们会讨论这些额外的情况,不过在那之前,先看一下inf文件的基础知识吧。

INF文件是组织成命名节的文本文件。某些节具有系统定义的名称,某些节的名称由 INF 文件的编写者确定。每个部分都包含由设备安装组件解释的特定于部分的条目。 某些条目以预定义关键字 (keyword) 开头。 这些条目称为指令。

出于特定目的,某些 INF 文件条目基本上是从一个部分到另一个部分的指针。 例如, INF AddReg 指令标识包含指示 Windows 修改注册表的条目的部分。 这些条目有时包括其他参数 。

其他 INF 文件条目不指向其他部分,但提供 Windows 在安装期间使用的信息,例如文件名、注册表值、硬件配置信息、标志等。 例如, INF DriverVer 指令 提供驱动程序版本信息。

当 Windows 开始安装时,它首先查找INF版本部分([Version])来验证 INF 文件的有效性。 然后,它通过查找 INF 制造商([Manufacturer])部分来启动安装。

inf文件的语法规则

区分大小写: 节名称、条目和指令不区分大小写。 例如, version、 VERSION 和 Version 是 INF 文件中同样有效的节名称规范。

必需和可选内容: 任何特定 INF 文件中的必需和可选部分、条目和指令集取决于要安装的设备/驱动程序或组件的类型。安装任何特定设备及其驱动程序所需的一组节、特定于节的条目和指令也在某种程度上取决于相应的类安装程序。 

节名称: 节名称的规则如下:

  • 可以按任意顺序指定节。 大多数 INF 文件按约定按特定顺序列出节,但 Windows 按名称而不是按 INF 文件中的位置查找节;
  • INF 文件中的每个节都以括在方括号 ([ ]) 的节名称开头。 节名称可以是系统定义的,也可以是 INF 编写器定义的。例如, [Manufacturer] 指定系统命名的 Manufacturer 节的开头,而 [Std.按文 种] 表示特定 INF 编写器定义的 Models 节名称。在 Windows 2000 及更高版本的 Windows 上,节名称的最大长度为 255 个字符;
  • 每个节在新 [section-name] 的开头或文件末尾标记处结束;
  • 如果 INF 文件中的多个节具有相同的名称,系统会将其条目和指令合并到单个节中;
  • 除非它用双引号字符括起来 (“) ,否则 INF 编写器定义的节名称必须是唯一到 INF 无引号的显式可见字符字符串,不包括具有 INF 特定含义的某些字符。 具体而言,由节项或指令引用的无引号节名称不能有前导空格或尾随空格、换行符、返回字符或任何不可见的控制字符,并且不应包含制表符。 此外,它不能包含括号 ([ ]) 字符、单个百分比 (%) 字符、分号 (;) 或任何内部双引号 (“) 字符,并且不能将反斜杠 (\) 作为其最后一个字符;

使用字符串标记: INF 文件中的许多值(包括 INF 编写器定义的节名称)可以表示为 strkey% 形式的%字符串键标记。 在 INF 文件的 INF 字符串 部分中,每个字符串键必须与由一系列显式可见字符组成的字符串值相关联。 如有必要,设置代码会将字符串值转换为 Unicode。

行格式、延续和注释: 格式和注释方面的规则如下

  • 节中的每个条目和指令都以返回或换行符结尾。 因此,用于创建 INF 文件的文本编辑器不得在编辑器确定的任意字符数之后插入回车符或换行符。
  • 反斜杠字符 (\) 可用作条目或指令中的显式行连续符。 但是,路径规范中也使用反斜杠字符。 若要确保路径规范中显示的反斜杠字符不会被错误地解释为行连续符,
  • 注释以分号 (开头 ;) 字符。 分析和解释 INF 文件时,系统会假定以下内容与安装过程无关:同一行中分号后面的任何字符,除非分号出现在 “带引号的字符串” 或 %strkey% 标记中除换;行符或返回字符外不包含任何内容的任何空行;
  • 逗号分隔节条目和指令中提供的值。INF 文件条目或指令可以在值列表中间省略可选值,但逗号必须保留。 INF 文件可以省略尾随逗号。
  • 若要在节条目和指令中提供的值中包含百分比 (%) 字符,请使用另一个百分比字符对百分比字符进行转义。
  • 若要在节条目和指令中提供的值中包含双引号 (“) 字符,请使用另一个双引号字符转义双引号字符。 请注意,字符串必须位于 “带引号的字符串”内。

 INF 大小限制: 在字符串替换和包含终止 NULL 字符之前,INF 文件字段的最大长度(以字符为单位)为 4096。字符串替换后,INF 文件字符串的最大长度(以字符为单位)为 4096,其中包括终止 NULL 字符。

INF文件解析1

下面是官方给出一个inf例子,以显示任何 INF 文件如何由部分组成,每个部分都包含零行或更多行,其中一些是引用其他 INF 编写器定义的部分的条目::

[Version]
Signature   = "$Windows NT$"
Class       = Mouse
ClassGUID   = {4D36E96F-E325-11CE-BFC1-08002BE10318}
Provider    = %Provider% ; defined later in Strings section
DriverVer   = 09/28/1999,5.0.2136.1
CatalogFile = ExampleCatalog.cat
PnpLockdown = 1

[DestinationDirs]
DefaultDestDir = 13

; ... [ControlFlags] section omitted here

[Manufacturer]
%StdMfg% = StdMfg ; (Standard types)
%MSMfg%  = MSMfg  ; Microsoft
; ... other Manufacturer entries omitted here

[StdMfg]  ; per-Manufacturer Models section
; Std serial mouse
%*pnp0f0c.DeviceDesc% = Ser_Inst,*PNP0F0C,SERENUM\PNP0F0C,SERIAL_MOUSE
; Std InPort mouse
%*pnp0f0d.DeviceDesc% = Inp_Inst,*PNP0F0D
; ... more StdMfg entries and following MSMfg and xxMfg Models sections omitted here

; per-Models DDInstall (Ser_Inst, Inp_Inst, etc.) sections also omitted here


[Strings]
; where INF %strkey% tokens are defined as user-visible (and
; possibly as locale-specific) strings.
Provider = "Microsoft"
; ...
StdMfg   = "(Standard mouse types)"
MSMfg    = "Microsoft"
; ...
*pnp0f0c.DeviceDesc = "Standard Serial Mouse"
*pnp0f0d.DeviceDesc = "InPort Adapter Mouse"
; ...

以前的 INF 文件中的几个部分具有系统定义的名称,例如 Version、 DestinationDirs、 Manufacturer 和 Strings。 某些命名节(如 Version、 DestinationDirs 和 Strings) 仅包含简单的条目。 其他引用其他 INF 编写器定义的部分,如制造商(Manufacturer)的 上一个示例所示。

请注意鼠标设备驱动程序安装相关部分的隐含层次结构,从上一示例中的 “制造商 ”部分开始。 下图显示了 INF 文件中某些节的层次结构:

请注意以下有关 INF 文件的隐式层次结构:

  • “制造商”[Manufacturer]部分中的每一个项都引用 INF 文件中其他位置 (StdMfg、MSMfg) 中的每个制造商的型号部分;
  • 每个模型部分([models-section-name])指定一些条目数;在示例中,它们以 xxx 开头,%DeviceDesc% ;
  • 每个这样的 %xxx.DeviceDesc% 令牌引用该制造商产品系列 (Ser_Inst和Inp_Inst) 的一些按型号的 DDInstall 部分,每个条目标识单个设备 (*PNP0F0C 和 *PNP0F0D,因此此处显示的“DeviceDesc”) 或一组设备的兼容型号;
  • 每个此类 DDInstall-typeXxx_Inst 节又可以追加某些系统定义的扩展,并且可以包含引用其他 INF 编写器定义的节的指令。 例如,在上一示例中显示为片段的完整 INF 文件也有Server_Inst。服务 部分[Server]及其Ser_Inst节具有 CopyFiles 指令,该指令引用此 INF 文件其他位置的Server_CopyFiles节;

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

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

相关文章

【 npm详解:从入门到精通】

文章目录 npm详解:从入门到精通1. [npm](https://www.npmjs.com/)的安装2. npm的基础用法2.1 初始化项目2.2 安装依赖2.3 卸载依赖2.4 更新依赖 3. npm的高级用法3.1 运行脚本3.2 使用npm scope3.3 使用npm link 4. npm资源5. 使用npm进行依赖树分析和可视化6. npm进…

数据分析从入门到精通 1.numpy剑客修炼

会在某一瞬间突然明白,有些牢笼是自己给自己的 —— 24.5.5 一、数据分析秘笈介绍 1.什么是数据分析 是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出所研究对象的内在规律。使得数据的价值最大化 案例: 分析用户的消…

Redis 主从复制 初步认识

文章目录 定义拓扑拓扑定义单从拓扑多从拓扑树型拓扑 使用原理建立流程持续复制 定义 Redis主从复制技术的主要满足的需求是①数据恢复②负载均衡 ①数据恢复的理解:将数据同步到多个Redis服务器中,其中一个节点数据损毁,可通过复制其他节点…

Python | Leetcode Python题解之第77题组合

题目: 题解: class Solution:def combine(self, n: int, k: int) -> List[List[int]]:ans []path []def dfs(x):remain k - len(path)if not remain:ans.append(list(path))returnif n 1 - x > remain:dfs(x 1)path.append(x)dfs(x 1)path.…

【进程间通信】共享内存

文章目录 共享内存常用的接口指令利用命名管道实现同步机制总结 System V的IPC资源的生命周期都是随内核的。 共享内存 共享内存也是为了进程间进行通信的,因为进程间具有独立性,通信的本质是两个不同的进程看到同一份公共资源,所以共享内存…

MVC 过滤器

MVC 过滤器常用有4种 Action过滤器(IActionFilter) 》 行为过滤器Result过滤器 (IResultFilter)》 视图过滤器 或 结果过滤器Exception过滤器(IExceptionFilter)》 异常过滤器Authorization过滤器&#xf…

OpenCV|简单绘制一个矩形

OpenCV中的rectangle() 为绘制矩形命令,形式如下: # (img: cv2.typing.MatLike, pt1: cv2.typing.Point, pt2: cv2.typing.Point, color: cv2.typing.Scalar, thickness: int ..., lineType: int ..., shift: int ...)cv2.rectangle(img, pt1, pt2, …

运用分支结构与循环结构写一个猜拳小游戏

下面我们运用平常所学的知识来写一个小游戏,这样能够加强我们学习的趣味性,并且能够更加的巩固我们所学的知识。 游戏代码: 直接放代码:(手势可以使用数字来代替,比如0对应石头,1对应剪刀&…

APB总线协议

一、概述 高级外围设备总线(APB)是高级微控制器总线架构(AMBA)总线层次结构的一部分,并为最小的功耗和降低接口复杂性进行了优化。AMBA APB应用于连接到任何低带宽且不需要流水线总线接口的高性能的外设。 二、APB总…

【氮化镓】GaN功率器件在转换器设计中的挑战

I. 引言(INTRODUCTION) 宽带隙(WBG)器件的重要性: 引言部分首先强调了宽带隙(WBG)器件在高频、高效率电力电子技术中的关键作用。这些器件,包括碳化硅(SiC)和氮化镓(GaN),相较于传统的硅功率器件,具有显著的优势。宽带隙半导体材料的高击穿场强允许设计更薄的漂…

linux Shell编程之条件语句

条件测试操作 test命令 条件测试操作 Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0(真true)时表示成功,返回值为非0值(假false)时表示失败或异常。 t…

nginx--系统参数优化telenct

系统参数 在生产环境中,根据自己的需求在/etc/sysctl.conf来更改内核参数 net.ipv4.ip_nonlocal_bind 1 允许非本地IP地址socket监听 net.ipv4.ip_forward 1 开启IPv4转发 net.ipv4.tcp_timestamps 0 是否开启数据包时间戳 net.ipv4.tcp_tw_reuse 0 端⼝口复⽤…

安防视频/视频汇聚系统EasyCVR视频融合云平台助力智能化酒店安防体系的搭建

一、背景需求 2024年“五一”假期,全国文化和旅游市场总体平稳有序。文化和旅游部6日发布数据显示,据文化和旅游部数据中心测算,全国国内旅游出游合计2.95亿人次。“五一”假期县域市场酒店预订订单同比增长68%,而酒店作为一个高…

华为数据之道第三部分导读

目录 导读 第三部分 第7章 打造“数字孪生”的数据全量感知能力 “全量、无接触”的数据感知能力框架 数据感知能力的需求起源:数字孪生 数据感知能力架构 基于物理世界的“硬感知”能力 “硬感知”能力的分类 “硬感知”能力在华为的实践 基于数字世界的…

Apache SeaTunnel 4月回顾:明星贡献者与技术突破

各位热爱 SeaTunnel 的小伙伴们,SeaTunnel 社区 4 月份月报来啦!这里将记录 SeaTunnel 社区每月的重要更新,欢迎关注! 月度 Merge 之星 感谢以下小伙伴 4 月为 Apache SeaTunnel 做的精彩贡献(排名不分先后&#xff…

快速话术本(常用文本快速复制工具)EXE成品+软件源码

功能介绍 经常性需要重复性的输入几个不同的文本,来回复制很麻烦,这个小工具可以帮你解决,把要经常输入的文本添加进去,点击即可复制~ 链接:https://pan.baidu.com/s/14-U_9uzkvpCrpzBkQaDZeA?pwdu7ot 提取码&#…

详细介绍一下PointPillars算法的网络结构

PointPillars是一种用于3D目标检测的算法,它主要使用了点云数据和深度学习模型。 PointPillars算法的网络结构主要可以分为三个主要阶段: Pillar Feature Net(点云特征处理网络):此阶段的主要任务是将输入的点云数据转…

排序算法(Java版)

目录 1、直接插入排序2、希尔排序3、直接选择排序4、堆排序5、冒泡排序6、快速排序6.1 递归实现6.2 非递归实现 7、归并排序7.1 递归实现7.2 非递归实现 8、性能分析 今天我们学习一种算法:排序算法(本文的排序默认是从小到大顺序)&#xff0…

【mysql篇】执行delete删除大量数据后,磁盘未清空,为什么?

目录 迁移脚本删除数据以及备份数据 解决方法OPTIMIZE TABLE二进制日志按月生成数据 最近某个项目虽说用户量不大,但是,单表的数据量越来越大,mysql一般单表超过千万级别后,性能直线下降,所以利用shardingphere按月做了…

ISO14229 -1 UDS诊断服务记录-001:0x34\0x36\0x37\0x31\0x19\0x14服务报文格式介绍

目录 1、34服务-请求下载 1.1、诊断请求格式 1.2、正响应格式 1.3、负响应格式 1.4、工程应用分析 2、36服务-传输数据 2.1、请求报文格式 2.2、正响应格式 2.3、负响应NRC 3、37服务-退出传输 3.1、报文格式 3.2、正响应格式 3.3、负响应NRC 4、31服务-例程控制 …