通过参考官方例程可以很容易实现拥有特定功能

2019-09-30 02:31 来源:未知

测试环境

通过VS集成开发环境创建 Driver 解决方案后会生成两个项目,右键属性打开 XXX Package,左侧选中 Driver Signing ,在右侧栏 Sign Mode 选择 Test Sign,在 Test Certificate选择 <Create test certificate...>,则在编译时会自动生成测试签名证书。

 

 

ISBN 978-7-121-12555-3

Visual Studio + WDK(Windows Driver Kit)

WDF驱动程序包括两个类型,一个是内核级的,称为KMDF(Kernel-Mode Driver Framework),为SYS
文件;另一个是用户级的,称为UMDF(User-Mode Driver Framework),为DLL文件。

驱网核心技术丛书

其中WDK需要自己手动下载安装

IO请求包-IRP

潘爱民

测试环境下安装驱动前

开发的驱动程序没有进行签名或者采用测试签名,则需要在设备上开启测试模式,具体操作为:打开控制台,输入:

bcdedit /set testsigning on

回车,会提示:操作成功完成。 然后重启设备,开机后会在电脑桌面右下方显示有“测试模式”字样内容的水印。

如果要关闭测试模式,则需在控制台输入:

bcdedit /set testsigning off

回车,同样会提示:操作成功完成。 重启设备后则会发现桌面右下角的水印消失。

 

 

 

WDM vs WDF

对于刚接触驱动开发的新手来说,笔者不建议采用WDM(Windows 驱动程序模型)进行开发。目前在网上能找到的关于驱动开发的中文书籍基本上都是围绕WDM模式进行讲述的,而关于WDF(Windows 驱动框架)开发的书籍寥寥无几,《竹林溪径——深入浅出Window驱动开发》和《Developing Drivers with the Windows Driver Foundation》算是两本讲述基于WDF开发驱动的书籍,两者都能在网上找到电子书资源。

 

 

2011年2月出版

因工作上项目的需要,笔者需要做驱动相关的开发,之前并没有接触过相关的知识,折腾一段时间下来,功能如需实现了,也积累了一些经验和看法,所以在此做番总结。

windows服务在系统启动是加载,用户需在服务控制平台开启或者关闭服务
Driver Service是服务的一个特例,遵循windows服务的协议
加载和谐在NT驱动分为四个步骤:
1.为NT驱动创建新的服务
2.开启此项服务
3.关闭此项服务
www.129028.com,4.删除NT驱动创建的服务
以上四个步骤都是通过SCM组建的服务来实现的。

  • 设备函数驱动程序
  • 设备筛选器驱动程序
  • 软件驱动程序
  • 文件系统筛选器驱动程序
  • 文件系统驱动程序

IRP(IO请求包)用于win32和驱动程序通讯,NT内核有一个组件叫做IO管理器。IO管理器负责IRP的分发
,驱动程序里创建好设备并且创建好符号链接后,Win32就可以加载驱动了。而要让一个驱动可以处理I
RP,必需给驱动添加IRP处理例程。

这个观点既适用于应用软件程序员,也适用于系统软件程序员。对于应用软件程序员,低层的应用开发平台是支撑应用开发的基础,譬如,基于Windows SDK来开发Windows应用程序。那么,程序员有必要理解Windows SDK中的基本要素,诸如消息分发机制、各种图形功能等。在这种情况下,阅读一些典型的例子程序代码往往能起到快速引领入门的效果。同样地,C/C++程序员如果局限于C/C++语言本身,很难编写出高质量的实用程序。他们不仅要掌握C/C++运行库中函数和类型的用法,甚至还要理解这些函数和类型的实现机理。即使源代码层面上的库,例如STL(C++的标准模板库),也需要理解其代码实现才能灵活自如地用好这些库(比如STL中的各种容器数据结构、迭代器或算法)。

以服务的形式运行

NT式的驱动程序允许以 service 的形式运行, 服务安装的例程可以参考 WDF Sample 中的 Eventdrv 工程,或者参考我写的关于进程网络监控的驱动例程的开源代码

 

WDM 是 Win32设备驱动程序体系结构

为了便于Windows驱动程序的开发,Microsoft定义了一个驱动程序框架,称为WDF(Windows Driver Foundation),其中针对内核驱动程序的部分称为KMDF(Kernel-Mode Driver Framework)。KMDF实际上是一个库,它封装了WDM中一些基本的代码逻辑,从而使程序员可以更加方便地编写出WDM驱动程序。KMDF可以部分地简化Windows内核驱动程序的开发任务,但是本质上它并没有降低内核驱动程序的复杂性,甚至需要程序员付出额外的学习努力。

 

 

本书的特色之一,是对WDF框架做了较多的切入。本书第一个主要内容是(第3~7章)围绕WDF而展开讨论,侧重点各有不同。第3章以框架为讨论的中心;第4、5两章以WDF框架开发USB和1394驱动;第6章讲述内核C++编程,也以WDF框架为蓝本;第7章讲述WDF驱动的测试和调试。

   4.  实现方式

Windows设备驱动程序,过去是WDM(Windows Driver Model)框架,编程复杂,初学者难以掌握其编程
要领。为了解决这一问题,微软对WDM驱动程序的架构做了改进,形成了全新的WDF(Windows Driver F
oundation)框架结构。它提供了面向对象和事件驱动的驱动程序开发框架,大大降低了开发难度。从现
在开始,掌握Windows设备驱动程序的开发人员,由过去的“专业”人士,将变为“普通”大众。

总而言之,作为一名系统程序员,你需要洞悉目标操作系统中与你的软件打交道的各个部件,也要非常清楚地知道你所依赖的开发工具是如何帮助你做到这一点的。系统程序员往往面临着比应用程序员更长的学习曲线,但是,系统程序员从编写程序中获得的乐趣也是在应用层上难以体会得到的。我相信,当你发现自己编写的软件模块已经与操作系统内核融为一体时,那一刻你的感觉一定是手心里攥着一个操作系统——操作系统尽在你的掌控中了。

TAG标签:
版权声明:本文由www.129028.com-澳门金沙唯一官网www129028com发布于操作系统资讯,转载请注明出处:通过参考官方例程可以很容易实现拥有特定功能