Simple INF 解析
INF是驱动提供给OS 安装程序关于驱动安装时需要进行操作的描述文件。
如果使用Visual Studio IDE来创建一个空的Driver项目则IDE会帮用户创建一个简单的INF。为了能快速理解INF,这里将这个IDE创建的INF每一项进行解析
[Version]
; 该项为INF所适用的windows版本,有两个版本可以使用,$WINDOWS NT$和$Chicago$,必须写,通常写$WINDOWS NT$
Signature="$WINDOWS NT$"
;Class声明了该驱动所适用的设备类型,例如Net和Display,OS会对应的会优化安装步骤。这些类型能够在Devguid.h中找到。
Class=Sample ;
;如果Class写了一个没有在预先定义的设备类型,就需要自定义个一个GUID来代表这个新定义的设备类型。
ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171} ;
;指明了该驱动的提供者,通常使用%xxx%来引用String directive里面定义的字符串
Provider=%ManufacturerName%
;Microsoft会为通过WHQL的driver提供一个的针对驱动包的sign文件,这个文件就是catalogfile. 默认会存在于INF文件同一目录下。 如果驱动包有改动,则安装的时候系统会提示驱动不可信。
CatalogFile=KMDFDriverSample.cat
;用来标识驱动的版本,安装时会根据该版本来进行update
DriverVer= mm/dd/yyy,w.x.y.z
;该属性一旦指定,PNP manager就会阻止应用去修改被安装的driver中CopyFiles指定的文件。
PnpLockDown=1
[DestinationDirs]
;该属性指定了在file-list-section引用的文件所进行例如拷贝,删除重命名操作的默认路径。安装路径不能是任意路径,需要使用预定义的Dirids来指定路径,例如11是\system32, 12就是%SystemRoot%\system32\drivers
DefaultDestDir = 12
KMDFDriverSample_Device_CoInstaller_CopyFiles = 11
; ================= Class section =====================
[ClassInstall32]
;为一个新类安装设备时进行的操作,例如写注册表
Addreg=SampleClassReg
[SampleClassReg]
;为这个新类指定名称以及图标
HKR,,,0,%ClassName%
HKR,,Icon,,-5
[SourceDisksNames]
;为SourceDisksFiles中的文件引用路径提供了来源命名
1 = %DiskName%,,,""
[SourceDisksFiles]
;其中引用的数字需要与SourceDisksNames中的匹配
KMDFDriverSample.sys = 1,,
WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll=1 ;
;*****************************************
; Install Section
;*****************************************
[Manufacturer]
;INF可以适用的设备厂商名
%ManufacturerName%=Standard,NT$ARCH$
[Standard.NT$ARCH$]
;指定了该INF适用的HWID信息,其中第一项指定了DDInstall section的名字,这里是KMDFDriverSample_Device
%KMDFDriverSample.DeviceDesc%=KMDFDriverSample_Device, Root\KMDFDriverSample
[KMDFDriverSample_Device.NT]
;安装该INF时需要拷贝如下文件列表
CopyFiles=Drivers_Dir
[Drivers_Dir]
KMDFDriverSample.sys
;-------------- 需要创建的服务,因为driver实际上也被认为是服务的一种
[KMDFDriverSample_Device.NT.Services]
AddService = KMDFDriverSample,%SPSVCINST_ASSOCSERVICE%, KMDFDriverSample_Service_Inst
; -------------- 指定了该服务的详细信息,driver就为driver类型,并且指定binary文件
[KMDFDriverSample_Service_Inst]
DisplayName = %KMDFDriverSample.SVCDESC%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %12%\KMDFDriverSample.sys
;
;--- KMDFDriverSample_Device Coinstaller installation ------
; 以下制定了CoInstaller,如果没有额外实现,就可以指定默认自带的Wdf的Coinstaller
;
[KMDFDriverSample_Device.NT.CoInstallers]
AddReg=KMDFDriverSample_Device_CoInstaller_AddReg
CopyFiles=KMDFDriverSample_Device_CoInstaller_CopyFiles
[KMDFDriverSample_Device_CoInstaller_AddReg]
HKR,,CoInstallers32,0x00010000, "WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll,WdfCoInstaller"
[KMDFDriverSample_Device_CoInstaller_CopyFiles]
WdfCoInstaller$KMDFCOINSTALLERVERSION$.dll
[KMDFDriverSample_Device.NT.Wdf]
; 针对UMDF会必须有该信息
KmdfService = KMDFDriverSample, KMDFDriverSample_wdfsect
[KMDFDriverSample_wdfsect]
KmdfLibraryVersion = $KMDFVERSION$
[Strings]
;该Indirective包含了之前所预定义的%%应用的字符串信息
SPSVCINST_ASSOCSERVICE= 0x00000002
ManufacturerName="<Your manufacturer name>" ;TODO: Replace with your manufacturer name
ClassName="Samples" ; TODO: edit ClassName
DiskName = "KMDFDriverSample Installation Disk"
KMDFDriverSample.DeviceDesc = "KMDFDriverSample Device"
KMDFDriverSample.SVCDESC = "KMDFDriverSample Service"
Simple INF 解析相关推荐
- JOpt Simple OptionParser解析命令参数
JOpt Simple可以用来解析命令参数,以Java为例 import joptsimple.OptionParser; import joptsimple.OptionSet; public cl ...
- Simple XML解析XML
Simple XML解析XML 源数据如下: <rss version="2.0"><channel><item><newsid>3 ...
- Qt文档阅读笔记-Qt Quick 3D - Simple Example解析
程序运行截图如下: 还是动的. 官方出这篇博文的目的是如何教我们使用Qt Quick 3D去渲染简单的场景. 首先是设置其场景. 在main.qml文件中设置整个场景,导入QtQuick3D组建,用于 ...
- 解析【支付宝】账单流水,PDF表格 转 Excel
风控贷后审核中,需要根据用户提供的账单流水,判断用户的还款能力,来辅助做放款决策,所以提取规格化数据是很重要的第一步. 一般情况下,用户提供的账单流水几乎都是zip压缩包,解压后是PDF文件格式,而账 ...
- vue.js 源代码学习笔记 ----- 工具方法 lang
/* @flow */ // Object.freeze 使得这个对象不能增加属性, 修改属性, 这样就保证了这个对象在任何时候都是空的 export const emptyObject = Obje ...
- java环境变量含义_Java环境变量的配置及意义
使得系统可以在任何路径下识别java命令,设为: %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin 注意"%JAVA_HOME%\"这个会被D:\java\j ...
- jquery iframe 返回上一页_你不需要jQuery
前端发展很快,现代浏览器原生 API 已经足够好用.我们并不需要为了操作 DOM.Event 等再学习一下 jQuery 的 API.同时由于 React.Angular.Vue 等框架的流行,直接操 ...
- java调用命令行命令_Java命令行界面(第4部分):命令行
java调用命令行命令 我的Java命令行解析系列的第四部分介绍了Commandline ,它被描述为 "用于解析命令行参数的Java库",它"基于使用注释从命令行参数到 ...
- Java命令行界面(第6部分):JOpt简单
JOpt Simple的主页将这个基于Java的库称为"用于解析命令行选项的Java库,例如您可能传递给调用javac的Java库,"该Java库试图"使用POSIX g ...
最新文章
- 逆向建模软件介绍_逆向技术在2代机修理中的应用
- select元素的options.add 与 insertbefore的区别
- 全局稳定性收敛平衡点为0吗_该平衡点处的小扰动稳定性判据是什?
- java怎么获取该项目系统的参数_Java 获取系统参数
- js中图片获取src的正则
- Vue学习笔记一 创建vue项目
- 电商促销海报PSD分层模板|创意合成,这样的设计越来越吃香!
- Spring 这些能升华代码的技巧,可能会让你爱不释手
- python列表添加对象_python list append命令 添加对象
- 七月老师python_七月在线Python数据分析入门
- module 'bit' not found:No LuaRocks module found for bit
- mysql5.7登陆时access denied解决办法
- Python win32com模块安装
- 金山词霸 2009 专业版
- Java读取共享文件夹下面的文件(利用smb协议)
- navicat for mysql Mac版 中文免安装
- 解决:文件名太长删不掉
- Michael喜欢滑雪百这并不奇怪(记忆化搜索)
- 468、Java框架122 -【Spring + SpringMVC + MyBatis - JSON】 2021.01.27
- 安卓手机可以拍摄证件照吗