wdk驱动开发入门
番茄系统家园 · 2021-08-30 17:20:16
WDK开发环境构建驱动程序入门、驱动程序的和
先安装WDK7驱动开发包7
包含环境调试工具设备仿真和测试相关
路径
DSF一时不知道是什么
安装过程
完成
开始菜单出来两个一级菜单调试工具驱动开发包
看一下构建环境包含和Free两种有何区别
有和, 没有基本上这两者与我们传统的Debug和Release相对应
chk表示Checkedfre表示Free。主要的区别在于checkedbuild有traces和asserts而freebuild没有。
checked和free是怎么出现的呢因为传统的用词一般是debug和retail或者release。
当WindowsNT还处在开发阶段的时候开发组的人还在用“debug”和“retail”。Debug和Retail的不同在于编译时的选项
CompilerOptimization开、关
DebugTraces开、关
Assertions开、关
Sanitychecks开、关
传统来说Debug是“Optimization关Traces开Assertions开”Retail是“O开T关A关”。后来NT团队加入了Sanitychecks的选项。本来Sanitycheck在内部版本中有在发布的时候会移除掉。
于是NT的团队就有了“O开T开A开S开”“O开T关A关S开”和“O开T关A关S关”三种Build。
最后一种是传统的“retail”build。那么前两种叫什么build呢第一种Optimization是开着的所以不是传统的“debug”后一种Sanitycheck是开着的所以不是传统的“retail”。
为了区别这些build的不同。讨论以后NT团队决定用“checked”表示“O开T开A开S开”“Free”表示“O开T关A关S开”。Checked是因为所以的check都打开了Free是因为“checkfree”。
后来随着NT3.1项目进展团队认识到
他们其实根本就不会去测试“retail”build
他们对freebuild进行了性能测试结果发现它能够满足性能要求。
于是团队把freebuild作为最终版本发布。
进到一个build环境命令提示符输入build命令我的本意是看一下build命令的帮助结果一行行提示自己出来看上去不停地在运行某个程序原来在安装的一级或二级目录下直接打build命令会自动构建WDK本身自带的全部驱动程序例子
先Ctrl-C终止
做一个入门WDK驱动程序代码如下存为test.c
#includentddk.h#includewdf.hDRIVER_INITIALIZEDriverEntry;EVT_WDF_DRIVER_DEVICE_ADDKmdfHelloWorldEvtDeviceAdd;NTSTATUSDriverEntry(_In_PDRIVER_OBJECTDriverObject,_In_PUNICODE_STRINGRegistryPath){//NTSTATUSvariabletorecordsuccessorfailureNTSTATUSstatusSTATUS_SUCCESS;//AllocatethedriverconfigurationobjectWDF_DRIVER_CONFIGconfig;//PrintHelloWorldforDriverEntryKdPrintEx((DPFLTR_IHVDRIVER_ID,DPFLTR_INFO_LEVEL,KmdfHelloWorld:DriverEntry
));//Initializethedriverconfigurationobjecttoregisterthe//entrypointfortheEvtDeviceAddcallback,KmdfHelloWorldEvtDeviceAddWDF_DRIVER_CONFIG_INIT(config,KmdfHelloWorldEvtDeviceAdd);//Finally,createthedriverobjectstatusWdfDriverCreate(DriverObject,RegistryPath,WDF_NO_OBJECT_ATTRIBUTES,config,WDF_NO_HANDLE);returnstatus;}NTSTATUSKmdfHelloWorldEvtDeviceAdd(_In_WDFDRIVERDriver,_Inout_PWDFDEVICE_INITDeviceInit){//Werenotusingthedriverobject,//soweneedtomarkitasunreferencedUNREFERENCED_PARAMETER(Driver);NTSTATUSstatus;//AllocatethedeviceobjectWDFDEVICEhDevice;//PrintHelloWorldKdPrintEx((DPFLTR_IHVDRIVER_ID,DPFLTR_INFO_LEVEL,KmdfHelloWorld:KmdfHelloWorldEvtDeviceAdd
));//CreatethedeviceobjectstatusWdfDeviceCreate(DeviceInit,WDF_NO_OBJECT_ATTRIBUTES,hDevice);returnstatus;}
相关参考见此https://docs.microsoft.com/zh-cn/windows-hardware/drivers/gettingstarted/writing-a-very-small-kmdf--driver
有关WDK驱动程序构建的参考见
https://docs.microsoft.com/zh-cn/windows-hardware/drivers/devtest/tools-for-building-drivers
https://www.baidu.com/link?urlgofQddvm4cFhKAFxAD1iH0_YNCjokCmRwhWT5SEKaaWhbkQPew_4nTGZRiuBBX9bK8r98rY4F-FZuzSfC7o-SPME2VHxHqYizvD8EV7M7Lywdeqida98c2ec5000d****65fef218a
从CheckedBuild环境切换到test.c所在目录输入buildtest.c看一下能否构建出一个test.sys的驱动程序构建完成Done
没有出来.sys为后缀的驱动程序还不是很清楚这概念可能到某一版本后MS的构建应用程序的build和构建驱动程序的build可能是一个只是通过不同的参数和环境来构建出不同的程序类型
看一下安装目录的下面目录是一个wmi示例驱动程序
adm64目录下都是源文件构建一下此驱动示例看能否生成.sys驱动amd64架构的驱动程序构建成功以后出现在amd64目录下如果是构建x86的驱动程序则.sys出现在i386目录下
构建wmisamp示例完毕后显示Donewmisamp.sys1executablebuilt
看一下amd64目录下出来一个.sys驱动程序
免责声明: 凡标注转载/编译字样内容并非本站原创,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如果你觉得本文好,欢迎推荐给朋友阅读;本文链接: https://m.nndssk.com/post/54134.html。