windows driver双机调试环境搭建,用windbg或者debug view查看内核调试输出

2023-11-14

本地环境

  • 本地开发环境: win 10, visual studio installer(2022版), visual studio 2022, VMware player
  • 目的:本地环境作为开发环境,VM作为测试和调试环境
  • 用debug view查看内核调试输出请直接看最后 debug view查看内核打印信息 部分

开发环境搭建

WDK.vsix路径在C:\Program Files (x86)\Windows Kits\10\Vsix\VS2019 或者 C:\Program Files (x86)\Windows Kits\10\Vsix。
这个插件的版本和visual studio的版本要对应,最新的WDK(windows 10 版本)的插件对应的只能安装在visual studio 2019

调试/测试环境搭建

需要设置网络连接方式为桥接
需要删除打印机(如果有的的话)
需要添加一个串行端口,并设置命名管道属性和开启CPU轮询

注意:
	VMware player创建命名端口后,启动虚拟机可能会提示 serial0: Unable to create the server-side instance of the "***" named pipe: The filename, directory name, or volume label syntax is incorrect.
	这可能因为管道的名称格式不对,我试了下设置成\\.\pipe\com<数字>的格式(比如 \\.\pipe\com1)成功了,网上有人设置成.\pipe\com<数字>也成功了
  • VM安装上面下载的WDK
  • 安装驱动开发平台对应的目标安装MSI,详细参考
如果构建的driver是基于x64平台,则msi路径如下:
C:\Program Files (x86)\Windows Kits\10\Remote\x64\WDK Test Target Setup x64-x64_en-us.msi

安装这个msi是后面visual studio部署要用,不安装的话用visual studio部署会失败
  • VM添加debug启动项, 参考,设置完成后windows搜索栏输入msconfig找到System Configuration应用,进入应用后点Boot项查看修改的结果
以管理员身份打开CMD, 依次输入以下命令
bcdedit
bcdedit /dbgsettings serial baudrate:115200 debugport:1  
bcdedit /copy {current} /d DebugEntry  
	这个命令会生成一串GUID,保存这个GUID,后面的ID用此GUID替换
bcdedit /displayorder {current} {ID} 
bcdedit /debug {ID} ON  

  • 设置VM的内核dbg信息输出级别
打开windows Registry editor, 修改注册信息:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter
如果没有这个key就添加这个key
在这个key下添加或修改 “DEFAULT" (是DWORD 类型,32位或64位应该无关),值为 0xffffffff

开发driver并部署到VM

首次部署target device列表是空的需要添加device,添加device时,display name可以随便写,Network host name填VM的ip地址。
填完后一直点next,等visual studio自动准备好target(也就是VM)的环境,然后点finish完成设备添加,回到部署对话框。
部署对话框中要添加hardware ID, 这个id在生成inf文件中,我的文件中内容是:
[Standard.NTamd64]
%hello_driver.DeviceDesc%=hello_driver_Device, Root\hello_driver ; TODO: edit hw-id
其中amd64表示开发平台因为我构建设置的平台是x64,Root\hello_driver就是hardware ID
  • VM安装driver
VM上以管理员身份运行CMD,输入以下命令:
C:\Program Files (x86)\Windows Kits\10\Tools\x64\devcon.exe <INF file path> <hardware ID>

INF文件 一般在C:\DriverTest\Drivers, hardware ID就是上面提到的hardware ID。这种安装方式是hello world教程里提供的,不同的driver有不同的安装方式。
如果INF文件提供了DefaultInstall属性,可以直接右键点击INF文件然后点击安装。
  • 启动driver
启动方式和INF文件里StartType的配置有关,此项配置在Services Section里配置。

如果配置的是SERVICE_DEMAND_START,则需要手动启动driver。以filter driver为例,启动命令是:FLTMC load [ driverName ]

windg连接VM进行调试

  • 按照上述步骤VM环境搭建完成并安装了driver
  • 本地主机执行命令
windbg.exe -y <pdb file path> -k com:pipe,port=\\.\pipe\com1,resets=0,reconnect

执行成功windgb会显示等待连接

  • 重启VM,windbg就可以成功连接了,至此就可以看到内核打印的信息了。

debug view查看内核打印信息

debug view 查看debug信息是更简单方便的信息,用搜狗或者百度去查找debug view下载地址结果都是华军软件软之类的下载站。
直到一次用Bing搜索才发现微软提供了debug view下载。唉,国内的搜索引擎真的毁人青春。
  • 设置VM的内核dbg信息输出级别,参考上面 调试/测试环境搭建
  • 在VM上以admin权限运行debug view,然后点顶部menu里的capture kernel(快捷键 Ctrl + k)就能看到内核 debug 打印信息了
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

windows driver双机调试环境搭建,用windbg或者debug view查看内核调试输出 的相关文章

  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • Qt 支持 Windows 蓝牙 API 吗?

    谁能告诉我 Qt 是否支持 Windows 蓝牙 API 如果是这样 您能否分享一些有关如何使用它的信息 自上次答复以来 这个问题的答案发生了一些变化 Qt 5 2 版为 Linux BlueZ 和 BlackBerry 设备实现了蓝牙 A
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 在 Windows 上不使用 OpenSSL 从 pfx 文件或证书存储中提取私钥

    正如标题所示 我想在不使用 OpenSSL 或任何其他第三方工具的情况下导出我的私钥 如果我需要一个 cer文件或 pfx我可以通过 MMC 或 PowerShell 轻松导出这些文件pkiclient但我找不到获取私钥的方法 https
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 如何将 GIT 调用的输出获取到批处理脚本中的变量中?

    我有一个 git 命令来获取当前存储库的最新 SHA 如下所示 git log pretty format H n 1 我有一个 Windows 批处理脚本 我想按如下方式使用它 SET CURRENT SHA 但我不知道如何将从 git
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • ubuntu重启后分辨率为1024,nvidia-smi不能用-20200819

    无法连接NVIDIA驱动 NVIDIA SMI has failed because it couldn t communicate with the NVIDIA driver CASE SOLVED NVIDIA SMI has fai
  • Postgresql 常用命令合集-建议收藏

    ps 注意空格和指令正确 以下仅用于自己记录使用 1 基本命令 createdb 创建一个新的PostgreSQL的数据库 命令可以使用大写 createuser 创建一个新的PostgreSQL的用户 dropdb 删除数据库 dropu
  • mssql数据库,数据库同步,分布式数据库,数据库集群,如何实现

    由于项目需要 产品的部署必须考虑到安全和灾难的解决办法 由于之前一直做的的小项目 基本都是单服务器 单数据库结构 但是由于一次灾难 把这个问题提上了日程 本人资历浅薄 很多东西还不是很熟悉 最近在网上百度了一大堆相关的东西 基本有了大概的思
  • 玩转Jetson nano系列(1):Jetson nano编译安装ncnn

    整个安装流程基本按照官方的步骤 build ncnn for jetson 但是在jetson nano上安装时 遇到了glslang和vulkan引发的问题 Found glslangValidator GLSLANGVALIDATOR
  • strptime和strftime

    strptime 将时间字符串转为 struct tm 格式 头文件 include
  • TortoiseGit日常使用指南

    本文在介绍了软件安装和设置后 写了TortoiseGit 常用的一些功能 包括 创建新库 添加文件及文件夹 创建分支 看分支情况及修改log 比较版本差异 合并分支 其他操作 Stash 忽略文件本文不包括 Git 服务器设置 Push 版
  • 预见未来:超强元AI诞生,抓住这个机会,利用AI变现也变得更加容易

    目录 一 引言 二 介绍 三 技术展现 四 元AI架构图展现 五 元AI变现技巧 商业版说明 六 后期规划 一 引言 如何利用AI变现已经成为了当今各个行业亟需解决的问题 随着人工智能技术的快速发展和普及 越来越多的企业开始将其应用于产品研
  • 微信小程序地理位置接口wx.getLocation接口申请方法技巧

    我们在开发微信小程序的时候 提交审核微信官方就会检测咱们的小程序有没有用到位置功能 涉及用到哪个位置接口 然后就会要求我们先申请相应的位置接口 审核通过后才可以发布小程序 这个接口审核一直是让大家头痛的事情 有的小伙伴申请几十次都不给过 有
  • vue防抖 自定义ref实现输入框防抖

    防抖 debounce 当持续触发事件时 一定时间段内没有再触发事件 事件处理函数才会执行一次 如果设定的时间到来之前 又一次触发了事件 就重新开始计时 接下来我将带大家一步步分析如何把input防抖做到极致 首先需要把input 的双向绑
  • Web前端开发实训案例教程(初级)素材

    素材下载地址 Web前端开发实训案例教程 初级 素材 内容简介 本书是按照 Web前端开发职业技能等级标准 编写的配套实践教程 其中涉及的应用技术专题和项目代码均在主流浏览器中运行通过 本书结合大学计算机相关专业Web前端开发方向课程体系
  • windows下用cygwin编译android版ijkplayer

    1 环境搭建 1 1 安装cygwin 并安装git make ysam 具体安装过程网上有很多资料 不再详述 1 2 android sdk和android ndk下载和安装 参见网上资料 1 3 下载ijkplayer源码 git cl
  • 【StyleGAN补充材料】 A Style-Based Generator Architecture for Generative Adversarial Networks

    Supplemental Material A Style Based Generator Architecture for Generative Adversarial Networks 一 前言 1 Hyperparameters an
  • latex解决×叉符号(乘符号)如何打

    简单实用 直接取走 times times
  • 抽样技术--不等概率抽样

    文章目录 不等概抽样 放回不等概抽样 只抽取一个样本单元的不等概抽样 估计量 有放回不等概整群抽样 两阶段有放回不等概抽样 多阶段有放回不等概抽样 不放回不等概抽样 两阶段不放回不等概抽样 不等概抽样 提高估计精度 放回的PPS抽样简化方差
  • 无重复字符的最长字串

    给定一个字符串 s 请你找出其中不含有重复字符的 最长子串 的长度 示例 1 输入 s abcabcbb 输出 3 解释 因为无重复字符的最长子串是 abc 所以其长度为 3 示例 2 输入 s bbbbb 输出 1 解释 因为无重复字符的
  • Zabbix监控服务详解+实战

    目录 一 监控体系概述 1 为什么需要监控 2 监控目标与流程 1 监控的目标 2 监控的流程 3 监控的对象 1 CPU监控 2 磁盘监控 3 内存监控 4 网络监控 5 系统重要进程监控 6 应用服务监控 7 硬件设备监控 8 安全监控
  • 【elasticsearch】memory locking requested for elasticsearch process but memory is not locked

    解决方法 开启bootstrap memory lock 修改文件 etc elasticsearch elasticsearch yml 上面那个报错就是开启后产生的 如果开启还要修改其它系统配置文件 bootstrap memory l
  • 【并发编程】Python多线程、多进程、多协程入门篇

    文章目录 1 基础概念 2 并发编程如何选择 2 1 CPU IO密集型计算 2 2 多线程 多进程 多协程对比 3 Python运行速度根因分析 3 1 速度慢两大原因 3 1 GIL 4 多线程 4 1 Python多线程基础爬虫 4
  • k8s ingress详解(1)

    ingress 是除了 hostport nodeport clusterIP以及云环境专有的负载均衡器外的访问方式 官方提供了Nginx ingress controller 通常情况下 service和pod的IP可以被集群网络访问 外
  • windows driver双机调试环境搭建,用windbg或者debug view查看内核调试输出

    本地环境 本地开发环境 win 10 visual studio installer 2022版 visual studio 2022 VMware player 目的 本地环境作为开发环境 VM作为测试和调试环境 用debug view查