我用的环境是vs2022
微软官网下载驱动工具包
按照1-3步骤全部下载安装 已经安装的跳过
https://learn.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk
#include "ntddk.h" //引入内核开发所需头文件
//驱动停止函数
VOID DriverUnload(PDRIVER_OBJECT DriverObject) {
if (DriverObject != NULL) {
DbgPrint("[%ws]Driver Upload,Driver Object Address:%p", __FUNCTIONW__, DriverObject);
}
return;
}
//驱动入口函数
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) {
DbgPrint("[%ws] Hello Kernel World\n", __FUNCTIONW__);
if (RegistryPath != NULL) {
DbgPrint("[%ws]Driver REgistPath:%wZ\n", __FUNCTIONW__, RegistryPath);
}
if (DriverObject != NULL) {
DbgPrint("[%ws]Driver Object Address:%p\n", __FUNCTIONW__, RegistryPath);
DriverObject->DriverUnload = DriverUnload;
}
return STATUS_SUCCESS;
}
然后编译 可能会出现以下错误
error LNK2019: 无法解析的外部符号 DriverEntry,该符号在函数 GsDriverEntry 中被引用
导致该问题的原因是使用了.cpp后缀的文件格式,解决方法很简单, 可以直接把它换成.c结尾。或者加上extern"C"让它以C语言方式链接就可以了
我采用的是debug编译方式,编译完后 在debug目录会有一个first.sys文件 我名称用的first
接下来我们让驱动运行起来
我们在虚拟机中运行 避免一些意外情况发生 影响我们本机
我装的是win10系统
首先我们去掉驱动签名
开始->设置->更新与安全->恢复->高级启动下面 点击立即重启
重启后 会出现 启动选项 选择7 就是 禁用驱动程序签名
把编译好的驱动文件 放到虚拟机的C盘目录下
下一个dbgview工具 百度自己找 为了查看我们刚刚代码中的DbgPrint函数打印的日志
下载完后打开它
然后打开cmd窗口 记得要以管理员权限
注册驱动服务 demand 表示手动启动方式
sc create FirstDriver binPath= "C:\first.sys" type= kernel start= demand
启动服务 sc start FirstDriver
启动服务后 我们看dbgview工具的打印日志
这就表示成功了
和我们上面的代码一致
其他命令
停止服务 sc stop FirstDriver
删除服务 sc delete FirstDriver