如何在win10+VS2017环境下新建一个简单的WDF示例程序

article/2025/10/10 18:16:45

上一课我们在win10系统+VS2017开发环境下搭建了WDK驱动程序开发环境的搭建,详见我的博客【如何在win10+VS2017环境下安装USB驱动开发套件WDK】,今天我们来尝试建立一个最简单的KDM示例工程。

提前说明:本博客所建立的示例工程的源码,我上传在了CSDN里【https://download.csdn.net/download/leon1741/10957680】,大家可以自行去下载。不过遗憾的是,现在CSDN资源的下载积分规则改了,不能由上传者来设置该资源的下载积分,而是由系统自动适配的。因此,这个资源的下载积分目前需要5分,有点多,我其实想设置成免费或者最多1分的,可是系统不让我改。希望各位的积分值够用,或者希望系统过段时间自动把下载积分值降下来吧…

第一步:新建工程

在这里插入图片描述
记得要选择WDF模型下的空KMD驱动项目,项目名我输的是KMD_Test,大家可以自己更改。
在这里插入图片描述

第二步、输入代码

在源代码文件夹上右击,选择新建一个空白文件。
在这里插入图片描述
输入文件名为Drive.c。请注意,不是Drive.cpp,而是Drive.c

在文件中输入以下内容:

#include <ntddk.h>
#include <wdf.h>DRIVER_INITIALIZE DriverEntry;
EVT_WDF_DRIVER_DEVICE_ADD KmdfHelloWorldEvtDeviceAdd;NTSTATUS
DriverEntry(_In_ PDRIVER_OBJECT     DriverObject,_In_ PUNICODE_STRING    RegistryPath
)
{// NTSTATUS variable to record success or failureNTSTATUS status = STATUS_SUCCESS;// Allocate the driver configuration objectWDF_DRIVER_CONFIG config;// Print "Hello World" for DriverEntryKdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "KmdfHelloWorld: DriverEntry\n"));// Initialize the driver configuration object to register the// entry point for the EvtDeviceAdd callback, KmdfHelloWorldEvtDeviceAddWDF_DRIVER_CONFIG_INIT(&config,KmdfHelloWorldEvtDeviceAdd);// Finally, create the driver objectstatus = WdfDriverCreate(DriverObject,RegistryPath,WDF_NO_OBJECT_ATTRIBUTES,&config,WDF_NO_HANDLE);return status;
}NTSTATUS
KmdfHelloWorldEvtDeviceAdd(_In_    WDFDRIVER       Driver,_Inout_ PWDFDEVICE_INIT DeviceInit
)
{// We're not using the driver object,// so we need to mark it as unreferencedUNREFERENCED_PARAMETER(Driver);NTSTATUS status;// Allocate the device objectWDFDEVICE hDevice;// Print "Hello World"KdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "KmdfHelloWorld: KmdfHelloWorldEvtDeviceAdd\n"));// Create the device objectstatus = WdfDeviceCreate(&DeviceInit,WDF_NO_OBJECT_ATTRIBUTES,&hDevice);return status;
}

第三步:项目配置

首先切换到x64平台下,选择debug模式。
在这里插入图片描述
然后打开项目属性的窗口,完成以下设置:
在这里插入图片描述
在这里插入图片描述

第四步、全文编译

无需其他操作,点击编译按钮即可!

1>------ Build started: Project: KMD_Test, Configuration: Debug x64 ------
1>Building 'KMD_Test' with toolset 'WindowsKernelModeDriver10.0' and the 'Universal' target platform.
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppBuild.targets(402,5): warning MSB8038: Spectre mitigation is enabled but Spectre mitigated libraries are not found.  Verify that the Visual Studio Workload includes the Spectre mitigated libraries.  See https://aka.ms/Ofhn4c for more information.
1>Stamping x64\Debug\KMD_Test.inf
1>Stamping [Version] section with DriverVer=02/14/2019,18.56.35.708
1>Drive.c
1>KMD_Test.vcxproj -> D:\A_Download\KMD_Test\x64\Debug\KMD_Test.sys
1>Done Adding Additional Store
1>Successfully signed: D:\A_Download\KMD_Test\x64\Debug\KMD_Test.sys
1>
1>Driver is a Universal Driver.
1>........................
1>Signability test complete.
1>
1>Errors:
1>None
1>
1>Warnings:
1>None
1>
1>Catalog generation complete.
1>D:\A_Download\KMD_Test\x64\Debug\KMD_Test\kmd_test.cat
1>[0x7FF9F8B95140] ANOMALY: meaningless REX prefix used
1>[0x7FF9F8B95180] ANOMALY: meaningless REX prefix used
1>[0x7FF9F8B95380] ANOMALY: meaningless REX prefix used
1>[0x7FF9F8B935F0] ANOMALY: meaningless REX prefix used
1>[0x7FF9F8B91FD0] ANOMALY: meaningless REX prefix used
1>Done Adding Additional Store
1>Successfully signed: D:\A_Download\KMD_Test\x64\Debug\KMD_Test\kmd_test.cat
1>
1>Done building project "KMD_Test.vcxproj".
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

编译出来的驱动程序,均放在”项目目录\Debug\KMD_Test“目录下:
在这里插入图片描述

  • KMD_Test.sys – 最关键的内核模式驱动文件;
  • KMD_Test.inf – 安装驱动时提供给系统使用的信息文件;
  • KMD_Test.cat – 安装程序用来鉴别驱动签名状态的目录文件;

注:以上全部过程,均是参考微软官方的指导文档执行下来,大家若有兴趣可以自行参阅【Write a KMDF Hello World driver】。

另外,也可以参考微软在github上提供的一份全套示例参考【https://github.com/Microsoft/Windows-driver-samples】。

OK,新建的工程已经顺利编译成功,驱动程序也已经生成完毕,本篇到此为止。下一篇我们将继续研究如何进行驱动程序的调试和安装。


篇后语:

这里补充一下,安装完WDK之后,如果去编译其他的C++工程,有可能会遇到【LINK : fatal error LNK1104: 无法打开文件“MSVCRTD.lib”】之类的问题,请不要慌张,不要去网上乱找,这个问题的原因其实很简单,参考我的另一篇博客【如何解决win10+VS2017+WDK环境下编译C++程序提示error LNK1104无法打开文件*.lib的问题】即可!


http://chatgpt.dhexx.cn/article/VCI8uiBY.shtml

相关文章

WDF驱动安装方法

WDF驱动的安装方法: 编译好的SYS文件、INF文件、另外还需要一个WdfCoInstaller01009.dll文件&#xff0c;对应的WDK版本是7600.16385.1这个版本&#xff0c;其中WdfCoInstaller01009.dll文件位于“WDK安装目录” \redist\wdf\x86下,这个动态链接库文件是WDF驱动框架在安装时所必…

WRF模式

随着生态文明建设和“碳中和”战略的持续推进&#xff0c;我国及全球气候变化及应对是政府、科学界及商业界关注的焦点。气候是多个领域&#xff08;生态、水资源、风资源及碳中和等问题&#xff09;的主要驱动因素&#xff0c;合理认知气候变化有利于解释生态环境变化机理及过…

WDF VIOLATION 你的电脑遇到问题,需要重新启动

文章目录 问题描述问题原因解决方法 【写在前面】作为一名还未毕业的研究僧&#xff0c;天天泡实验室是常有的事。学校的电脑是惠普的。我在上面装了Win10的系统。不久之前&#xff0c;电脑重启后竟然蓝屏了&#xff0c;无法进入系统&#xff0c;蓝屏上显示的是WDF VIOLATION 你…

WDS服务

二&#xff1a;WDS服务 预启动执行环境&#xff08;Preboot eXecution Environment&#xff0c;PXE&#xff09;也被称为预执行环境&#xff0c;提供了一种使用网络接口&#xff08;Network Interface&#xff09;启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存…

基于WDF驱动模型使用WFP框架进行网络层数据修改

一、WDF驱动模型介绍&#xff1a; WDF驱动模型是微软推出的驱动程序开发环境&#xff0c;是Vista及其以后OS的驱动模型。在visia之前win2000之后用的是WDM驱动模型。WDF是以WDM为基础进行了建模和封装&#xff0c;降低了开发难度。WDF将驱动程序与操作系统内核之间进行了分离&a…

从零开始学习Windows WDF驱动程序开发

从零开始学习Windows WDF驱动程序开发 ▼ 目录&#xff1a; 1. 第一部分 编译安装测试一个简单的WDF驱动程序 1.1 编译安装测试 1.2 Windows驱动开发就是要开发出INF文件和SYS文件 1.3 简单介绍下编译脚本 1.4 Windows应用程序如何访问一个设备 2. 第二部分 了解WDF框架并且开发…

亲手解剖WDF驱动

亲手解剖WDF驱动 创建一个WDF驱动(non-pnp) WDF驱动其实是微软公司提供的一套驱动开发的框架。 有了这个框架之后&#xff0c;开发驱动会简单一些。WDF本身是从WDM基础上封装而成的。WDF里面封装了很多对象&#xff0c;如WDFDRIVER等。如果要学习使用WDF来开发驱动&#xff0c;…

windows驱动开发4:WDM、WDF等驱动基本概念

一、WDM 1、WDM WDM是英文Windows Driver Model(WDM)的缩写&#xff0c;是Windows98和Windows2000使用的新的驱动程序设计规范。使用WDM使得硬件驱动程序更加稳定&#xff0c;让操作系统对硬件更加有效地控制硬件。 除了定义一个驱动程序与操作系统连接的标准接口以外&#…

WDF开发详解

原文地址&#xff1a;https://blog.csdn.net/lang_eva/article/details/109676808 WDF开发详解 添加设备&#xff1a;hdwwiz KMDF驱动程序框架 KMDF 驱动程序框架由对象和事件回调例程构成。KMDF 框架中所有的事物都由对象表示&#xff0c;各种事件处理都由事件回调例程来完…

windows驱动开发-WDF编程

文章目录 前言WDF编程前的准备工作WDF编程创建驱动对象创建设备对象设备对象的回调函数链表操作驱动的测试代码 其他 前言 注&#xff1a;本文的完整代码见仓库 18-WDF-reflect 代码参考自&#xff1a;junjiexing/libredirect 我不是从事驱动开发的专业人员&#xff0c;打酱…

javaWeb图书管理系统

javaWeb图书管理系统 1.项目简单介绍 a.项目用到的技术 IDE: Intellij IDEA语言&#xff1a;java&#xff0c;html ajax&#xff0c;js数据库&#xff1a;Mysql数据库可视化&#xff1a; navicatweb服务器&#xff1a;Tomcat框架&#xff1a;&#xff08;mybatis&#xff0…

基于Java基础的图书管理系统

文章目录 前言一、前期准备二、需求分析三、核心代码开发1、 model 层1.1、 Book 类1.2、 User 类1.3、 NormalUser 类1.4、 Admin 类 2、 service 层2.1、 IOOperation 接口2.1、 AddBook 类2.2、 DeleteBook 类2.3、 ReplaceBook 类2.4、 ListAllBook 类2.5、 BorrowBook 类2…

图书馆管理系统 Java

目录 要求&#xff1a; 代码 Operate接口 Book类 Reader类 BookList类 ReadList 类 Infor类 InforList类 main 功能实现 改进 错误 总结 要求&#xff1a; 为图书管理人员编写一个图书管理系统&#xff0c;图书管理系统的设计主要是实现对图书的管理和相关操作&a…

图书管理系统【Java实现】

目录 一、项目简介二、项目演示1.登录界面2.图书借阅信息管理界面3.新增图书借阅信息界面4.修改图书借阅信息界面5.删除图书借阅信息界面 三、项目流程1.准备开发环境&#xff08;1&#xff09;下载所需文件&#xff08;2&#xff09;在IDEA中配置Maven&#xff08;3&#xff0…

Java开发实现图书管理系统(超详细)

本文用Java代码实现图书代码管理系统&#xff0c;有些地方可能会有纰漏&#xff0c;希望各位大佬鉴赏&#xff01;&#xff01; 文章目录 文章目录 一、Java实现图书管理系统 1.1创建book包 二、创建图书管理系统的操作包 2.1创建Operation接口 三、创建User包 3.1创建User类 四…

Java实现图书管理系统(新手友好)

图书管理系统 一、初识工作二、具体实现三、代码book包Book类BookList类 operation包IOperation接口AddOperationBorrowOperationDelOperationDisplayOperationExitOperationFindOperationReturnOperation user包AdminUserNormalUserUser Main 一、初识工作 我们首先要清楚的是…

图书管理系统【java】

目录 &#x1f947;1.设计背景 &#x1f50e;2.设计思路 &#x1f511;3.book包 &#x1f4d7;3.1 Book类的实现 &#x1f4d5;3.2 BookList类的实现(书架) &#x1f511;4.user包 &#x1f4d9;4.1 User类的实现 &#x1f4d2;4.2 AdminUser&#xff08;管理员&#x…

图书管理系统(Java)

&#x1f4da; 一、前言1.1整体框架 二、book包2.1Book2.2BookList 三、user包3.1、User3.2、Adminuser3.3、Normaluser 四、Operation包4.1、IOperation接口4.2、AddOperattion4.3、ShowOperation4.4、FindOperation4.5、DelOperation4.6、BorrowOperation4.7、ReturnOperatio…

图书管理系统(Java简单版)(完整代码+详解)

目录 详解&#xff1a; BookList类&#xff1a; InOperation接口 User类&#xff08;父类&#xff09; 和 Main类&#xff08;这俩要一起看&#xff09; 完整代码 book包 Book类 BookList类 operation包 AddBook类 BorrowBook类 DeleteBook类 FindBook类 Pr…

用java实现图书管理系统。

在学完java基础篇的时候&#xff0c;安排做了一个综合版的java基础项目&#xff0c;可以把之前学到的知识综合运用。 图书管理系统。 一.项目设计到的知识1.MVC设计模式思想&#xff08;分包&#xff09;>项目分包>MVC简单介绍 2.GUI&#xff08;图形化界面&#xff09;3…