14. windows驱动开发入门

1.第一个驱动程序

前面一章节我们已经学习了如何对windows系统进行调试:Windows 驱动开发环境搭建与内核调试入门

本节将开始学习如何开发、调试windows驱动程序。

上一章节下载了WDK后,我们就可以来到vs中,安装一些插件。

直接来到组件页面,搜索关键字:v143 最新

image.png

勾选上面红框中的组件,然后继续勾选下面的组件:

image.png

然后再搜索driver关键字,下载下面这个组件:

image.png

点击完成,开始安装组件,安装完成后,我们就可以来到创建新项目的目录中,找到WDM模板:

image.png

点击创建即可,这和普通的C++程序项目没什么区别。

然后随便取个项目名字:

image.png

创建一个入口文件,注意要以.c作为文件后缀,比如driver.c

image.png

一个最简单的代码如下:

#include<ntifs.h>
#include<ntddk.h>


// 卸载驱动执行
VOID UnloadDriver(PDRIVER_OBJECT pDriver)
{
	pDriver;
	DbgPrint("Driver unloaded\n");
}


NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING pRegistryPath) {
	pDriver->DriverUnload = UnloadDriver;
	pRegistryPath;
	DbgPrint("Driver Loaded\n");
	return STATUS_SUCCESS;
}

这两个函数中,DriverEntry为驱动加载时的入口函数,UnloadDriver为驱动卸载时要调用的函数。

驱动入口函数有两个参数,其中第一个参数pDriver为我们当前驱动运行时系统给我们创建的驱动对象,比如代码中我就是通过给该对象的DriverUnload参数设置我们驱动的卸载函数。

同时由于驱动编译较为严格,默认不允许有未被使用的参数,所以我这里对于暂时用不到的参数就直接将其放在代码中了。

DbgPrint函数就是内核中的打印函数,它的使用方法和printf函数几乎是一模一样的,你完全可以将其当作printf函数使用。

作者:余识
全部文章:0
会员文章:0
总阅读量:0
c/c++pythonrustJavaScriptwindowslinux