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 解析相关推荐

  1. JOpt Simple OptionParser解析命令参数

    JOpt Simple可以用来解析命令参数,以Java为例 import joptsimple.OptionParser; import joptsimple.OptionSet; public cl ...

  2. Simple XML解析XML

    Simple XML解析XML 源数据如下: <rss version="2.0"><channel><item><newsid>3 ...

  3. Qt文档阅读笔记-Qt Quick 3D - Simple Example解析

    程序运行截图如下: 还是动的. 官方出这篇博文的目的是如何教我们使用Qt Quick 3D去渲染简单的场景. 首先是设置其场景. 在main.qml文件中设置整个场景,导入QtQuick3D组建,用于 ...

  4. 解析【支付宝】账单流水,PDF表格 转 Excel

    风控贷后审核中,需要根据用户提供的账单流水,判断用户的还款能力,来辅助做放款决策,所以提取规格化数据是很重要的第一步. 一般情况下,用户提供的账单流水几乎都是zip压缩包,解压后是PDF文件格式,而账 ...

  5. vue.js 源代码学习笔记 ----- 工具方法 lang

    /* @flow */ // Object.freeze 使得这个对象不能增加属性, 修改属性, 这样就保证了这个对象在任何时候都是空的 export const emptyObject = Obje ...

  6. java环境变量含义_Java环境变量的配置及意义

    使得系统可以在任何路径下识别java命令,设为: %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin 注意"%JAVA_HOME%\"这个会被D:\java\j ...

  7. jquery iframe 返回上一页_你不需要jQuery

    前端发展很快,现代浏览器原生 API 已经足够好用.我们并不需要为了操作 DOM.Event 等再学习一下 jQuery 的 API.同时由于 React.Angular.Vue 等框架的流行,直接操 ...

  8. java调用命令行命令_Java命令行界面(第4部分):命令行

    java调用命令行命令 我的Java命令行解析系列的第四部分介绍了Commandline ,它被描述为 "用于解析命令行参数的Java库",它"基于使用注释从命令行参数到 ...

  9. Java命令行界面(第6部分):JOpt简单

    JOpt Simple的主页将这个基于Java的库称为"用于解析命令行选项的Java库,例如您可能传递给调用javac的Java库,"该Java库试图"使用POSIX g ...

最新文章

  1. 逆向建模软件介绍_逆向技术在2代机修理中的应用
  2. select元素的options.add 与 insertbefore的区别
  3. 全局稳定性收敛平衡点为0吗_该平衡点处的小扰动稳定性判据是什?
  4. java怎么获取该项目系统的参数_Java 获取系统参数
  5. js中图片获取src的正则
  6. Vue学习笔记一 创建vue项目
  7. 电商促销海报PSD分层模板|创意合成,这样的设计越来越吃香!
  8. Spring 这些能升华代码的技巧,可能会让你爱不释手
  9. python列表添加对象_python list append命令 添加对象
  10. 七月老师python_七月在线Python数据分析入门
  11. module 'bit' not found:No LuaRocks module found for bit
  12. mysql5.7登陆时access denied解决办法
  13. Python win32com模块安装
  14. 金山词霸 2009 专业版
  15. Java读取共享文件夹下面的文件(利用smb协议)
  16. navicat for mysql Mac版 中文免安装
  17. 解决:文件名太长删不掉
  18. Michael喜欢滑雪百这并不奇怪(记忆化搜索)
  19. 468、Java框架122 -【Spring + SpringMVC + MyBatis - JSON】 2021.01.27
  20. 安卓手机可以拍摄证件照吗

热门文章

  1. 从Qualcomm技术看loT未来发展方向
  2. angular2--安装和使用
  3. Popular Cows
  4. Xpdf 中文字体解决方案(TTF字库) - 图文教程
  5. 私有云:何去何从?解决方案有哪些
  6. 《惢客创业日记》2019.05.09(周四)给美女让座的大叔
  7. 百度小程序部署到服务器,三:百度小程序提交发布上线
  8. Fiddler+Proxifier进行PC端微信小程序抓包
  9. 试题 基础练习 闰年判断
  10. 使用AKLocationManager定位