当前位置: 首页 > news >正文

Windows驱动开发

开发Windows驱动程序时,debug比较困难,并且程序容易导致系统崩溃,这时可以使用Virtual Box进行程序调试,用WinDbg在主机上进行调试。

需要使用的工具:

Virtual Box:用于安装虚拟机系统,用于运行待测试的驱动程序;
Windows WDK: 需要和windows版本、Visual Studio SDK版本和WDK版本要完全一致。
WinDbg preview:在微软应用商店安装;
OSR Driver Loader:用于加载待调试的Windows驱动程序,需要禁用虚拟机的数字签名(https://www.osronline.com/article.cfm%5earticle=157.htm)

配置虚拟机和WinDbg:
  1. 首先进入虚拟机系统中,以administrator模式执行cmd,

输入bcdedit /debug on以及bcdedit /dbgsettings serial debugport:1 baudrate:11520;
也可以通过界面来配置
在这里插入图片描述

  1. 配置虚拟机系统的com1口为管道和主机进行通信,接着关闭虚拟机系统。

在Virtual Box的Settings->Serial Ports设置Port:COM1, Port Mode: Host Pipe,取消勾选Connect to existing pipe/socket, Path/Address: \.\pipe\com1
在这里插入图片描述

  1. 启动主机的WinDbg程序

打开file->Kernel Debug->选择COM口,勾选Pipe,Reconnect, Port改为\.\pipe\com1
在这里插入图片描述

启动测试模式
  1. Windows开启测试模式
    以管理员模式启动cmd,输入以下命令:

开启系统的测试模式 bcdedit /set testsigning on
开启操作系统内核调试 bcdedit /debug ON
开启应用程序调试 bcdedit /bootdebug ON

重启,重启后一般在电脑右下角会显示测试模式等字样,个人更偏向与使用此方式

  1. 启动禁用数字签名
    以管理员模式运行cmd执行如下命令:

禁用签名 bcdedit.exe /set nointegritychecks on
恢复签名 bcdedit.exe /set nointegritychecks off

编写一个简单的Windows驱动程序:

编写之前需要配置一下项目的VS配置。

#include <ntddk.h>VOID DriverUnload(PDRIVER_OBJECT pDriverObject) {DbgPrint("goodbye!\n");
}NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath) {DbgPrint("Hello, haidragon\n");pDriverObject->DriverUnload = DriverUnload;return STATUS_SUCCESS;
}
驱动安装和测试

使用OSR Driver Loader安装驱动和测试
使用dbgview工具查看驱动打印的日志,配置如下:

在这里插入图片描述

http://www.lryc.cn/news/103349.html

相关文章:

  • 汽车分析,随时间变化的燃油效率
  • 大数据面试题之Elasticsearch:每日三题(六)
  • 【管理设计篇】聊聊分布式配置中心
  • 远程控制平台简介
  • 韦东山Linux驱动入门实验班(5)LED驱动---驱动分层和分离,平台总线模型
  • 【雕爷学编程】MicroPython动手做(02)——尝试搭建K210开发板的IDE环境
  • C#——Thread与Task的差异比较及使用环境
  • 刷题 31-35
  • 【mysql】—— 数据类型详解
  • kafka常用命令
  • 数字图像处理(番外)图像增强
  • flutter:轮播
  • 高忆管理:股票投资策略是什么?有哪些?
  • 为公网SSH远程Ubuntu配置固定的公网TCP端口地址主图
  • 【前端知识】React 基础巩固(四十一)——手动路由跳转、参数传递及路由配置
  • Qt几种字符类型的相互转换
  • 软件测试员的非技术必备技能
  • 渗透测试:Linux提权精讲(二)之sudo方法第二期
  • ansible安装lnmp(集中式)
  • Tomcat的基本使用,如何用Maven创建Web项目、开发完成部署的Web项目
  • 微信小程序测试要点
  • TCP网络通信编程之netstat
  • Stable Diffusion:网页版 体验 / AI 绘图
  • 一文了解JavaScript 与 TypeScript的区别
  • 从更广阔的角度看待产业互联网,它展现的是一次重构的过程
  • 【PHP】简记问题:使用strtotime(‘-1 month‘, time)获取上个月第一天时间戳出错
  • 舌体分割的初步展示应用——依托Streamlit搭建demo
  • 从Vue层面 - 解析发布订阅模式和观察者模式区别
  • 面向对象之_多态_1
  • Spring学习笔记之spring概述