Windows驱动/文件系统
gfang
关注linux、开源和互联网。目前从事SAN文件系统驱动开发.微博:http://weibo.com/frank8609 欢迎交流
展开
-
RX_CONTEXT数据结构
//留着以备查询之用 来自WinDDK\6000\inc\ddk\rxcontx.htypedef struct _RX_CONTEXT { // // the node type, size and reference count, aka原创 2011-09-08 16:02:25 · 9512 阅读 · 0 评论 -
修改disk驱动监控文件系统的IO特征
[关键词]:disk.sys 文件系统 IO特征[方法]:DDK中包含了disk和clallpnp的源码(路径:src\storage\class\disk),修改disk的源码并编译成功后(主要是生成CDO,添加对自定义IOCTL的响应及对读写的监控等工作),将其替换system32\dirvers下的disk.sys,可将其用于监控记录我们需要分析其特征的文件系统IO。测试过程原创 2012-02-21 21:00:12 · 658 阅读 · 0 评论 -
用poolmon来查找内存泄露
用poolmon来查找内存泄露poolmon C:\WinDDK\7600.16385.1\tools\Other\i386\poolmon.exegflags C:\WinDDK\7600.16385.1\Debuggers\gflags.exe[步骤]:1).修改注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\C原创 2012-04-11 19:05:20 · 3677 阅读 · 0 评论 -
Windows 文件过滤驱动经验总结
Windows 文件过滤驱动经验总结作者:ai3000本文转载自驱动开发网看了 ChuKuangRen 的第二版《文件过滤驱动开发教程》后,颇有感触。我想,交流都是建立在平等的基础上,在抱怨氛围和环境不好的同时应该先想一想自己究竟付出了多少?只知索取不愿付出的人也就不用抱怨了,要怪也只能怪自己。发自己心得的人无非是两种目的,一是引发一些讨论,好纠正自己错误的认识,以便从中获取更转载 2012-04-27 11:40:08 · 685 阅读 · 0 评论 -
缓存管理器
标 题: 【分享】缓存管理器作 者: yaolibing时 间: 2009-07-31,21:48:35链 接: http://bbs.pediy.com/showthread.php?t=94762简言之,就是会预先读入文件和延迟写入文件。当ReadFile时,会调用NtReadFile()系统调用,它会构造一个IRP下发到FSD,FSD会检查这个IRP看是不是可以缓存 的,转载 2012-04-27 11:44:47 · 1483 阅读 · 0 评论 -
浅议Windows 2000/XP Pagefile组织管理
转自:http://www.cnblogs.com/Sonic2007/archive/2008/07/08/1238167.html任何时候系统内存资源相对磁盘空间来说都是相形见拙的。因为虚拟内存机制,使我们可以有相对丰富的地址资源(通常32bit的虚拟地址,可以有4G的寻址空间),而这些资源对物理内存来说一般情况是总是绰绰有余的。所以在现代操作系统中,总是在相对紧张时使用一些策略,如F转载 2012-04-27 11:59:36 · 874 阅读 · 0 评论 -
FCB CCB FileObject
CCB ContextControlBlock 是存Private信息的,这个FO的特殊信息FCB FileControlBlock 是存全局信息的FO FileObject 代表一个文件打开实例 之间关系: FO 与 CCB 是1:1的即一个FO有一个CCB根着FCB 与 CCB 是1:转载 2012-05-19 10:11:22 · 2057 阅读 · 0 评论 -
使用Process Explorer来查看句柄泄露
Process Explorer(官方下载地址http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)下载后解压,直接运行就能看到详细的系统信息,包括CPU、IO、网络、进程等。要查看进程对应的句柄需要做以下操作(Process Explorer的使用一目了然,就查看句柄费了点劲,blog存档备用):打原创 2012-09-24 19:06:19 · 6442 阅读 · 0 评论 -
删除驱动符号链接出错-变量作用域和RtlInitUnicodeString的问题
关键词: windows驱动开发 删除符号链接出错 变量作用域问题 RtlInitUnicodeString摘要:NT式驱动中,在DriverUnload()中尝试删除之前创建的符号链接失败,最后发现原因是变量作用域和RtlInitUnicodeString的问题原始存在问题的简化代码如下:typedef struct _DEVICE_EXTENSION { UIN原创 2012-11-06 23:51:26 · 1164 阅读 · 0 评论 -
WDM驱动改可手动加卸载的NT驱动
WDM驱动改可手动加卸载的NT驱动测试工具:osrloader把一个WDM类型的驱动改成可动态加载/卸载,需要做以下2个修改:1. 把SOURCES文件夹中的DRIVERTYPE=WDM去掉2.去掉AddDevice()例程原创 2012-11-14 20:47:44 · 764 阅读 · 0 评论 -
过滤驱动的问题-自我总结
[关键词]:过滤驱动,设备堆栈,绕过设备堆栈[问题描述]:需要分析读写驱动发往disk.sys的IO特征来为性能提升提供支持,因此准备做一个过滤驱动diskFilter attach到disk.sys设备栈,然后在过滤驱动里记录发往下层的读写IO信息。工作流程都设计好了,准备开始编码了,突然发现不行,很可能没有效果。为什么呢?因为disk的设备堆栈可能从底向上为di原创 2012-02-07 22:07:46 · 648 阅读 · 0 评论 -
STATUS_MUTANT_NOT_OWNED
[关键词]:MUTEX,完成例程,[状况]:驱动IoCallDirver之前先WaitForSingleObject以获取MUTEX,然后设置完成例程。在完成例程里ReleaseMutex,系统蓝屏。[原因]:“A mutex object can be released only by the thread that currently holds the mutex. ”获取MUT原创 2011-12-31 14:17:39 · 875 阅读 · 0 评论 -
双向链表的问题-自我总结
关键词:双向链表 其实是比较简单的问题 经验丰富的人就不用往下看了。驱动中把所有找到的盘插入到双向链表尾(listHead),然后再从头遍历链表,把符合条件的结点放入另一个链表(disks)中。默认listHead中的第一个结点肯定符合条件,将其插入disks尾。完成这个动作之后,再取第二个结点时,listHead里的链接就变了。看起来很奇怪的问题。LIST_ENTRY原创 2012-02-02 19:01:07 · 738 阅读 · 0 评论 -
异步IRP的教训(已附DUMP)
[教训]异步IRP中,IoSetCompletionRoutine()要在IoCallDriver()的前面,不然底层驱动完成了读写之后,找不到完成例程,会导致出错。看似简单,不小心却可能带来大麻烦。 [经过]修改驱动,需要把原来较大的IO切成小IO发给磁盘驱动,结果改原创 2011-09-09 16:39:44 · 1685 阅读 · 0 评论 -
StartIo例程的作用
关于驱动程序里StartIo例程的作用,部分摘自网络,有不正确的地方还望指正。 在很多时候,驱动程序不能立即处理I/O请求,此时需要通过一个队列保存Irp,然后返回,等到可以处理I/O请求时,再从队列中取出Irp进行处理。驱动程序可以自己维护一个队列,并通过系统线程来做处原创 2011-09-16 16:31:08 · 1013 阅读 · 0 评论 -
UNREFERENCED_PARAMETER+的作用
我们从 UNREFERENCED_PARAMETER 开始吧。这个宏在 winnt.h 中定义如下:#define UNREFERENCED_PARAMETER(P) (P) 换句话说 UNREFERENCED_PARAMETER 展开传递的参数或表达式。其目的是避免编转载 2011-10-12 21:17:20 · 376 阅读 · 0 评论 -
IRQL
IRQL是Interrupt ReQuest Level,中断请求级别。一个由windows虚拟出来的概念,划分在windows下中断的优先级,这里中断包括了硬中断和软中断,硬中断是由硬件产生,而软中断则是完全虚拟出来的。处理器在一个IRQL上执行线程代码。IRQL用于帮助决定线程如何被中断的。在同一处理器上,线程只能被更高级别IRQL的线程能中断。每个处理器都有自己的中断IRQL。原创 2011-10-20 11:54:03 · 15357 阅读 · 0 评论 -
FastIO
当阅读过滤驱动代码自己实践时,我想法是绑定完卷设备后,把所有的IRP都原封不动向下发,只是在passthru中打印个信息,表示经过了我的驱动,想看下效果。 用Device Tree查看,已成功绑定了D盘这个分区。用Dbgview查看,也能查看到输出信息。但是,绑定的D盘中,除了txt文件外,无法打开文件或运行程序,无法查看文件信息(创建日期,大小等),当一进行上述操作时,就BSOD,原创 2011-10-24 09:09:19 · 3373 阅读 · 1 评论 -
驱动开发技巧:去掉try except让驱动蓝屏直接暴露出错位置
个人总结问题:如下的一段驱动代码里发生了异常,执行了ErrorLog(...); 但是FunctionA()里的内容特别丰富,层次多而且调用关系很复杂,单步跟踪费时费力,很难找出异常究竟出在哪。try{FunctionA();}except(EXCEPTION_EXECUTE_HANDLER){ErrorLog(...);}采用办法:原创 2011-11-04 21:52:10 · 1345 阅读 · 0 评论 -
内核态尝试缓存handle(file object)遇到的问题及解决思路
内核态尝试缓存handle(file object)遇到的问题及解决思路内核态LOG模块实现中,考虑到频繁打开关闭用户态LOG文件开销较大,考虑缓存handle(或对应的file object)。思路:首次通过ZwCreateFile()获得handle然后利用ObReferenceObjectByHandle()来获得对应的file object,将得到的file obj原创 2012-12-20 12:13:53 · 912 阅读 · 0 评论