Windows7驱动调试小Tips
v:* { }
o:* { }
w:* { }
.shape { }p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; font-size: 10.5pt; font-family: "Calibri", "sans-serif" }
p.MsoHeader,li.MsoHeader,div.MsoHeader { margin: 0cm; margin-bottom: .0001pt; text-align: center; border: none; padding: 0cm; font-size: 9.0pt; font-family: "Calibri", "sans-serif" }
p.MsoFooter,li.MsoFooter,div.MsoFooter { margin: 0cm; margin-bottom: .0001pt; font-size: 9.0pt; font-family: "Calibri", "sans-serif" }
p.MsoAcetate,li.MsoAcetate,div.MsoAcetate { margin: 0cm; margin-bottom: .0001pt; text-align: justify; font-size: 9.0pt; font-family: "Calibri", "sans-serif" }
span.Char { }
span.Char0 { }
span.Char1 { }
span.SpellE { }
span.GramE { }
.MsoChpDefault { }
div.WordSection1 { }table.MsoNormalTable { font-size: 10.5pt; font-family: "Calibri", "sans-serif" }
Windows7驱动调试小Tips
0x01
在Windows7下面(包括Win7的64位系统)调试驱动时会发现DbgPrint(DbgPrint使用方法参考[1])打印的内容并没有在DbgView里面显示出来,但是你可能有若干证据表明,相关代码肯定已经运行过了。使用Windbg进行双击调试时也没有内容打印在调试器里面。其实文档[2]里面已经有说明了:
In Microsoft Windows Server 2003 andearlier versions of Windows, the DbgPrint and KdPrint routines send messages to the kernel debuggerunconditionally. In Windows Vista and later versions of Windows, these routinessend messages conditionally, like DbgPrintEx and KdPrintEx. Whichever version of Windows you are using, youshould use DbgPrintEx, vDbgPrintEx,vDbgPrintExWithPrefix, and KdPrintEx,because these routines enable you to control the conditions under which themessage is sent.
简言之,就是系统对这种调试信息的输出设置了限制。
要解除这种限制(当然主要是开发人员为了调试的方便),更改(增加)如下的注册表信息即可解决。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug PrintFilter]
"DEFAULT"=dword:0000000f
使用注册表导入的方式,可能导入失败,建议查看下是否在对应的注册表位置是否已经建立了相关的键值,或者干脆手工输入,也很简单。
0x02
从Vista开始(当然我们主要关注Windows7),系统要求驱动程序都必须有数字签名,否则无法正常使用,普通目录下的驱动如果没有签名,直接加载失败,而boot型的驱动,如果之前是有签名的,你替换成无签名的,那么重启之后直接会进入系统文件修复给你修复成原来的文件。这对于开发人员来说非常不方便。有两个解决方案:
a、进去系统时,按下F8进入Window7的启动选择模式,选择“禁用驱动程序签名强制”或者“调试模式启动”,本次有效。
b、使用windbg双机联调模式时,“驱动程序签名强制”是禁用的。
c、网上的方案,把驱动签名强制要求直接关闭,通过管理员权限启动CMD,然后输入命令:bcdedit.exe -set loadoptionsDDISABLE_INTEGRITY_CHECKS 使用这种方式之后是一直生效的,系统安全性会打折扣,虚拟机就无所谓,如果是真机,建议适当的时候再打开。可以简单删除即可,运行命令:bcdedit -deletevalue loadoptions。其实可以EasyBCD工具来修改(原理一样)。不过需要注意的是我在win7 x64 sp1系统用这种方式来测试,从来没成功过,后来查了下是因为装了SP1(或者某些补丁)之后,会导致该方法失效。
d、bcdedit.exe -setTESTSIGNING ON,该方法有副作用,会在桌面留水印,同时还有和c方案同样的问题。
0x03
设置虚拟机下的Win7或者Win8系统(包括他们的x64位系统)双机调试时,要添加一个串口设备,因为虚拟机硬件配置里面的打印机设备占用了第一个串口设备,因此你新添加的串口设备实际上用的是COM2端口了,这个时候用windbg去连接,会提示无法打开连接端口,这个与WMWare的版本有关系,说说怎么解决吧。至少有两个解决方案。
a、把打印机设备删除之后,再添加串口设备,这时你会发现新添加的串口设备是1了,终于可以愉快的调试了(注意:和命令管道名并没有什么关系,这个是可以修改的,只要和windbg的配置一致就可以了)。
b、我不想删除打印机设备,就用串口2,那么你需要进虚拟机系统,在添加或者修改引导项时把调试端口修改为COM2,也是可以的,修改方法可以通过msconfig直观的修改,也可以通过bcdedit命令修改(bcdedit /dbgsettings serial baudrate:115200 debugport:2)。
参考文档
[1] DbgPrintroutine http://msdn.microsoft.com/en-us/library/windows/hardware/ff543632(v=vs.85).aspx
[2] Reading and Filtering DebuggingMessages http://msdn.microsoft.com/en-us/library/windows/hardware/ff551519(v=vs.85).aspx#example
[3] Getting DbgPrintOutput To Appear In Vista and Laterhttp://www.osronline.com/article.cfm?id=295
[4] 使用DbgPrint打印字符串和其他http://blog.csdn.net/misterliwei/article/details/3559793
[5] wdk搞死我了求救http://bbs.csdn.net/topics/390539963
[6] Windows7+WDK+VS2010+VisualDDK驱动开发环境搭建http://wenku.baidu.com/view/7f74b0e49b89680203d825f4.html
Windows7驱动调试小Tips的更多相关文章
- 驱动调试(三)oops确定函数PC
目录 驱动调试(三)oops确定函数PC 什么是oops 流程简述 代码仓库 模块例子分析 找到PC值 判断是否属于模块 查看符号表 找到模块 反汇编模块 内核例子分析 找到PC值 判断是否属于模块 ...
- Android驱动调试利器Busybox之初体验
工欲善其事必先利其器,之前做WinCE开发时,经常写一些小工具以提高开发调试的效率,如WinCE驱动调试助手.WinCE串口调试助手.WinCE6.0寄存器访问工具.WinCE远程桌面助手和S3C24 ...
- [windows驱动]windows8.1驱动调试前戏
人们都说在干正事之前,得先做足前戏才会爽,我一直很认同这个观点,下面我来总结下进行windows8.1的WDK调试所要做的准备工作. 软件安装: 1.VS2013. 2.WDK8.1 3.Window ...
- 【转】Android LCD(四):LCD驱动调试篇
关键词:android LCD TFTSN75LVDS83B TTL-LVDS LCD电压背光电压 平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台 ...
- 【旧文章搬运】Windbg+Vmware驱动调试入门(一)---Windbg的设置
原文发表于百度空间,2009-01-08========================================================================== Windb ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十四)——开发环境容器调试小技巧
之前有很多同学提到如何做容器调试,特别是k8s环境下的容器调试,今天就讲讲我是如何调试的.大家都知道在vs自带的创建项目模板里勾选docker即可通过F5启动docker容器调试.但是对于启动在k8s ...
- 前端必备,5大mock省时提效小tips,用了提前下班一小时
一.一些为难前端的业务场景 在我的工作经历里,需要等待后端童鞋配合我的情形大概有以下几种: a.我们跟外部有项目合作,需要调用到第三方接口. 一般这种情况下,商务那边谈合同,走流程,等第三方审核, ...
- HTML meta锚点跳转 小tips
小tips meta锚点跳转 http://www.zhangxinxu.com/wordpress/2015/03/meta-http-equiv-refresh-content/
- Linux驱动设计—— 驱动调试技术
参考博客与书籍: <Linux设备驱动开发详解> <Linux设备驱动程序> http://blog.chinaunix.net/uid-24219701-id-2884942 ...
随机推荐
- 使用maven执行单元测试总结
maven本身没有单元测试框架,但是maven的default生命周期的test阶段绑定了maven-surefire-plugin插件,该插件可以调用Junit3.Junit4.TestNG等Jav ...
- Android底部导航栏
Android底部导航栏 今天简单写了一个底部导航栏,封装了一个库,用法比较简单 效果图 Github地址:https://github.com/kongqw/KqwBottomNavigation ...
- SpriteKit关于SKScene中的渲染Loop
在本节中,我将来说明一下SKScene在SKView显示之后发生了神马. 在更传统的iOS app中,你可能只会渲染view的内容仅仅一次,然后它将保持静态直到view的模式发生了显示的改变,这对于商 ...
- 剑指Offer——好未来视频面知识点储备+面后总结
剑指Offer--好未来视频面知识点储备+面后总结 情景介绍 时间:2016.10.12 13:00- 地点:宿舍 事件:好未来视频面 知识点储备 数据结构 单链表反转 public class Li ...
- Gazebo機器人仿真學習探索筆記(五)環境模型
環境模型構建可以通過向其中添加模型實現,待之後補充,比較有趣的是建築物模型, 可以編輯多層樓層和房間,加入樓梯,窗戶和牆壁等,具體可以參考附錄,等有空再補充. 起伏地形環境構建可以參考之前內容:在Ga ...
- linux下查看Memcached运行状态
查看Memcached运行状态的命令是:echo stats | nc 127.0.0.1 11211 查看memcached状态的基本命令,通过这个命令可以看到如下信息: STAT pid 2245 ...
- unix os下du df简单用法
转自:http://dadoneo.iteye.com/blog/984963 du命令参数详解见:http://baike.baidu.com/view/43913.htm 下面我们只对其做简单介绍 ...
- (NO.00004)iOS实现打砖块游戏(十五):导弹发射道具的实现(上)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上一篇中我们实现了3球道具,但是好像还是不过瘾,如果能让反弹棒更 ...
- 关于"net::ERR_CONNECTION_ABORTED"和"Firebug 达到了 Post 请求大小限制"的问题
1.其中"net::ERR_CONNECTION_ABORTED"是在Chrome的控制台中打印出来的. 2."Firebug 达到了 Post 请求大小限制" ...
- listview下拉刷新上拉加载扩展(三)-仿最新版美团外卖
本篇是基于上篇listview下拉刷新上拉加载扩展(二)-仿美团外卖改造而来,主要调整了headview的布局,并加了两个背景动画,看似高大上,其实很简单: as源码地址:http://downloa ...