﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-aurain-随笔分类-windows驱动</title><link>http://www.cppblog.com/aurain/category/9258.html</link><description>专注Windows下的驱动开发、网络开发</description><language>zh-cn</language><lastBuildDate>Sat, 03 Sep 2011 12:29:20 GMT</lastBuildDate><pubDate>Sat, 03 Sep 2011 12:29:20 GMT</pubDate><ttl>60</ttl><item><title>IRP中I/O堆栈Parameters.Create参数</title><link>http://www.cppblog.com/aurain/archive/2011/09/01/154875.html</link><dc:creator>水</dc:creator><author>水</author><pubDate>Thu, 01 Sep 2011 07:27:00 GMT</pubDate><guid>http://www.cppblog.com/aurain/archive/2011/09/01/154875.html</guid><wfw:comment>http://www.cppblog.com/aurain/comments/154875.html</wfw:comment><comments>http://www.cppblog.com/aurain/archive/2011/09/01/154875.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aurain/comments/commentRss/154875.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aurain/services/trackbacks/154875.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: IRP中I/O堆栈Parameters.Create参数<br>在IO_STACK_LOCATION结构体中，Parameters这个union其中有个Create结构体，对应IRP_MJ_CREATE，此IRP的分发函数处理应用层的CreateFile函数，<br>CreateFile函数进入内核后是调用ZwCreateFile<br>在ZwCreateFile中设置的一些参数，在Parameters.Create中可以获取到。&nbsp;&nbsp;<a href='http://www.cppblog.com/aurain/archive/2011/09/01/154875.html'>阅读全文</a><img src ="http://www.cppblog.com/aurain/aggbug/154875.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aurain/" target="_blank">水</a> 2011-09-01 15:27 <a href="http://www.cppblog.com/aurain/archive/2011/09/01/154875.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UNICODE_STRING使用小提示</title><link>http://www.cppblog.com/aurain/archive/2011/08/22/154051.html</link><dc:creator>水</dc:creator><author>水</author><pubDate>Mon, 22 Aug 2011 02:16:00 GMT</pubDate><guid>http://www.cppblog.com/aurain/archive/2011/08/22/154051.html</guid><wfw:comment>http://www.cppblog.com/aurain/comments/154051.html</wfw:comment><comments>http://www.cppblog.com/aurain/archive/2011/08/22/154051.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aurain/comments/commentRss/154051.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aurain/services/trackbacks/154051.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 使用UNICODE_STRING 时，一定要手动设置UNICODE_STRING 的Length和MaximumLength 成员，不要想当然的认为设置了Buffer后，Length和MaximumLength 成员就会根据Buffer被自动设置。由其是当自己写的函数用UNICODE_STRING作为参数返回时，一定要设置Length和 MaximumLength 成员，不然很可能得到非预期结果。&nbsp;&nbsp;<a href='http://www.cppblog.com/aurain/archive/2011/08/22/154051.html'>阅读全文</a><img src ="http://www.cppblog.com/aurain/aggbug/154051.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aurain/" target="_blank">水</a> 2011-08-22 10:16 <a href="http://www.cppblog.com/aurain/archive/2011/08/22/154051.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何编译TrueCrypt 7.0a源码</title><link>http://www.cppblog.com/aurain/archive/2010/11/01/132026.html</link><dc:creator>水</dc:creator><author>水</author><pubDate>Mon, 01 Nov 2010 11:12:00 GMT</pubDate><guid>http://www.cppblog.com/aurain/archive/2010/11/01/132026.html</guid><wfw:comment>http://www.cppblog.com/aurain/comments/132026.html</wfw:comment><comments>http://www.cppblog.com/aurain/archive/2010/11/01/132026.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.cppblog.com/aurain/comments/commentRss/132026.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aurain/services/trackbacks/132026.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 如何编译TrueCrypt 7.0a源码。TrueCrypt是一款开源的虚拟加密磁盘工具，目前最新版本是7.0a，本文以该版本源代码为基础，介绍了如何在VC2008下进行编译。&nbsp;&nbsp;<a href='http://www.cppblog.com/aurain/archive/2010/11/01/132026.html'>阅读全文</a><img src ="http://www.cppblog.com/aurain/aggbug/132026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aurain/" target="_blank">水</a> 2010-11-01 19:12 <a href="http://www.cppblog.com/aurain/archive/2010/11/01/132026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过向设备对象\Device\Tcp发送IOCTL Code枚举通信端口</title><link>http://www.cppblog.com/aurain/archive/2010/07/09/119892.html</link><dc:creator>水</dc:creator><author>水</author><pubDate>Fri, 09 Jul 2010 10:28:00 GMT</pubDate><guid>http://www.cppblog.com/aurain/archive/2010/07/09/119892.html</guid><wfw:comment>http://www.cppblog.com/aurain/comments/119892.html</wfw:comment><comments>http://www.cppblog.com/aurain/archive/2010/07/09/119892.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/aurain/comments/commentRss/119892.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aurain/services/trackbacks/119892.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在应用层，枚举进程及其通信端口一般可以用iphlpapi.dll中提供的函数来获取。如获取Tcp连接，则调用GetTcpTable或者AllocateAndGetTcpTableFromStack来查询。这些API都是通过调用NtDeviceIoControlFile这个NativeAPI来进入内核查询信息的，如果在内核用SSDT Hook来挂钩此函数，从而隐藏特定的IP、端口信息的话，那么在应用层，常规的查询方法就查不到隐藏的端口了。<br>本文通过直接向设备对象\Device\Tcp发送IOCTL Code=IOCTL_TCP_QUERY_INFORMATION_EX的命令，直接获取进程，端口信息。本文也同时实现了UDP端口的查询。<br>具体请参考下面的代码，使用WinDDK 6001.18001编译。<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/aurain/archive/2010/07/09/119892.html'>阅读全文</a><img src ="http://www.cppblog.com/aurain/aggbug/119892.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aurain/" target="_blank">水</a> 2010-07-09 18:28 <a href="http://www.cppblog.com/aurain/archive/2010/07/09/119892.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用ZwQueryVirtualMemory枚举进程模块</title><link>http://www.cppblog.com/aurain/archive/2010/07/05/119361.html</link><dc:creator>水</dc:creator><author>水</author><pubDate>Mon, 05 Jul 2010 08:32:00 GMT</pubDate><guid>http://www.cppblog.com/aurain/archive/2010/07/05/119361.html</guid><wfw:comment>http://www.cppblog.com/aurain/comments/119361.html</wfw:comment><comments>http://www.cppblog.com/aurain/archive/2010/07/05/119361.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/aurain/comments/commentRss/119361.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aurain/services/trackbacks/119361.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 枚举进程模块通常可以使用诸如:CreateToolhelp32Snapshot,Module32First,Module32Next 等"Tool Help Functions"接口来实现, 并且这也是最通用的方法(从Win95就开始支持了), 但是今天我们要介绍的是ntdll.dll导出的未文档化接口ZwQueryVirtualMemory,。相比前面所介绍的方法，该方法可以检测出隐藏的模块（类似IceSword）。&nbsp;&nbsp;<a href='http://www.cppblog.com/aurain/archive/2010/07/05/119361.html'>阅读全文</a><img src ="http://www.cppblog.com/aurain/aggbug/119361.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aurain/" target="_blank">水</a> 2010-07-05 16:32 <a href="http://www.cppblog.com/aurain/archive/2010/07/05/119361.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows内核驱动中操作文件</title><link>http://www.cppblog.com/aurain/archive/2009/12/31/104563.html</link><dc:creator>水</dc:creator><author>水</author><pubDate>Thu, 31 Dec 2009 07:27:00 GMT</pubDate><guid>http://www.cppblog.com/aurain/archive/2009/12/31/104563.html</guid><wfw:comment>http://www.cppblog.com/aurain/comments/104563.html</wfw:comment><comments>http://www.cppblog.com/aurain/archive/2009/12/31/104563.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/aurain/comments/commentRss/104563.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aurain/services/trackbacks/104563.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在Windows执行体中，通过文件对象来代表文件，该文件对象是一种由对象管理器管理的执行体对象。例如：目录也是由文件对象代表的。<br><br>内核组件通过对象名来引用文件，即在文件的全路径前面加\DosDevices。（在Windows 2000及后续操作系统中，\??等同于\DosDevices）。例如，文件C:\WINDOWS\example.txt的对象名为\DosDevices\C:\WINDOWS\example.txt。你需要用对象名来打开文件以获取句柄。<br><br>&nbsp;&nbsp;<a href='http://www.cppblog.com/aurain/archive/2009/12/31/104563.html'>阅读全文</a><img src ="http://www.cppblog.com/aurain/aggbug/104563.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aurain/" target="_blank">水</a> 2009-12-31 15:27 <a href="http://www.cppblog.com/aurain/archive/2009/12/31/104563.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>详解IRP之数据传输的机制</title><link>http://www.cppblog.com/aurain/archive/2009/09/27/97355.html</link><dc:creator>水</dc:creator><author>水</author><pubDate>Sun, 27 Sep 2009 05:50:00 GMT</pubDate><guid>http://www.cppblog.com/aurain/archive/2009/09/27/97355.html</guid><wfw:comment>http://www.cppblog.com/aurain/comments/97355.html</wfw:comment><comments>http://www.cppblog.com/aurain/archive/2009/09/27/97355.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aurain/comments/commentRss/97355.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aurain/services/trackbacks/97355.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Windows 操作系统家族支持三种数据传输机制&nbsp;&nbsp;<a href='http://www.cppblog.com/aurain/archive/2009/09/27/97355.html'>阅读全文</a><img src ="http://www.cppblog.com/aurain/aggbug/97355.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aurain/" target="_blank">水</a> 2009-09-27 13:50 <a href="http://www.cppblog.com/aurain/archive/2009/09/27/97355.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>中断请求级（转）</title><link>http://www.cppblog.com/aurain/archive/2009/08/13/93150.html</link><dc:creator>水</dc:creator><author>水</author><pubDate>Thu, 13 Aug 2009 03:34:00 GMT</pubDate><guid>http://www.cppblog.com/aurain/archive/2009/08/13/93150.html</guid><wfw:comment>http://www.cppblog.com/aurain/comments/93150.html</wfw:comment><comments>http://www.cppblog.com/aurain/archive/2009/08/13/93150.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aurain/comments/commentRss/93150.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aurain/services/trackbacks/93150.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Windows NT为每个硬件中断和少数软件事件赋予了一个优先级，即中断请求级(interrupt request level - IRQL)。IRQL为单CPU上的活动提供了同步方法，它基于下面规则：<br><br>一旦某CPU执行在高于PASSIVE_LEVEL的IRQL上时，该CPU上的活动仅能被拥有更高IRQL的活动抢先。<br><br>&nbsp;&nbsp;<a href='http://www.cppblog.com/aurain/archive/2009/08/13/93150.html'>阅读全文</a><img src ="http://www.cppblog.com/aurain/aggbug/93150.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aurain/" target="_blank">水</a> 2009-08-13 11:34 <a href="http://www.cppblog.com/aurain/archive/2009/08/13/93150.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】驱动和应用层的三种通信方式 </title><link>http://www.cppblog.com/aurain/archive/2009/03/30/78376.html</link><dc:creator>水</dc:creator><author>水</author><pubDate>Mon, 30 Mar 2009 08:31:00 GMT</pubDate><guid>http://www.cppblog.com/aurain/archive/2009/03/30/78376.html</guid><wfw:comment>http://www.cppblog.com/aurain/comments/78376.html</wfw:comment><comments>http://www.cppblog.com/aurain/archive/2009/03/30/78376.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aurain/comments/commentRss/78376.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aurain/services/trackbacks/78376.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 驱动程序和客户应用程序经常需要进行数据交换，但我们知道驱动程序和客户应用程序可能不在同一个地址空间，因此操作系统必须解决两者之间的数据交换。<br>驱动层和应用层通信，主要是靠DeviceIoControl函数&nbsp;&nbsp;<a href='http://www.cppblog.com/aurain/archive/2009/03/30/78376.html'>阅读全文</a><img src ="http://www.cppblog.com/aurain/aggbug/78376.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aurain/" target="_blank">水</a> 2009-03-30 16:31 <a href="http://www.cppblog.com/aurain/archive/2009/03/30/78376.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NDIS网络驱动程序编程要点</title><link>http://www.cppblog.com/aurain/archive/2009/02/22/74621.html</link><dc:creator>水</dc:creator><author>水</author><pubDate>Sun, 22 Feb 2009 14:43:00 GMT</pubDate><guid>http://www.cppblog.com/aurain/archive/2009/02/22/74621.html</guid><wfw:comment>http://www.cppblog.com/aurain/comments/74621.html</wfw:comment><comments>http://www.cppblog.com/aurain/archive/2009/02/22/74621.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aurain/comments/commentRss/74621.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aurain/services/trackbacks/74621.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 编写Windows 2000的任何网络驱动程序时通常都需要考虑的几点问题<br>1 可移植性<br>2 多处理器支持<br>3 IRQLs<br>4 同步和指示<br>5 包结构<br>6 使用共享内存<br>7 异步I/O和完成函数<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/aurain/archive/2009/02/22/74621.html'>阅读全文</a><img src ="http://www.cppblog.com/aurain/aggbug/74621.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aurain/" target="_blank">水</a> 2009-02-22 22:43 <a href="http://www.cppblog.com/aurain/archive/2009/02/22/74621.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>驱动编程中使用结构化异常处理(SEH)</title><link>http://www.cppblog.com/aurain/archive/2009/02/16/73913.html</link><dc:creator>水</dc:creator><author>水</author><pubDate>Mon, 16 Feb 2009 02:36:00 GMT</pubDate><guid>http://www.cppblog.com/aurain/archive/2009/02/16/73913.html</guid><wfw:comment>http://www.cppblog.com/aurain/comments/73913.html</wfw:comment><comments>http://www.cppblog.com/aurain/archive/2009/02/16/73913.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aurain/comments/commentRss/73913.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aurain/services/trackbacks/73913.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 摘自《Windows驱动开发技术详解》<br>结构化异常处理（SHE, Structured Exception Handling）是微软编译器提供的独特处理机制，这种处理方式能在一定程度上在出现错误的情况下，避免程序崩溃。先说明两个概念。&nbsp;&nbsp;<a href='http://www.cppblog.com/aurain/archive/2009/02/16/73913.html'>阅读全文</a><img src ="http://www.cppblog.com/aurain/aggbug/73913.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aurain/" target="_blank">水</a> 2009-02-16 10:36 <a href="http://www.cppblog.com/aurain/archive/2009/02/16/73913.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Prefast测试驱动问题</title><link>http://www.cppblog.com/aurain/archive/2009/01/21/72410.html</link><dc:creator>水</dc:creator><author>水</author><pubDate>Wed, 21 Jan 2009 03:52:00 GMT</pubDate><guid>http://www.cppblog.com/aurain/archive/2009/01/21/72410.html</guid><wfw:comment>http://www.cppblog.com/aurain/comments/72410.html</wfw:comment><comments>http://www.cppblog.com/aurain/archive/2009/01/21/72410.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aurain/comments/commentRss/72410.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aurain/services/trackbacks/72410.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Prefast是MS开发的一个测试驱动代码的小工具,<br>它的作用是尽早找出代码中常的BUG.<br>在编译时参与进来查找BUG.<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/aurain/archive/2009/01/21/72410.html'>阅读全文</a><img src ="http://www.cppblog.com/aurain/aggbug/72410.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aurain/" target="_blank">水</a> 2009-01-21 11:52 <a href="http://www.cppblog.com/aurain/archive/2009/01/21/72410.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>构建Windows驱动开发环境</title><link>http://www.cppblog.com/aurain/archive/2009/01/20/72374.html</link><dc:creator>水</dc:creator><author>水</author><pubDate>Tue, 20 Jan 2009 07:07:00 GMT</pubDate><guid>http://www.cppblog.com/aurain/archive/2009/01/20/72374.html</guid><wfw:comment>http://www.cppblog.com/aurain/comments/72374.html</wfw:comment><comments>http://www.cppblog.com/aurain/archive/2009/01/20/72374.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/aurain/comments/commentRss/72374.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aurain/services/trackbacks/72374.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 详细介绍了三种构造驱动开发环境的方法&nbsp;&nbsp;<a href='http://www.cppblog.com/aurain/archive/2009/01/20/72374.html'>阅读全文</a><img src ="http://www.cppblog.com/aurain/aggbug/72374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aurain/" target="_blank">水</a> 2009-01-20 15:07 <a href="http://www.cppblog.com/aurain/archive/2009/01/20/72374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>驱动调试的一般性技巧</title><link>http://www.cppblog.com/aurain/archive/2009/01/15/72096.html</link><dc:creator>水</dc:creator><author>水</author><pubDate>Thu, 15 Jan 2009 07:31:00 GMT</pubDate><guid>http://www.cppblog.com/aurain/archive/2009/01/15/72096.html</guid><wfw:comment>http://www.cppblog.com/aurain/comments/72096.html</wfw:comment><comments>http://www.cppblog.com/aurain/archive/2009/01/15/72096.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/aurain/comments/commentRss/72096.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aurain/services/trackbacks/72096.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 一般性调试技巧包括打印调试信息、查看dump文件等。这些方法在调试驱动中比较常见，使用也比较简单。&nbsp;&nbsp;<a href='http://www.cppblog.com/aurain/archive/2009/01/15/72096.html'>阅读全文</a><img src ="http://www.cppblog.com/aurain/aggbug/72096.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aurain/" target="_blank">水</a> 2009-01-15 15:31 <a href="http://www.cppblog.com/aurain/archive/2009/01/15/72096.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>驱动调试的几个细节问题IRQL_NOT_LESS_OR_EQUAL</title><link>http://www.cppblog.com/aurain/archive/2009/01/14/72015.html</link><dc:creator>水</dc:creator><author>水</author><pubDate>Wed, 14 Jan 2009 09:05:00 GMT</pubDate><guid>http://www.cppblog.com/aurain/archive/2009/01/14/72015.html</guid><wfw:comment>http://www.cppblog.com/aurain/comments/72015.html</wfw:comment><comments>http://www.cppblog.com/aurain/archive/2009/01/14/72015.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aurain/comments/commentRss/72015.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aurain/services/trackbacks/72015.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天在调试驱动的时候，发现一个开始觉得很奇怪的问题，就是调用RtlStringCbPrintfW函数来格式化WCHAR字符串时，一定蓝屏，提示<br>IRQL_NOT_LESS_OR_EQUAL，并且比较郁闷的是，在虚拟机上有时不会出现，有时会出现，但在真正的主机上一定会出现（Windows xp sp2）。<br>一般出现IRQL_NOT_LESS_OR_EQUAL，是IRQL在级别高的地方调用了分页内存，所以，我就想到把当前的IRQL打出来看看，发现在进入函数<br>的时候，当前的IRQL是0（PASSIVE_LEVEL），而在执行这段代码的地方，IRQL是2（DISPATCH_LEVEL），是什么原因使得IRQL发生了变化呢？<br>仔细查看代码后，发现了原因，因为在执行这段代码之前，通过NdisAcquireSpinLock获取旋转锁，而在旋转锁释放之前，其中的代码是跑在<br>IRQL=2的，另外，RtlStringCbPrintfW需要处理分页内存(PagedPool),但在IRQL=2的情况下，是只能处理非分页内存的(NonpagedPool)，所以，<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/aurain/archive/2009/01/14/72015.html'>阅读全文</a><img src ="http://www.cppblog.com/aurain/aggbug/72015.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aurain/" target="_blank">水</a> 2009-01-14 17:05 <a href="http://www.cppblog.com/aurain/archive/2009/01/14/72015.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NDIS 中间层驱动（IM Driver）的安装与卸载过程</title><link>http://www.cppblog.com/aurain/archive/2009/01/12/71814.html</link><dc:creator>水</dc:creator><author>水</author><pubDate>Mon, 12 Jan 2009 07:35:00 GMT</pubDate><guid>http://www.cppblog.com/aurain/archive/2009/01/12/71814.html</guid><wfw:comment>http://www.cppblog.com/aurain/comments/71814.html</wfw:comment><comments>http://www.cppblog.com/aurain/archive/2009/01/12/71814.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/aurain/comments/commentRss/71814.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aurain/services/trackbacks/71814.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 中间层驱动对上层来说，扮演一个Miniport Driver的角色，它在上边沿向NDIS注册一组Miniportxxx函数；对于下层Miniport Driver来说，中间层驱动扮演一个Protocol Driver的角色，因此它在下边沿向NDIS注册一组Protocolxxx函数。Miniport Driver通过调用NdisMRegisterMiniport向NDIS注册一组MiniportXxx函数；Protocol Driver 通过调用 NdisRegisterProtocol向NDIS注册一组ProtocolXxx函数。&nbsp;&nbsp;<a href='http://www.cppblog.com/aurain/archive/2009/01/12/71814.html'>阅读全文</a><img src ="http://www.cppblog.com/aurain/aggbug/71814.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aurain/" target="_blank">水</a> 2009-01-12 15:35 <a href="http://www.cppblog.com/aurain/archive/2009/01/12/71814.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用WinDbg和VMware调试NDIS中间层驱动程序</title><link>http://www.cppblog.com/aurain/archive/2009/01/04/71138.html</link><dc:creator>水</dc:creator><author>水</author><pubDate>Sun, 04 Jan 2009 08:36:00 GMT</pubDate><guid>http://www.cppblog.com/aurain/archive/2009/01/04/71138.html</guid><wfw:comment>http://www.cppblog.com/aurain/comments/71138.html</wfw:comment><comments>http://www.cppblog.com/aurain/archive/2009/01/04/71138.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/aurain/comments/commentRss/71138.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aurain/services/trackbacks/71138.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我这里将一步一步的介绍，是从新手的角度来讲的，所以对高手来说，可能有些啰嗦。如果你看完这篇文章还不知道如何设置，那么原因可能有两个：1. 我没讲好；2. 你需要稍微认真看下并实践下，并实现对相关基本概念要有所了解。&nbsp;&nbsp;<a href='http://www.cppblog.com/aurain/archive/2009/01/04/71138.html'>阅读全文</a><img src ="http://www.cppblog.com/aurain/aggbug/71138.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aurain/" target="_blank">水</a> 2009-01-04 16:36 <a href="http://www.cppblog.com/aurain/archive/2009/01/04/71138.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>