0

0

windows驱动怎么写 驱动开发工具链与调试思路

舞夢輝影

舞夢輝影

发布时间:2026-02-22 16:23:03

|

420人浏览过

|

来源于php中文网

原创

需安装匹配版本的wdk与visual studio,选择kmdf模型创建项目,编写driverentry和evtdriverdeviceadd等核心逻辑,测试阶段启用测试签名并用inf2cat/signtool签名,最后通过windbg网络调试。

windows驱动怎么写 驱动开发工具链与调试思路

如果您希望在Windows平台上开发内核模式驱动程序,则需要理解驱动模型、构建环境配置以及调试机制。以下是完成Windows驱动开发所需的核心工具链与调试路径:

一、安装WDK与Visual Studio集成环境

Windows Driver Kit(WDK)是微软官方提供的驱动开发套件,必须与兼容版本的Visual Studio配合使用,才能生成可加载的.sys文件。WDK不独立运行,依赖VS的编译器和项目系统。

1、下载并安装与目标Windows版本匹配的WDK,例如Windows 11 WDK 22H2。

2、安装对应版本的Visual Studio(如VS 2022),勾选“使用C++的桌面开发”工作负载。

3、运行WDK安装程序,在安装过程中选择“与已安装的Visual Studio集成”选项。

4、重启Visual Studio后,新建项目时应可在模板中看到“Windows Driver”分类下的“Kernel Mode Driver”或“KMDF Driver”模板。

二、选择驱动模型并创建基础项目

Windows支持多种驱动模型,包括传统NT式驱动、WDM、KMDF和UMDF。KMDF因封装了大量底层细节且具备良好稳定性和调试支持,被推荐用于大多数新开发场景。

1、在Visual Studio中选择“KMDF Driver (Kernel Mode)”模板。

2、填写项目名称与位置,确保目标平台(如x64)与测试机架构一致。

3、向导将自动生成inf文件、driver源码(DriverEntry、EvtDriverDeviceAdd等回调函数)、manifest及build配置。

4、检查生成的.inf文件中ClassGuid是否正确,例如ClassGuid={4d36e97d-e325-11ce-bfc1-08002be10318}(即“显示适配器”类)需按实际设备类型调整。

三、编写核心驱动逻辑

驱动入口函数DriverEntry负责初始化全局资源,而EvtDriverDeviceAdd则在设备枚举时被调用,用于创建WDFDEVICE对象及绑定I/O队列。所有硬件交互必须通过WDF框架对象完成,避免直接操作物理地址或中断控制器。

1、在DriverEntry中调用WdfDriverCreate,并传入WDF_DRIVER_CONFIG结构体,指定EvtDriverDeviceAdd回调。

畅图
畅图

AI可视化工具

下载

2、在EvtDriverDeviceAdd中调用WdfDeviceCreate以创建设备对象,随后调用WdfIoQueueCreate创建默认I/O队列。

3、为队列注册EvtIoDefault或EvtIoRead/EvtIoWrite回调,处理来自应用程序的IRP请求。

4、若需访问硬件寄存器,使用WdfCmResourceListGetDescriptor获取PCI配置空间或内存范围,再通过WdfCommonBufferCreate或MmMapIoSpaceEx映射物理地址。

四、签名与安装驱动

从Windows 10 RS1起,未签名的内核驱动默认禁止加载;测试阶段可通过禁用驱动签名强制策略绕过,但必须在测试完成后使用有效证书签名。

1、在测试机上以管理员身份运行cmd,执行:bcdedit /set loadoptions DISABLE_INTEGRITY_CHECKS,然后执行:bcdedit /set testsigning on,重启生效。

2、使用Inf2Cat工具为.inf文件生成catalog文件:inf2cat /driver:. /os:10_X64

3、使用SignTool对.cat文件签名:signtool sign /v /ac "CrossCert.pem" /s MY /n "Publisher Name" /t http://timestamp.digicert.com driver.cat

4、右键.inf文件,选择“安装”,或使用pnputil命令:pnputil /add-driver driver.inf /install

五、使用WinDbg进行内核调试

WinDbg Preview(或旧版WinDbg)是调试Windows驱动的主要工具,需通过串口、USB 3.0(KDNET)、1394或网络连接主机与目标机。调试器通过内核调试协议捕获断点、异常及驱动日志。

1、在目标机启用内核调试:运行bcdedit /debug on,再执行bcdedit /dbgsettings NET HOSTIP:192.168.1.10 PORT:50000 KEY:1.2.3.4(HOSTIP为目标机自身IP)。

2、在主机WinDbg中选择“File → Connect to Kernel Debugging”,协议选Net,设置相同PORT与KEY,点击OK连接。

3、在驱动源码中插入KdBreakPoint()或设置符号断点,例如:bp MyDriver!EvtDriverDeviceAdd

4、触发设备安装或I/O操作后,WinDbg将中断并显示当前堆栈;使用!drvobj MyDriver 2查看驱动对象状态,用!wdfkd.wdflogdump MyDriver读取WDF框架日志。

相关文章

Windows激活工具
Windows激活工具

Windows激活工具是正版认证的激活工具,永久激活,一键解决windows许可证即将过期。可激活win7系统、win8.1系统、win10系统、win11系统。下载后先看完视频激活教程,再进行操作,100%激活成功。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

365

2025.06.09

golang结构体方法
golang结构体方法

本专题整合了golang结构体相关内容,请阅读专题下面的文章了解更多。

200

2025.07.04

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

421

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

595

2023.08.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

421

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

595

2023.08.10

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1230

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1151

2023.07.27

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

1030

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 9.6万人学习

Excel 教程
Excel 教程

共162课时 | 18.5万人学习

PHP基础入门课程
PHP基础入门课程

共33课时 | 2.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号