内核编程-开发环境搭建+编写第一个驱动

我用的环境是vs2022

微软官网下载驱动工具包
按照1-3步骤全部下载安装 已经安装的跳过
https://learn.microsoft.com/zh-cn/windows-hardware/drivers/download-the-wdk

image.png

#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工具的打印日志


image.png

这就表示成功了
和我们上面的代码一致

其他命令
停止服务 sc stop FirstDriver
删除服务 sc delete FirstDriver

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容