win7构建成功helloworld驱动、WDF驱动中KMDF与UMDF区别

阳光穿透心脏的1/2处 2023-01-02 01:22 323阅读 0赞

做一个myhello.c,

  1. #include <ntddk.h>
  2. VOID DriverUnload(PDRIVER_OBJECT driver)
  3. {
  4. DbgPrint("goodbye");
  5. }
  6. // DriverEntry,入口函数。相当于main。
  7. NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
  8. {
  9. DbgPrint("first: Hello, my salary!");
  10. // 设置一个卸载函数便于这个函数能退出。
  11. driver->DriverUnload = DriverUnload;
  12. return STATUS_SUCCESS;
  13. }

同一目录下增加sources文件,

  1. TARGETNAME=myhello
  2. TARGETTYPE=DRIVER
  3. SOURCES=myhello.c

同一目录下增加MAKEFILE文件,

  1. !INCLUDE $(NTMAKEENV)\makefile.def

然后从驱动build环境进入myhello目录,build;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JjYm9ibzIxY24_size_16_color_FFFFFF_t_70

成功,构建出.sys驱动程序;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JjYm9ibzIxY24_size_16_color_FFFFFF_t_70 1

然后使用此文的入门驱动程序;

  1. [https://blog.csdn.net/bcbobo21cn/article/details/112074021][https_blog.csdn.net_bcbobo21cn_article_details_112074021]

makefile文件和前面一样;

sources文件如下;

  1. TARGETNAME=mytest
  2. TARGETTYPE=DRIVER
  3. KMDF_VERSION_MAJOR=1
  4. SOURCES= mytest.rc \
  5. mytest.c
  6. TARGET_DESTINATION=wdf
  7. MSC_WARNING_LEVEL=/W4 /WX

附带一个资源文件,mytest.rc

  1. #include <windows.h>
  2. #include <ntverp.h>
  3. #define VER_FILETYPE VFT_DRV
  4. #define VER_FILESUBTYPE VFT2_DRV_SYSTEM
  5. #define VER_FILEDESCRIPTION_STR "Sample Driver using WDF"
  6. #define VER_INTERNALNAME_STR "mytest.sys"
  7. #include "common.ver"

如果sources文件的第三句,写为

  1. INCLUDES=$(WDKPATH)\\inc\\wdf\\kmdf\\1.9\\

build,则提示找不到

如果第三句写为

INCLUDES=C:\WinDDK\7600.16385.1\inc\wdf\kmdf\1.9\
或,
KMDF_VERSION_MAJOR=1

build,则出现下图错误;提示代码有错;代码应该没问题;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JjYm9ibzIxY24_size_16_color_FFFFFF_t_70 2

  1. 此问题可能和驱动程序框架有关;先来学习驱动开发中KMDFUMDF的概念;

WDF驱动中KMDF与UMDF区别

早期的Windows 95/98的设备驱动是VxD(Virtual Device Driver),其中x表示某一类设备。从Windows 2000开始,开发驱动程序必以WDM(Windows Driver Model)为基础的,
从Vista开始,微软推出了新的驱动程序开发环境WDF(Windows Driver Foundation )。

WDF和WDM的关系有点类似于MFC和Windows SDK的关系,有编程经验的人一看就知道为何WDF开发比WDM容易了。

WDF有KMDF(内核模式的驱动程序)和UMDF(用户模式的驱动程序)两种模式:

1、内核模式驱动程序 KMDF(Kernel-Mode Driver Framework): 这类驱动程序作为内核模式操作系统组件的一部分执行,它们管理I/O、即插即用、内存、进程和线程、安全等。内核模式驱动程序通常为分层结构。 关于KMDF更多的内容,可参阅 MSDN中“Getting Started with Kernel-Mode Driver Framework ”。

2、用户模式驱动程序 UMDF(User-Mode Driver Framework): 这类驱动程序通常提供 Win32 应用程序与内核模式驱动程序或其他操作系统组件之间的接口。用户模式驱动程序支持基于协议或基于串行总线(如摄像机和便携音乐播放器)的设备。关于KMDF更多的内容,可参阅 MSDN中“ Introduction to UMDF“。

3、无论内核模式的驱动程序或者用户模式的驱动程序,都使用同一环境进行构建,这一环境称为WDK;都采用同一套对象模型构建,采用同一个基础承载,这个基础就是WDF。由于WDF驱动模型提供了面向对象和事件驱动的驱动程序开发框架,大大降低了开发难度。

4、KMDF是Windows系统底层驱动,文件名为:*.SYS,Vista为2万多外设提供了KMDF,其中也包括USB2.0,因此对于具有USB2.0协议的FX2,只需编写与FX2相关的UMDF即可;UMDF是用户层驱动,文件名为:*.DLL。

  1. KMDF是内核模式驱动程序;UMDF是用户模式驱动程序;
  2. WDM的含义是,Windows Driver ModelWindows驱动程序模型;
  3. WDF的含义是,Windows Driver Foundation,微软开源驱动程序模块框架;

关于KMDF的进一步描述见,

  1. [https://docs.microsoft.com/zh-cn/windows-hardware/drivers/gettingstarted/kmdf-as-a-generic-pair-model][https_docs.microsoft.com_zh-cn_windows-hardware_drivers_gettingstarted_kmdf-as-a-generic-pair-model]

先build出驱动程序;有时间再加载和调试;因为可能引起蓝屏,等不需要做其他工作,再单独加载和调试驱动;

发表评论

表情:
评论列表 (有 0 条评论,323人围观)

还没有评论,来说两句吧...

相关阅读

    相关 win7禁止自动安装驱动

    用win7的朋友都知道,我们用手机或者U盘连接电脑的时候,系统都会自动搜索和安装驱动程序,这很方便也很人性化。不过,有些时候win7自动搜索的驱动程序和硬件不一定兼容,这就导致

    相关 最新网卡驱动下载win7

      大家都在寻找[网卡驱动下载win7][win7]系统版本,可能是这款工具真的太好用了吧,导致大家都想要使用这款工具。为了让大家都能够如愿,也祝愿大家过个好年,下面小编就给大

    相关 如何在Win7自安装驱动

    Win7已经十分落后了,但是有些单位还是需要安装,按照新的硬件需求,Intel 六代以上硬件,AMD的RyZen以上硬件都不支持Win7了。AMD的RyZen据说对硬盘驱动不友