使用Prefast测试驱动问题
摘要: Prefast是MS开发的一个测试驱动代码的小工具,
它的作用是尽早找出代码中常的BUG.
在编译时参与进来查找BUG.
阅读全文
posted @
2009-01-21 11:52 水 阅读(1618) |
评论 (0) 编辑
驱动调试的一般性技巧
摘要: 一般性调试技巧包括打印调试信息、查看dump文件等。这些方法在调试驱动中比较常见,使用也比较简单。
阅读全文
posted @
2009-01-15 15:31 水 阅读(3663) |
评论 (2) 编辑
驱动调试的几个细节问题IRQL_NOT_LESS_OR_EQUAL
摘要: 今天在调试驱动的时候,发现一个开始觉得很奇怪的问题,就是调用RtlStringCbPrintfW函数来格式化WCHAR字符串时,一定蓝屏,提示
IRQL_NOT_LESS_OR_EQUAL,并且比较郁闷的是,在虚拟机上有时不会出现,有时会出现,但在真正的主机上一定会出现(Windows xp sp2)。
一般出现IRQL_NOT_LESS_OR_EQUAL,是IRQL在级别高的地方调用了分页内存,所以,我就想到把当前的IRQL打出来看看,发现在进入函数
的时候,当前的IRQL是0(PASSIVE_LEVEL),而在执行这段代码的地方,IRQL是2(DISPATCH_LEVEL),是什么原因使得IRQL发生了变化呢?
仔细查看代码后,发现了原因,因为在执行这段代码之前,通过NdisAcquireSpinLock获取旋转锁,而在旋转锁释放之前,其中的代码是跑在
IRQL=2的,另外,RtlStringCbPrintfW需要处理分页内存(PagedPool),但在IRQL=2的情况下,是只能处理非分页内存的(NonpagedPool),所以,
阅读全文
posted @
2009-01-14 17:05 水 阅读(4994) |
评论 (0) 编辑
NDIS 中间层驱动(IM Driver)的安装与卸载过程
摘要: 中间层驱动对上层来说,扮演一个Miniport Driver的角色,它在上边沿向NDIS注册一组Miniportxxx函数;对于下层Miniport Driver来说,中间层驱动扮演一个Protocol Driver的角色,因此它在下边沿向NDIS注册一组Protocolxxx函数。Miniport Driver通过调用NdisMRegisterMiniport向NDIS注册一组MiniportXxx函数;Protocol Driver 通过调用 NdisRegisterProtocol向NDIS注册一组ProtocolXxx函数。
阅读全文
posted @
2009-01-12 15:35 水 阅读(5378) |
评论 (3) 编辑
使用WinDbg和VMware调试NDIS中间层驱动程序
摘要: 我这里将一步一步的介绍,是从新手的角度来讲的,所以对高手来说,可能有些啰嗦。如果你看完这篇文章还不知道如何设置,那么原因可能有两个:1. 我没讲好;2. 你需要稍微认真看下并实践下,并实现对相关基本概念要有所了解。
阅读全文
posted @
2009-01-04 16:36 水 阅读(5786) |
评论 (4) 编辑