本主题介绍了如何使用内核模式驱动程序框架 (KMDF) 编写非常小的通用 Windows 驱动程序。 在中间窗格中,选择内核模式驱动程序,空(KMDF)。 在名称字段中,输入“KmdfHelloWorld”作为项目名称。 备注 在创建新的 KMDF 或 UMDF 驱动程序时,必须选择一个不多于 32 个字符的驱动程序名称。 此长度限制在 wdfglobals.h 中定义。
,其二进制扩展名为 *.dll;UMDF 和 KMDF 开发基本相同,本文这里仅介绍使用更广泛的 KMDF 开发。 Development Kit) 安装完毕后,其窗口会默认勾选为 Visual Studio 安装 WDK 扩展插件,按照指导进行安装即可,随后我们可以在 Visual Studio 的创建项目页面,就看到 KMDF 0x02 HelloWorld开发 参考资料 根据官方教程,我们在 Visual Studio 中创建空的 KMDF 项目,并在其中创建 Driver.c 文件,编写代码如下: #include <ntddk.h 创建 KMDF 项目并编写代码如下: #include <ntddk.h> #include <wdf.h> VOID OnUnload(IN PDRIVER_OBJECT DriverObject) \x64\Debug\kmdf_test\kmdf_test.sys # 使用 queryex 查看创建的服务信息 sc.exe queryex test 创建服务如下: 随后便可以使用 sc.exe
包括使用用户模式驱动程序框架 (UMDF)、内核模式驱动程序框架 (KMDF) 和 Windows 驱动模型 (WDM) 接口的驱动程序。 src\input 键盘和鼠标类筛选器驱动程序。 包括基于 UMDF 的驱动程序和基于 KMDF 的驱动程序。 src\video 示例显示驱动程序和镜像驱动程序。 有关 WDK 示例的更多信息,请参见 Windows Driver Kit 示例。 Write a UMDF driver based on a template Write a KMDF Hello World driver Write a KMDF driver based on WDF is comprised of Kernel-Mode Driver Framework (KMDF) and User-Mode Driver Framework (UMDF).
相对于内核模式,派生出的对象称为“KMD框架”即KMDF;相对于用户模式,派生出的模型称为“UMD框架”即UMDF。无论何种模式的框架,其内部封装的方法、执行的行为其实还是用WDM完成的。 5、 两种模式的驱动程序(KMDF、UMDF)都使用同一环境进行构建,这一环境称为WDK。 即KMDF,UMDF的开发环境为WDK。 至于移植,请参看 How to Port WDM Drivers to KMDF [749 KB] 关于WDF的书目前只有两本:一本是微软的,一本是OSR的。
7、驱动程序拆分为两个部分:一部分处理通用处理,另一部分处理特殊设备的处理,通用部分由Microsoft编写;特定部分由Microsoft或者硬件提供商编写; 8、通用部分称为“框架”,特定部分称为KMDF 如果框架可以处理IRP,则不会涉及到KMDF驱动程序;如果框架处理不了就通过调用KMDF驱动程序来实现事件处理程序来获取帮助; 10、WDK中的头文件包含的条件语句指定编程元素仅在某些版本的Windows 好吧,还没有写完~ 1、创建驱动程序时,可以指定Windows 7为基本的目标操作系统,在这种情况下,驱动程序会在Win7或更高的Windows上运行; 2、KMDF为驱动程序提供基于对象的接口,对象接口包括 管理器通常在用户应用程序请求读取或写入操作时创建读取或写入 IRP; 7、回调函数一定要返回STATUS_SUCCESS (如果操作成功)否则,回调函数将返回错误信息(定义在Ntstatus.h); 8、KMDF
WDF 包含两个主要变体:KMDF (Kernel-Mode Driver Framework):用于开发运行在内核模式的驱动程序。 本文将重点介绍如何使用 WDF(主要是 KMDF)来编写驱动程序应用程序。 四、开发流程简述创建项目:在 VS 中选择 "Kernel Mode Driver, Empty (KMDF)" 模板。
WDF提供了两个框架:KMDF(内核模式驱动程序框架)和UMDF(用户模式驱动程序框架)。 KMDF是Windows系统底层驱动,文件名为:*.SYS。 关于KMDF更多的内容,可参阅 MSDN中“Introduction to UMDF“。 而KMDF内核模式驱动程序中的错误会损坏系统地址空间,并可能会导致计算机失败。 由于这些驱动模型的特点,在构建驱动程序的开发调试环境是也会有所区别,一般在做KMDF驱动的开发调试时都选择双机或搭建虚拟机环境进行,而UMDF驱动可以进行单机调试,下面的环境搭建主要以更为复杂的KMDF
采用的驱动类型关乎到代码的实现(需不需要考虑PNP和电源管理)和驱动的安装( NT式驱动程序以 service 的形式运行,其他驱动需要采用通用的INF文件安装),微软的官方文档这样提到: 有关软件驱动程序,你的两个选项为 KMDF 使用 KMDF 和内核模式 Windows NT 模型,你可以编写驱动程序,而无需考虑即插即用 (PnP) 和电源管理。 你可以改为专心于驱动程序的首要任务上。 使用 KMDF,你不必考虑 PnP 和电源,因为框架会为你处理 PnP 和电源。
WDF提供了两个框架:KMDF(内核模式驱动程序框架)和UMDF(用户模式驱动程序框架)。本文只介绍KMDF的设计与实现。 2. WDF对象模型 KMDF框架支持面向对象、事件驱动的驱动程序模型。它定义了一系列的对象用来表示设备、驱动、中断等,每个对象有对应的属性、方法和事件。驱动程序利用这些方法创建对象、设置属性和响应事件。
每个支持即插即用的 KMDF 驱动程序必须有 EvtDriverDeviceAdd 回调例程, 每次操作系统枚举设备时, PnP 管理器就调用这个回调例程。 例程的原型声明如下: EvtDriverDeviceAdd( IN WDFDRIVER Driver, IN PWDFDEVICE_INIT DeviceInit ) ; DeviceInit 指向 KMDF (5)PnP管理器创建设备资源列表并发送给驱动程序; (6)如果驱动程序调用WdfInterruptCreate例程,WDF框架就会在资源列表中分配给中断资源给驱动程序; (7)设备进入工作状态后,KMDF KMDF将会将设备所有的请求发送到默认I/O队列, 12 然后它会调用驱动程序的EvtIoDefault来将每一个请求递交给驱动程序。 KMDF会将设备所有的请求发送到默认I/O队列。
WDF是UMDF(User Mode Driver Framework,用户模式驱动程序框架)和KMDF(Kernel Mode Driver Framework,内核模式驱动程序框架)的总和。 由于本课题基于PCIe硬件设备进行驱动开发,涉及到内存读写等内核操作,所以使用KMDF框架来编写驱动程序。
新建HelloWorld项目 新建一个以Kernel Mode Driver, Empty(KMDF)为模板的驱动项目,项目名称HelloDriver,在项目中新建一个hello.c文件作为驱动入口文件
Program Files (x86)\Windows Kits\8.1\Include\um C:\Program Files (x86)\Windows Kits\8.1\Include\wdf\kmdf Program Files (x86)\Windows Kits\8.1\Lib\win7\km\x64 C:\Program Files (x86)\Windows Kits\8.1\Lib\wdf\kmdf
Program Files (x86)\Windows Kits\8.1\Include\um C:\Program Files (x86)\Windows Kits\8.1\Include\wdf\kmdf Program Files (x86)\Windows Kits\8.1\Lib\win7\km\x64 C:\Program Files (x86)\Windows Kits\8.1\Lib\wdf\kmdf
它通过两个具体的实现模型来达成这一目标:KMDF(内核模式驱动程序框架):用于开发运行在系统内核空间的高性能、高特权级驱动程序,如物理硬件设备驱动。
关于编写驱动程序微软提供[示例]https://docs.microsoft.com/zh-cn/windows-hardware/drivers/gettingstarted/writing-a-very-small-kmdf [微软示例]https://docs.microsoft.com/zh-cn/windows-hardware/drivers/gettingstarted/writing-a-very-small-kmdf //gist.github.com/hasherezade/ee1a1914dfa2920c77e82fd52717a8fb•[Write a Hello World Windows Driver (KMDF Docs]https://docs.microsoft.com/zh-cn/windows-hardware/drivers/gettingstarted/writing-a-very-small-kmdf
pwd=kmdf
值得注意的是,微软补充:虽然该项目的计划灵活运用不同的 WDK 版本和不同的 WDF 版本,但目前“仅针对 NI eWDK、KMDF 1.33、UMDF 2.33 和 WDM 驱动程序进行了测试”,对于
Approved] Downloads cached for licensed users divvy 1.4.4 [Approved] Downloads cached for licensed users KMDF
pGEJJD1qiWpgl1skNYwceqvf3WOHt76Qrn2Y6x3xWtSUFQSwH6VLWlhbFwN64/E7mQfmDXokNLqmJ161rMkwwpf+QpZyGnQsP2orGUjiZB9/KMdF3TJXjlL2L pGEJJD1qiWpgl1skNYwceqvf3WOHt76Qrn2Y6x3xWtSUFQSwH6VLWlhbFwN64/E7mQfmDXokNLqmJ161rMkwwpf+QpZyGnQsP2orGUjiZB9/KMdF3TJXjlL2L