windows驱动开发3:第一个驱动及调试
一、创建项目
#include <ntddk.h>
// 提供一个Unload 函数只是为了让这个程序能够动态卸载,方便调试
extern "C" void DriverUnload(PDRIVER_OBJECT driver)
{
// 但是实际上我们什么都不做,只打印一句话
DbgPrint("hello: my driver is unloading...\r\n");
}
// DriverEntry,入口函数。相当于main。
extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{
// 这是内核模块入口,可以在这里写入我们想写的东西
DbgPrint("hello: my world!");
// 设置一个卸载函数,便于这个函数退出
driver->DriverUnload = DriverUnload;
return STATUS_SUCCESS;
}
|
|
二、编译及测试
- 根据目标机器,选择x86/x64编译
- 拷贝:KMDFDriver1.sys、KMDFDriver1.cer、KMDFDriver1.inf到测试机器
- 测试机器打开驱动测试(驱动需要正规签名才能使用,而测试程序没有签名)
bcdedit /debug on
bcdedit /bootdebug on // boot 驱动需要此设置
bcdedit /set testsigning on // 使用测试签名可用,和禁用签名功能类似
|
- 测试机器打开debugview,需要配置收集内核驱动信息
- 利用驱动加载工具,安装驱动
|
- 安装服务后,启动和停止驱动,即可看到对应的调试信息。至此完成第一个驱动demo
|
三、远程调试
3.1 VS2019 远程调试
|
|
|
|
|
3.2 windbg远程调试
- break
- 强制加载符号文件:.load /i KMDFDriver1.sys
- 下断点:bp KMDFDriver1!DriverUnload
- 继续运行:g
- 在虚拟机加载驱动,触发相关过程,即可被断
- cpp源文件乱码:源码保存为utf8-bom模式
- 断点位置不正确:确保pdb、cpp、sys文件编译版本一致
- 断点时机:需要已经加载驱动,再下断点
四、QA
- 打开Visual Studio Installer,点击修改
- 选择单个组件,选择Spectre缓解库(最新),其中“最新”对应的为你的MSVC编译版本。点击修改完成安装
windows驱动开发3:第一个驱动及调试相关推荐
- Linux嵌入式驱动开发01——第一个驱动Hello World(附源码)
文章目录 全系列传送门 引言 驱动介绍 Hello World 1. 包含头文件 2. 驱动模块的入口和出口 3. 声明信息 4. 功能实现 完整代码 编译 第一种方法 第二种方法 编译成模块 第一步 ...
- STM32MP157驱动开发——多点电容触摸屏驱动
STM32MP157驱动开发--多点电容触摸屏驱动 一.简介 二.电容触摸屏驱动框架简介 多点触摸(MT)协议详解 三.驱动开发 1.添加 FT5426 设备节点 2.FT5426 节点配置 3.驱动 ...
- STM32MP157驱动开发——Linux块设备驱动
STM32MP157驱动开发--Linux块设备驱动 一.简介 二.驱动开发 1.使用请求队列的方式 2.测试① 3.不使用请求队列的方式 4.测试② 参考文章:[正点原子]I.MX6U嵌入式Linu ...
- Linux SD卡驱动开发(五) —— SD 卡驱动分析Core补充篇
Core层中有两个重要函数 mmc_alloc_host 用于构造host,前面已经学习过,这里不再阐述:另一个就是 mmc_add_host,用于注册host 前面探测函数s3cmci_probe, ...
- Linux驱动开发(外传)---驱动开发调试方法
前文回顾 <Linux驱动开发(一)-环境搭建与hello world> <Linux驱动开发(二)-驱动与设备的分离设计> <Linux驱动开发(三)-设备树> ...
- i.MX 6ULL 驱动开发 六:beep 驱动
一.原理分析 通过原理图可以确定 beep 连接到 SNVS_TAMPER1 引脚上.根据 beep 原理,当 SNVS_TAMPER1 输出低电平时,beep 鸣叫. 通过数据手册确定 SNVS_T ...
- Linux驱动开发:字符设备驱动开发实战
Linux驱动开发:字符设备驱动开发实战 一.工程创建 VSCode 创建工程,设置 C/C++ 配置,导入 linux kernel 源码目录,方便 vscode 写代码自动补全,vscode 配置 ...
- Linux下驱动开发_块设备驱动开发(硬件上采用SD卡+SPI协议)
一.前言 块设备主要为存储设备设计的框架. 在前面章节Linux下驱动开发_块设备驱动开发(内存模拟存储) 里介绍了块设备驱动编写思路,并且利用内存模拟了硬件存储,完成了块设备驱动开发测试.这一篇文章 ...
- Windows驱动开发之第一个驱动程序
转载请注明来源: enjoy5512的博客 : http://blog.csdn.net/enjoy5512 GitHub : https://github.com/whu-enjoy 为了整理方便, ...
- 关于《竹林蹊径 深入浅出Windows驱动开发》第一个例子在Win7下蓝屏
在尝试运行<竹林蹊径 深入浅出Windows驱动开发>的第一个例子-HelloDRIVER时,在XP下没有问题,但在Win7下却发生蓝屏,蓝屏发生点在于卸载函数DriverUnload. ...
最新文章
- 公开课 | 详解CNN-pFSMN模型以及在语音识别中的应用
- iframe引用页面中的js操作父窗口标签
- HTML5 + CSS 左右排版自适应高
- java ioexception异常_12. Java IO: 异常处理
- leetcode算法题解(Java版)-16-动态规划(单词包含问题)
- matlab ann-bp分类器,利用matlab真的BP-ANN分类器设计.doc
- java中的过滤器:Filter
- oracle获取去年年份_「实战」中文检错纠错之语料获取与处理
- mysql导出数据大概得多久_MySQL 导出数据
- 南阳oj-----一种排序(set)
- 考研和找工作都可以用的简历模板百度网盘链接
- metro样式开机启动菜单_如何在Windows 8中获取Metro风格的开始菜单和开始按钮
- 超实数系统的单子(Monad)结构
- The Evils of Duplication
- android 出生日期设置,android-选择出生日期对话框
- 未定义标识符ULONG_PTR,BOOL等错误解决方法
- 基于LSTM网络的视觉识别研究与实现——详细版
- 算法:初探12306售票算法。
- 【Qt】QML快速入门7——输入元素
- 如何让你pycharm用起来更舒服,看起来更美观
热门文章
- Java基于JSP的高校教材管理系统
- js根据不同证件进行校验
- 西门子S7-1200PLC脉冲控制伺服程序
- ERROR: Timeout after 10 minutes ERROR: Error fetching remote repo 'origin'
- java毕业设计电力公司员工安全培训系统Mybatis+系统+数据库+调试部署
- LinuxShell编程-脑洞实验-脚本小程序
- Java:图书管理系统
- windows 下 c++ 快速截屏
- 二叉树的二叉链表表示与基本操作
- [北京]华兴资本招聘初级全栈工程师 (junior full stack developer)