aurain
技术文摘
posts - 137,  comments - 268,  trackbacks - 0
windows驱动
介绍Windows驱动及其开发方面的知识
IRP中I/O堆栈Parameters.Create参数      摘要: IRP中I/O堆栈Parameters.Create参数
在IO_STACK_LOCATION结构体中,Parameters这个union其中有个Create结构体,对应IRP_MJ_CREATE,此IRP的分发函数处理应用层的CreateFile函数,
CreateFile函数进入内核后是调用ZwCreateFile
在ZwCreateFile中设置的一些参数,在Parameters.Create中可以获取到。  阅读全文
posted @ 2011-09-01 15:27 水 阅读(3542) | 评论 (0)  编辑
UNICODE_STRING使用小提示      摘要: 使用UNICODE_STRING 时,一定要手动设置UNICODE_STRING 的Length和MaximumLength 成员,不要想当然的认为设置了Buffer后,Length和MaximumLength 成员就会根据Buffer被自动设置。由其是当自己写的函数用UNICODE_STRING作为参数返回时,一定要设置Length和 MaximumLength 成员,不然很可能得到非预期结果。  阅读全文
posted @ 2011-08-22 10:16 水 阅读(654) | 评论 (0)  编辑
如何编译TrueCrypt 7.0a源码      摘要: 如何编译TrueCrypt 7.0a源码。TrueCrypt是一款开源的虚拟加密磁盘工具,目前最新版本是7.0a,本文以该版本源代码为基础,介绍了如何在VC2008下进行编译。  阅读全文
posted @ 2010-11-01 19:12 水 阅读(6276) | 评论 (29)  编辑
通过向设备对象\Device\Tcp发送IOCTL Code枚举通信端口      摘要: 在应用层,枚举进程及其通信端口一般可以用iphlpapi.dll中提供的函数来获取。如获取Tcp连接,则调用GetTcpTable或者AllocateAndGetTcpTableFromStack来查询。这些API都是通过调用NtDeviceIoControlFile这个NativeAPI来进入内核查询信息的,如果在内核用SSDT Hook来挂钩此函数,从而隐藏特定的IP、端口信息的话,那么在应用层,常规的查询方法就查不到隐藏的端口了。
本文通过直接向设备对象\Device\Tcp发送IOCTL Code=IOCTL_TCP_QUERY_INFORMATION_EX的命令,直接获取进程,端口信息。本文也同时实现了UDP端口的查询。
具体请参考下面的代码,使用WinDDK 6001.18001编译。
  阅读全文
posted @ 2010-07-09 18:28 水 阅读(5756) | 评论 (3)  编辑
用ZwQueryVirtualMemory枚举进程模块      摘要: 枚举进程模块通常可以使用诸如:CreateToolhelp32Snapshot,Module32First,Module32Next 等"Tool Help Functions"接口来实现, 并且这也是最通用的方法(从Win95就开始支持了), 但是今天我们要介绍的是ntdll.dll导出的未文档化接口ZwQueryVirtualMemory,。相比前面所介绍的方法,该方法可以检测出隐藏的模块(类似IceSword)。  阅读全文
posted @ 2010-07-05 16:32 水 阅读(9421) | 评论 (3)  编辑
Windows内核驱动中操作文件      摘要: 在Windows执行体中,通过文件对象来代表文件,该文件对象是一种由对象管理器管理的执行体对象。例如:目录也是由文件对象代表的。

内核组件通过对象名来引用文件,即在文件的全路径前面加\DosDevices。(在Windows 2000及后续操作系统中,\??等同于\DosDevices)。例如,文件C:\WINDOWS\example.txt的对象名为\DosDevices\C:\WINDOWS\example.txt。你需要用对象名来打开文件以获取句柄。

  阅读全文
posted @ 2009-12-31 15:27 水 阅读(9967) | 评论 (1)  编辑
详解IRP之数据传输的机制      摘要: Windows 操作系统家族支持三种数据传输机制  阅读全文
posted @ 2009-09-27 13:50 水 阅读(1473) | 评论 (0)  编辑
中断请求级(转)      摘要: Windows NT为每个硬件中断和少数软件事件赋予了一个优先级,即中断请求级(interrupt request level - IRQL)。IRQL为单CPU上的活动提供了同步方法,它基于下面规则:

一旦某CPU执行在高于PASSIVE_LEVEL的IRQL上时,该CPU上的活动仅能被拥有更高IRQL的活动抢先。

  阅读全文
posted @ 2009-08-13 11:34 水 阅读(1042) | 评论 (0)  编辑
【转】驱动和应用层的三种通信方式      摘要: 驱动程序和客户应用程序经常需要进行数据交换,但我们知道驱动程序和客户应用程序可能不在同一个地址空间,因此操作系统必须解决两者之间的数据交换。
驱动层和应用层通信,主要是靠DeviceIoControl函数  阅读全文
posted @ 2009-03-30 16:31 水 阅读(4338) | 评论 (0)  编辑
NDIS网络驱动程序编程要点      摘要: 编写Windows 2000的任何网络驱动程序时通常都需要考虑的几点问题
1 可移植性
2 多处理器支持
3 IRQLs
4 同步和指示
5 包结构
6 使用共享内存
7 异步I/O和完成函数
  阅读全文
posted @ 2009-02-22 22:43 水 阅读(3970) | 评论 (0)  编辑
驱动编程中使用结构化异常处理(SEH)      摘要: 摘自《Windows驱动开发技术详解》
结构化异常处理(SHE, Structured Exception Handling)是微软编译器提供的独特处理机制,这种处理方式能在一定程度上在出现错误的情况下,避免程序崩溃。先说明两个概念。  阅读全文
posted @ 2009-02-16 10:36 水 阅读(3187) | 评论 (0)  编辑
使用Prefast测试驱动问题      摘要: Prefast是MS开发的一个测试驱动代码的小工具,
它的作用是尽早找出代码中常的BUG.
在编译时参与进来查找BUG.
  阅读全文
posted @ 2009-01-21 11:52 水 阅读(1602) | 评论 (0)  编辑
构建Windows驱动开发环境      摘要: 详细介绍了三种构造驱动开发环境的方法  阅读全文
posted @ 2009-01-20 15:07 水 阅读(9215) | 评论 (2)  编辑
驱动调试的一般性技巧      摘要: 一般性调试技巧包括打印调试信息、查看dump文件等。这些方法在调试驱动中比较常见,使用也比较简单。  阅读全文
posted @ 2009-01-15 15:31 水 阅读(3636) | 评论 (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 水 阅读(4945) | 评论 (0)  编辑

Full windows驱动 Archive


<2024年3月>
252627282912
3456789
10111213141516
17181920212223
24252627282930
31123456

常用链接

留言簿(17)

随笔分类(138)

随笔档案(137)

网络开发

最新随笔

搜索

  •  

积分与排名

  • 积分 - 488252
  • 排名 - 36

最新随笔

最新评论

阅读排行榜

评论排行榜