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

驱动总是和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节;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小白修复msvcp140.dll丢失的解决方法,一键修复丢失的dll文件

在我们使用电脑时,常常会碰到各种烦人的状况。比方说,当我们期待畅玩游戏时,可能会突然遭遇一则令人沮丧的提示:“打开游戏缺少msvcp140.dll文件”。这个问题会给我们带来困扰和不愉快,但庆幸的是,有多种解…

UE4_Water插件_Buoyancy组件使用

water插件提供了一个浮力Actor蓝图类。 需要注意的几个问题: 1、StaticMesh需要替换根组件。 2、需要模拟物理设置质量。 3、需要添加浮力组件,设置浮力点,应用水中牵引力。 4、最重要的是需要激活——自动启用。 5、调水波长的地方 双击图片…

【JavaScript】内置对象 - Date 日期对象 ④ ( 制作倒计时页面 )

文章目录 一、倒计时页面实现1、需求分析2、计算秒数3、计算倒计时时间的 天 / 时 / 分 / 秒4、页面中显示倒计时时间 二、完整代码示例1、完整代码2、执行结果 Date 日期对象参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Da…

北京大学肖臻老师《区块链技术与应用》P16(状态树)和P17(交易树和收据树)

1️⃣ 参考 北京大学肖臻老师《区块链技术与应用》 P16 - ETH状态树篇P17 - ETH交易树和收据树篇 部分文字和图片 北京大学肖臻老师《区块链技术与应用》公开课笔记18——ETH数据结构篇2(状态树2)北京大学肖臻老师《区块链技术与应用》公开课笔记19——ETH数据结构篇3(交易树和…

入门视频剪辑:视频合并不再难,批量嵌套合并的简单步骤

在数字媒体时代,视频剪辑已成为一项基本技能。无论是制作家庭电影、公司宣传片还是在线教育内容,视频剪辑都扮演着重要角色。对于初学者来说,视频剪辑可能看起来有些复杂,但掌握了正确的步骤和技巧后,你会发现它其实并…

Angular中的路由

Angular中的路由 文章目录 Angular中的路由前言一、创建路由二、创建多个组件路由三、创建子路由四、创建多个组件子路由 前言 在Angular中,路由是用于在不同的视图和组件之间导航的机制。Angular提供了一种强大的路由机制来管理单页应用(SPA&#xff0…

十九、分布式数据库MyCat

目录 一、概述 1、MyCat是什么? 2、原理: 3、能干什么 1、读写分离 2、数据分片 3、多数据源整合 4、Mycat监控 4、安装部署 1、环境准备 2、安装 3、Mycat配置详解 1、server.xml user 标签 2、schema.xml schema标签: table标签&…

实践遥感卫星场景海洋船只检测,基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建卫星遥感场景下海洋海面船只检测识别系统

遥感相关的实践在我们前面的系列博文中也有相关的一些实践,胡药师基于MASTAR数据集开发构建对应的目标检测系统在前文也有一些介绍,感兴趣的话可以自行移步阅读即可: 《基于YOLOv7开发构建MSTAR雷达影像目标检测系统》 《基于yolov5n的轻量…

多角度解析动态住宅IP的多元化应用

动态住宅IP指的是在住宅网络中使用的、能够随时间或用户需求配置的IP地址,能够根据网络状况自动调整,为用户提供更加灵活、高效的上网体验。这种IP地址不是固定不变的,而是会定期自动更换,这种IP地址也让使用者的安全得以保障。 作…

【牛客】【模板】前缀和

原题链接:登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 前缀和模板题。 前缀和中数组下标为1~n。 前缀和:pre[i]pre[i-1]a[i]; 某段区间 [l,r]的和:pre[r]-pre[l-1] 3.…

247 基于matlab的梁的振型仿真

基于matlab的梁的振型仿真。利用有限元理论,求二维梁的固有频率和振型。短边固定,给定长度、横截面积,弹性模量及材料密度已知。并对比理论计算结果进行分析。各参数自己设定。程序已调通,可直接运行。 247 梁的振型仿真 固有频率…

顶级SCI优化!24年新算法冠豪猪算法CPO优化无人机集群三维路径规划!先用先发!

声明:文章是从本人公众号中复制而来,因此,想最新最快了解各类智能优化算法及其改进的朋友,可关注我的公众号:强盛机器学习,不定期会有很多免费代码分享~ 目录 结果展示 原理讲解 一、路径长度成本 F1 …

【Linux】Linux——Centos7安装RabbitMQ

目录 安装包准备socaterlang 安装rabbitmq安装命令启动rabbitmq,两种方式查看rabbitmq 启动后的情况配置并开启网页插件关闭防火墙或开放端口测试登录问题配置web端访问账号密码和权限添加用户,后面两个参数分别是用户名和密码.添加权限修改用户角色再次…

ifconfig命令找不到 command not found

问题 今天解决虚拟机的网络问题后,使用ifconfig发现报错命令未找到 解决方案 输入yum install ifconfi的程序安装包 yum install ifconfig 如果显示没有可用软件包 ifconfig,错误:。 就输入yum search ifconfig匹配安装包程序 yum searc…

windows环境下 postgresql v12 绿色版+postgis 3.4.1版本配置,空间数据库迁移

windows环境下 postgresql v12 绿色版+postgis 3.4.1版本配置,空间数据库迁移 一、软件环境 操作系统:windows 11 pg免安装版数据库:postgresql-12.17-1-windows-x64-binaries.zip 下载地址:https://get.enterprisedb.com/postgresql/postgresql-12.18-1-windows-x64-bina…

《构建高效审批系统:架构设计与实践》

在现代企业管理中,审批系统扮演着至关重要的角色,它不仅能够规范业务流程,提高工作效率,还能够增强企业的管理控制力和信息化水平。本文将探讨如何设计和构建一套高效的审批系统架构,以满足企业日常审批需求&#xff0…

Vue3基础(API风格、监听、生命周期、toRefs、组件通信、插槽、axios,Promise)

Vue3基础(API风格、监听、生命周期、toRefs、组件通信、插槽、axios,Promise) 目录 Vue3基础(API风格、监听、生命周期、toRefs、组件通信、插槽、axios,Promise)API 风格选项式API组合式API混合式 事件监听…

并发问题系统学习(更新中)

进程、线程 进程:进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。可以理解为一个java应用。 线程:线程是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的资源。…

java报错:使用mybatis plus查询一个只返回一条数据的sql,却报错返回了1000多条

今天遇到一个问题 系统线上问题,经常出现这样的问题,刚重启系统时不报错了,可是运行一段时间又会出现。sql已经写了limit 1,mybatis的debug日志也返回total为1,可是却报错返回了1805条数据 乍一看,感觉太不…

Elasticsearch的基本使用

Elasticsearch的基本使用 1.基本概念1.1 文档和字段1.2 索引和映射1.3 mysql与elasticsearch对比 2.索引库2.1 es中mapping映射属性2.2.es中索引库的增删改查 3.文档3.1 新增文档3.2 查询文档3.3 删除文档3.4 修改文档3.4.1 全量修改3.4.2 增量修改3.5 总结 4.DSL查询语法4.1 D…