win7构建成功helloworld驱动、WDF驱动中KMDF与UMDF区别
做一個myhello.c,
#include <ntddk.h>VOID DriverUnload(PDRIVER_OBJECT driver) {DbgPrint("goodbye"); }// DriverEntry,入口函數。相當于main。 NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path) {DbgPrint("first: Hello, my salary!");// 設置一個卸載函數便于這個函數能退出。driver->DriverUnload = DriverUnload;return STATUS_SUCCESS; }同一目錄下增加sources文件,
TARGETNAME=myhello TARGETTYPE=DRIVER SOURCES=myhello.c?同一目錄下增加MAKEFILE文件,
!INCLUDE $(NTMAKEENV)\makefile.def然后從驅動build環境進入myhello目錄,build;?
成功,構建出.sys驅動程序;
然后使用此文的入門驅動程序;
? ??https://blog.csdn.net/bcbobo21cn/article/details/112074021
makefile文件和前面一樣;
sources文件如下;
TARGETNAME=mytest TARGETTYPE=DRIVERKMDF_VERSION_MAJOR=1SOURCES= mytest.rc \mytest.c TARGET_DESTINATION=wdfMSC_WARNING_LEVEL=/W4 /WX附帶一個資源文件,mytest.rc
#include <windows.h>#include <ntverp.h>#define VER_FILETYPE VFT_DRV #define VER_FILESUBTYPE VFT2_DRV_SYSTEM #define VER_FILEDESCRIPTION_STR "Sample Driver using WDF" #define VER_INTERNALNAME_STR "mytest.sys"#include "common.ver"如果sources文件的第三句,寫為?
? ??INCLUDES=$(WDKPATH)\inc\wdf\kmdf\1.9\
build,則提示找不到 <wdf.h>;
如果第三句寫為
?INCLUDES=C:\WinDDK\7600.16385.1\inc\wdf\kmdf\1.9\
或,
KMDF_VERSION_MAJOR=1
build,則出現下圖錯誤;提示代碼有錯;代碼應該沒問題;
? ? 此問題可能和驅動程序框架有關;先來學習驅動開發中KMDF和UMDF的概念;
?
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。
? ? KMDF是內核模式驅動程序;UMDF是用戶模式驅動程序;
? ? WDM的含義是,Windows Driver Model,Windows驅動程序模型;
? ? WDF的含義是,Windows Driver Foundation,微軟開源驅動程序模塊框架;
?
關于KMDF的進一步描述見,
? ??https://docs.microsoft.com/zh-cn/windows-hardware/drivers/gettingstarted/kmdf-as-a-generic-pair-model
先build出驅動程序;有時間再加載和調試;因為可能引起藍屏,等不需要做其他工作,再單獨加載和調試驅動;
總結
以上是生活随笔為你收集整理的win7构建成功helloworld驱动、WDF驱动中KMDF与UMDF区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: javascript入门 - 1
- 下一篇: MFC视图滚动条的基本使用和C语言输出三