驱动开发WDK(1)-环境准备和初始程序。详细教程

得而不惜就该死

--yui

断断续续开始我的逆向部分。

Windows Driver Kit

一、准备

1、visual studio安装: 如何下载Visual Studio2022编译器。详细教程_visual studio 2022下载教程-CSDN博客

2、sdk安装:默认已安装

3、wdk安装:

win10版本: Previous WDK versions and other downloads - Windows drivers | Microsoft Learn

win11版本:

第一个注意点:wdk下载版本需要和sdk版本一致。那么如何去查看sdk版本?

(1)在搜索框处:visual studio installer。打开

(2)选择自己下载的vs点击修改即可(此处无所谓社区版或者专业版)

(3)查看。使用c++的桌面开发->在右边查看sdk版本(10.0.22621.0)

(4)下载wdk。选择前三个数一致的wdk版本,同时末尾数最接近即可

(此处注意若使用visual studio2019版本对应SDK为10.0.19041,但是无相对的WDK,选择windows 10 version 2004版本即可)

(5)下载后双击安装等待即可

出现类似如下错误自行在非中文盘符下创建一个空目录夹,将安装目录指定即可。

二、驱动程序开发

驱动程序和三环程序的区别:

1、三环程序运行在低2g,驱动在高2g

2、驱动程序的高2g内存是共享的,所有的驱动程序可理解为运行在一个大进程中

如何加载?像三环加载dll文件时一样

(一)创建一个驱动程序项目

1、打开visual studio。搜索wd,出现图示项目即为成功

2、创建项目。自主命名项目和存储路径后点击创建即可

3、创建项。右键Source Files创建项即可

此时注意,文件后缀为.c不是.cpp

4、测试程序(以下代码提供用于测试)

同时对于以下测试程序,我们会在后续慢慢解释其中各个函数和参数的意义。

cpp 复制代码
//0、引入头文件
#include <ntddk.h>

//2.1 用于主函数的结束标志
void driverUnload(PDRIVER_OBJECT pDriver){
    DbgPrint("driverUnload worked");
}

NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver,PUNICODE_STRING pRegPath){
    
    //自带用于断点的API
    DbgBreakPoint();
    
    //1、打印语句
    DbgPrint("Hello yuichan");

    //2、为结构体pDriver绑定结束函数地址
    pDriver->DriverUnload = driverUnload;


    //3、函数结束返回值
    return STATUS_SUCCESS;
}

(1)将代码拷贝至项目后,生成,发现爆出错误,这是因为我们少安装了某些组件,若没有这些组件我们的程序将会出现某些漏洞,但是因为我们是初学者,所以我们做一个小调试即可

右键项目属性->C/C++->代码生成->将Spectre Mitigation选项调至Disabled即可

(2)再次右键项目生成,出现新的错误

右侧打开Driver Files->选中MyDriver1.inf删除即可(原因后续解释)

此时再次右键生成,出现错误。表示将警告视为了错误,我们在C语言时大多数人不会关注警告,因为警告是不会影响3环程序,而驱动程序是1环,所以Visual Studio给我们提示错误

右键项目属性->C/C++->常规->将警告视为错误项修改为否(/WX-)

(4)最后我们再次提出一点,驱动程序所跑的环境。

右键项目属性->Driver Settings->General 在此项中存在Target OS Version,选择自己驱动所要跑的操作系统环境

三、驱动程序初跑

准备工具(win7中):

A1sysTest用于安装注册、启动、停止、卸载驱动程序 最后初测、启动、停止、卸载驱动

dbgview用于查看dbgPrint输出语句 再打开用于查看

注册表文件:先执行添加注册表

(本机win11中)

windbg用于判断断点

有任何疑问或者资源求助可以私聊

相关推荐
GlobalInfo11 小时前
2026年全球机器人用超平执行器市场研究报告:市场规模达7.51亿美元,人形机器人商业化与轻量化运动控制需求推动行业增长
大数据·人工智能·数码相机·microsoft·机器人
mg66811 小时前
安卓玩机工具----告别面具!SukiSU Ultra 内核级 Root 与终极隐藏实战指南
驱动开发·root系统
编码者卢布19 小时前
【Azure Container Apps】为什么通过 Diagnostic Settings 发送到 Log Analytics 中的日志会延迟几分钟?
microsoft·azure
0x000720 小时前
微软intelligent-terminal:Windows 的官方内置Agent Cli
microsoft
海盗123421 小时前
微软技术日报 2026-11-02:开发者环境服务退役、Defender 清点本地 AI 代理
人工智能·microsoft·机器人·人工智能aigc
女神下凡1 天前
芯参谋(87):Linux 系统(SPI NOR)驱动开发指南
linux·运维·arm开发·驱动开发·嵌入式硬件·设计规范
cynicism??2 天前
Linux 与 ZXISOS 驱动开发架构对比
linux·驱动开发·架构
海盗12342 天前
微软技术日报 2026-11-01:语言模型 API 免申请、8 个威胁组织被分四档
人工智能·microsoft·语言模型·机器人·人工智能aigc
女神下凡2 天前
芯参谋(83):AliOS Things_驱动开发指南
arm开发·驱动开发·单片机·嵌入式硬件·设计规范·1024程序员节
万物智能信息科技2 天前
指纹识别传感器驱动开发—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】
驱动开发·华为·开源·harmonyos·鸿蒙