栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

windows驱动开发3:第一个驱动及调试

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

windows驱动开发3:第一个驱动及调试

一、创建项目 新建一个以Kernel Mode Driver, Empty(KMDF)为模板的驱动项目,项目名称HelloDriver,在项目中新建一个hello.cpp文件作为驱动入口文件,写一点简单的代码做测试: hello.cpp代码:
#include // 提供一个Unload 函数只是为了让这个程序能够动态卸载,方便调试 extern "C" void DriverUnload( PDRIVER_OBJECT driver) {     // 但是实际上我们什么都不做,只打印一句话     DbgPrint( "hello: my driver is unloading...rn"); } // DriverEntry,入口函数。相当于main。 extern "C" NTSTATUS DriverEntry( PDRIVER_OBJECT driver, PUNICODE_STRING reg_path) {     // 这是内核模块入口,可以在这里写入我们想写的东西     DbgPrint( "hello: my world!");     // 设置一个卸载函数,便于这个函数退出     driver-> DriverUnload = DriverUnload;     return STATUS_SUCCESS; }
修改告警:调整属性 - C/C++ - 常规,警告等级 4,将警告视为错误 否;
二、编译及测试
  • 根据目标机器,选择x86/x64编译
  • 拷贝:KMDFDriver1.sys、KMDFDriver1.cer、KMDFDriver1.inf到测试机器
  • 测试机器打开驱动测试(驱动需要正规签名才能使用,而测试程序没有签名)
bcdedit /debug on bcdedit /bootdebug on                 // boot 驱动需要此设置 bcdedit /set testsigning on            // 使用测试签名可用,和禁用签名功能类似
  • 测试机器打开debugview,需要配置收集内核驱动信息
  • 利用驱动加载工具,安装驱动
  • 安装服务后,启动和停止驱动,即可看到对应的调试信息。至此完成第一个驱动demo
三、远程调试 3.1 VS2019 远程调试 注:容易卡死,不稳定 1、VS2019中,选择 调试 - 附加到进程,连接类型选择 Windows Kernel Mode Debugger,连接目标为之前新建的Device,附加。 注意:附加前要开启虚拟机
2、Debug窗口会显示以下字样,表示已打开管道并等待重连。(注意是 Opened .pipecom_1)
3、接着重新启动虚拟机,等待虚拟机进入桌面。Debug窗口显示如下: 注意:1.这里可能会花较长时间,并不是因为卡死了。 注意:2.重启虚拟机的时候记得禁用驱动程序强制签名。(或者使用testsigning)
4、进入桌面后,虚拟机可以正常操作。在VS2019中按下 全部中断 5、等待VS停下来,并出现以下画面,再点击 继续。(先暂停再继续,否则可能断不下来)。 注意:如果VS很长时间都没有响应,可以用任务管理器结束VS,然后重新打开再附加到进程。
6、此时就可以设置断点了
7、后面,同单机一样,用驱动加载工具安装驱动即可。 3.2 windbg远程调试 工具:windbg或win10商店的windbg preview(推荐) 1、Attach to kernel、配置com信息 2、重启虚拟机 3、配置符号文件路径 4、open source 5、下断点
  • break
  • 强制加载符号文件:.load /i KMDFDriver1.sys
  • 下断点:bp KMDFDriver1!DriverUnload
  • 继续运行:g
  • 在虚拟机加载驱动,触发相关过程,即可被断
注:
  • cpp源文件乱码:源码保存为utf8-bom模式
  • 断点位置不正确:确保pdb、cpp、sys文件编译版本一致
  • 断点时机:需要已经加载驱动,再下断点
四、QA Q1: 编译时出现error MSB8040: 此项目需要缓解了 Spectre 漏洞的库 原因:这是因为Visual Studio默认开启了缓解Spectre攻击的机制,所以就有两种解决方案,一种是生成解决方案时禁用Spectre缓解机制,另一种就是安装Spectre缓解机制。 a) 禁用Spectre机制:  右键解决方案,然后选择“属性”,然后选择“配置属性”——“C/C++”——“代码生成”,在最下方有一项Spectre缓解,下拉选择“禁用“就行了 b) 安装Spectre缓解机制:如下:
  • 打开Visual Studio Installer,点击修改
  • 选择单个组件,选择Spectre缓解库(最新),其中“最新”对应的为你的MSVC编译版本。点击修改完成安装
Q2:error 1297: Device driver does not install on any devices, use primitive driver if this is intended. 参考: Win10下VS2019双机调试之调试驱动 VS2019社区版--WDK-win10-2004开发环境搭建 Windows内核驱动开发:HelloWorld
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/860597.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号