Windows驱动开发——如何创建一个驱动项目

以一个初学者的方式来回忆驱动开发的知识(虽然我本来就是初学者,哈哈哈),因为记性不好,所以就得每过一段时间自己就会从零开始再学一遍。

驱动开发第一步,创建项目。
选择Windows Driver->Legacy->Empty WDM Driver。(当然创建的方式很多,这只是我自己常用的)。
Windows驱动开发——如何创建一个驱动项目_第1张图片
添加新建项
这里我们新建文件,注意创建.c文件,不是.cpp文件,还有一般情况下,我们先将.inf文件移除。
Windows驱动开发——如何创建一个驱动项目_第2张图片
设置属性

需要设置驱动的平台,这里我一般使用的Windows7,根据自身情况设置。
Windows驱动开发——如何创建一个驱动项目_第3张图片
我们也可以把C++和链接器里的“将警告是为错误”选项改为否,可以避免许多报错。
Windows驱动开发——如何创建一个驱动项目_第4张图片
Windows驱动开发——如何创建一个驱动项目_第5张图片
编写代码
首先是在头文件里添加一个头文件。是最基本的一个头文件。
在这里插入图片描述
然后是入口函数,就像exe、dll都有入口函数main或dllmain一样,驱动程序也必须有一个入口函数DriverEntry().

NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegisterPath)
俩个参数:
    1)PDRIVER_OBJECT DriverObject,指向驱动程序对象的指针。我们操作驱动程序,全靠它,它是由 I/O 管理器传递进来的;
    2)PUNICODE_STRING RegistryPath,驱动程序的服务主键,这个参数的使用并不多,但要注意,在DriverEntry() 返回后,它可能

在DriverEntry中,一般需要做一下几件事情: 设置驱动卸载例程、 注册 IRP 的派遣函数、 创建设备对象等!并且驱动卸载例程与 IRP 派遣函数都是对驱动对象设置的。

DriverUnload():负责删除在DriverEntry中创建的设备对象并且将设备对象所关联的符号链接删除,另外,DriverUnload还负责对一些资源进行回收。

void DriverUnload(PDRIVER_OBJECT DriverObject)
{
     
	DbgPrint("DriverUnload()\r\n");
}

这样一个最简单的驱动程序就写好了。

NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegisterPath)
{
     
	KdPrint(("Hello World!"));
	DriverObject->DriverUnload = DriverUnload;
	return STATUS_SUCCESS;
}

void DriverUnload(PDRIVER_OBJECT DriverObject)
{
     
	DbgPrint("DriverUnload()\r\n");
}

下面我们来测试一下。

测试环境: Windows7 32位虚拟机。

加载驱动
Windows驱动开发——如何创建一个驱动项目_第6张图片
打印“Hello World!”
Windows驱动开发——如何创建一个驱动项目_第7张图片
参考:
https://www.cnblogs.com/lfls128/p/4987388.html
《Windows驱动开发技术详解》

你可能感兴趣的:(Windows内核及驱动开发)