Windows 10驱动开发入门(二):HelloWDK的分析

本文是Windows 10驱动开发系列的第二部分,介绍了驱动程序的入库函数DriverEntry,以及如何使用DriverObject。通过分析代码,展示了驱动在安装和卸载时的调用流程,强调了DriverObject结构体的重要性。此外,还探讨了驱动编译生成的SYS和DLL文件及其与常规EXE或DLL的区别。
摘要由CSDN通过智能技术生成

在上一章中 Windows 10驱动开发入门(一):环境搭建我们发现,其实驱动开发中的Hello World,并没有那么难写,而且还打成了一个驱动包,能够安装到测试机上了,成功的打印出了日志来。

我们的driver.cpp的代码如下:

// driver.cpp
#include <ntddk.h>

extern "C" void DriverUnload(PDRIVER_OBJECT pDriverObject);

extern "C"  NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegPath)
{
	DbgPrint("[GO2CODING_Driver] DriverEntry\n");
	NTSTATUS status = STATUS_SUCCESS;
	pDriverObject->DriverUnload = DriverUnload;

	return status;
}

extern "C" void DriverUnload(PDRIVER_OBJECT pDriverObject)
{
	DbgPrint("[GO2CODING_Driver] DriverUnload\n");

	return;
}

对于驱动程序来说,可以发现他并不像传统的程序一样,入库是main函数,这里的入库函数为DriverEntry ,DriverEntry函数的参数为固定的参数形式,PDRIVER_OBJECT 的结构承载了驱动函数的入库,PDRIVER_OBJECT 能够做很多的事情,后面我们还会对这个结构进行详细的解释和使用,慢慢的熟悉这个结构体和驱动的开发过程。

我们发现所有的函数前面都出现了一个extern "C" 的,这不是驱动特有的,而是我们开发的时候使用的是cpp的文件格式,cpp在调用c函数的时候,需要做extern "C" 的声明,当然如果我们使用的是.c文件开发,extern "C" 就不是必要的。

pDriverObject 中,我们只做了DriverUnload 的处理,并没有实质性的东西,只是在驱动卸载的时候,会调用DriverUnload

在驱动安装的时候,调用DriverEntry函数,被卸载的时候,调用了DriverUnload函数,只是DriverUnload是一个指针函数,在DriverEntry被添加进来的。

在这里插入图片描述
驱动编译成了.inf.sys两种文件,并不是像普通程序生成的为exe或者dll,其实.sys也是PE格式的,懂得exe或者dll的分析,自然就懂得.sys的分析了。

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

go2coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值