VisualStudio2019编写驱动

一、驱动环境

关于Windows驱动环境如何安装,微软官网已有介绍,地址:

https://docs.microsoft.com/zh-tw/windows-hardware/drivers/download-the-wdk

1、安装VisualStudio2019

注意:选择正确的Windows 10 SDK版本和安装CPU漏洞缓解库

2、安装Windows Driver Kit

二、驱动例子

1、新建驱动项目

选择Kernel Mode Driver,Empty(KMDF)模板,如图:

2、驱动代码

代码如下图:

#include <ntddk.h>

VOID DisplayItsProcess()
{
	// 获取执行体层进程对象的数据结构EPRCESS,非内核层进程数据结构KPROCESS,也非用户层PEB
	PEPROCESS pEProcess = PsGetCurrentProcess();
	// EPRCESS结构体不能直接用指针访问成员变量ImageFileName
	PTSTR ProcessName = (PTSTR)((ULONG)pEProcess + 0x17C);
	DbgPrint("ProcessName:%s\n",ProcessName);
	// PsGetCurrentProcessId()返回进程id是一个句柄
	DbgPrint("ProcessId:%p\n",PsGetCurrentProcessId());
}

NTSTATUS DriverUnload(PDRIVER_OBJECT DriverObject)
{
	DisplayItsProcess();
	DbgPrint("This driver is unloading…\n");
	return STATUS_SUCCESS;
}

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)
{
	DbgPrint("This driver is loading…\n");
	DisplayItsProcess();
	DriverObject->DriverUnload = DriverUnload;
	DbgPrint("%ws\n",RegistryPath->Buffer);
	return STATUS_SUCCESS;
}

代码含义:在驱动加载和卸载的时候输出该驱动所属的进程名和进程id

3、驱动运行

使用DriverMonitor把驱动加载起来,DebugView捕获到的输出如下:

三、WinDbg调试

1、虚拟机设置

添加串行端口

Windows10开启内核调试

重新启动Windows10系统,选择kkkkkkkkk启动选项

2、WinDbg连接被调试系统

注意:连接不成功的话就Detach,重新连接

3、定位驱动加载地址

手动加载驱动,找到驱动加载的内核基地址0xbc840000,如图:

ida中换算出DriverUnload( )函数地址0xbc841070,如图:

WinDbg下断点,如图:

4、调试代码

手动卸载驱动,WinDbg停在DriverUnload( )函数处,开始调试代码,如图:

PsGetCurrentProcess()函数返回结构体EPRCESS,EPRCESS用来表示执行体层的进程对象;

可以使用dt nt!_EPROCESS命令查看结构体成员;

这里使用dt _EPROCESS 89f572c0命令查看结构体成员和对应值,如图:

偏移0x17C处是进程名ImageFileName

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

拜乔布斯

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

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

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

打赏作者

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

抵扣说明:

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

余额充值