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

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在 Visual Studio 2019编写 Windows 系统驱动代码时,通常需要包含一些头文件来引入所需的库和 API。以下是一些常用的头文件: - `ntddk.h`:这是一个非常重要的头文件,包含了驱动开发所需的大量定义和函数原型,如驱动对象、设备对象、内存管理、同步机制、IRP、IOCTL 等。 - `wdm.h`:这个头文件也包含了许多驱动开发相关的定义和函数原型,是 `ntddk.h` 的一部分。 - `ntifs.h`:如果你正在编写过滤驱动(filter driver),就需要包含这个头文件。它包含了一些特殊的数据结构和函数原型,如过滤器回调函数、IO 操作控制码等。 - `ntstrsafe.h`:这个头文件包含了一些安全字符串操作函数的定义,如 `strcpy_s`、`sprintf_s` 等。使用这些函数可以有效避免字符串缓冲区溢出等常见安全问题。 除了上述头文件,根据需要还可以包含其他一些系统头文件或第三方库的头文件。但需要注意的是,在驱动中使用标准 C 库的函数是不被支持的,因此不要包含 `stdio.h`、`stdlib.h` 等标准 C 库头文件。 ### 回答2: 在Visual Studio 2019中,在sys驱动代码中包含头文件需要遵循以下步骤。 首先,打开Visual Studio 2019并创建一个新的sys驱动项目。选择合适的项目模板,比如Windows驱动程序模板。 在项目文件夹中找到.h文件,这是您的头文件。将头文件添加到项目中,在项目资源管理器中右键单击“头文件”文件夹,并选择“添加”>“现有项”。浏览并选择您的头文件文件。 接下来,在sys驱动代码的源文件中包含头文件。找到相应的.c或.cpp文件,右键单击并选择“打开”。现在您可以在源代码文件中编写和添加包含头文件的代码。 在源文件中的适当位置,使用#include预处理指令包含头文件。例如,如果您的头文件名为example.h,则使用以下代码包含它: #include "example.h" 请确保在头文件名称周围使用双引号(而不是尖括号),这表示在当前项目文件夹中查找头文件。如果头文件位于项目文件夹之外,您可能需要使用适当的文件路径。 保存并关闭源文件。现在,您的sys驱动代码将包含您指定的头文件,并且可以使用头文件中定义的内容。使用这些包含的头文件,您可以在驱动程序中使用其他功能、库和变量。 ### 回答3: 在Visual Studio 2019中,编写sys驱动代码时,我们需要包含一些必要的头文件。首先,我们需要包含<ntddk.h>头文件,该头文件包含了Windows驱动开发所需的API和定义。另外,我们还需要包含<Wdm.h>头文件,它定义了一些Windows驱动程序所需的结构和常量。这两个头文件是编写sys驱动代码的基础。 除了这些基本的头文件之外,我们还可能需要包含其他一些特定的头文件,根据具体的功能需求。例如,如果我们需要使用输入输出操作相关的函数,我们还需要包含<wdmsec.h>头文件;如果我们需要使用驱动程序中断处理例程,我们可能需要包含<intrin.h>头文件。 在Visual Studio 2019中,将这些头文件包含到sys驱动代码中非常简单。我们只需在代码的开头使用#include预处理指令,后跟相应的头文件名即可。例如,要包含<ntddk.h>头文件,我们可以在代码中使用以下语句: #include <ntddk.h> 这样,我们的sys驱动代码就可以使用该头文件中定义的API和定义了。当然,在包含所有必要的头文件后,我们还需要正确地配置项目的编译设置,以便能够正确地编译和构建sys驱动程序。 总而言之,在Visual Studio 2019中,编写sys驱动代码时,包含必要的头文件是至关重要的。这些头文件提供了所需的API和定义,以便我们能够编写出高效和可靠的sys驱动程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

拜乔布斯

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

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

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

打赏作者

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

抵扣说明:

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

余额充值