随笔分类 -  Windows/驱动/文件系统

摘要:windows上用netstat命令查看某个端口是否占用,被哪个进程所占用 阅读全文
posted @ 2015-09-01 21:34 onemuji 阅读(791) 评论(0) 推荐(0)
摘要:64位系统上,32位进程拷贝文件到"System32"目录时,会被文件系统重定向到"SysWOW64"目录要禁用这种重定向,需要用到下面2个API:Wow64DisableWow64FsRedirection()Wow64RevertWow64FsRedirection()下面是微软的示例代码: ... 阅读全文
posted @ 2015-07-21 11:21 onemuji 阅读(561) 评论(0) 推荐(0)
摘要:工具:devcon64.exe安装/更新/删除等记录:c:\windows\inf\setupapi.dev.log 阅读全文
posted @ 2015-06-27 11:12 onemuji 阅读(484) 评论(0) 推荐(0)
摘要:win应用只允许单个实例运行,并将已运行实例窗口置顶 阅读全文
posted @ 2015-02-03 16:30 onemuji 阅读(474) 评论(0) 推荐(0)
摘要:应用程序向系统注册注销/用户切换消息,注销/用户切换时得到系统通知,进行自定义的处理。仅限有消息循环的程序。 阅读全文
posted @ 2014-12-03 19:37 onemuji 阅读(1978) 评论(0) 推荐(0)
摘要:内核态尝试缓存handle(file object)遇到的问题及解决思路内核态LOG模块实现中,考虑到频繁打开关闭用户态LOG文件开销较大,考虑缓存handle(或对应的file object)。思路:首次通过ZwCreateFile()获得handle然后利用ObReferenceObjectByHandle()来获得对应的file object,将得到的file object缓存起来,想后续通过它来直接读写文件。实现中发现这种方法存在问题:若在获得file object之后关闭handle,则驱动后续无法利用file object来读写文件,错:"STATUS_FILE_CLOS 阅读全文
posted @ 2012-12-20 12:13 onemuji 阅读(438) 评论(0) 推荐(0)
摘要:WDM驱动改可手动加卸载的NT驱动测试工具:osrloader把一个WDM类型的驱动改成可动态加载/卸载,需要做以下2个修改:1. 把SOURCES文件夹中的DRIVERTYPE=WDM去掉2.去掉AddDevice()例程 阅读全文
posted @ 2012-11-14 20:47 onemuji 阅读(302) 评论(0) 推荐(0)
摘要:关键词: windows驱动开发 删除符号链接出错 变量作用域问题RtlInitUnicodeString摘要:NT式驱动中,在DriverUnload()中尝试删除之前创建的符号链接失败,最后发现原因是变量作用域和RtlInitUnicodeString的问题原始存在问题的简化代码如下:typedef struct _DEVICE_EXTENSION { UINT32 magicNum; PDEVICE_OBJECT pDevice; UNICODE_STRING symLinkName; } DEVICE_EXTENSION, *PDEVICE_EXTENSION; PDE... 阅读全文
posted @ 2012-11-06 23:51 onemuji 阅读(604) 评论(0) 推荐(0)
摘要:http://msdn.microsoft.com/zh-cn/library/ff554739(VS.85).aspx 在 Windows Vista 版本的 WDK 之前,用于驱动程序开发的主要头文件为 Wdm.h、Ntddk.h 和 Ntifs.h,它们包含很多重复声明。 从 Windows 阅读全文
posted @ 2012-10-26 15:33 onemuji 阅读(1489) 评论(0) 推荐(0)
摘要:Process Explorer(官方下载地址http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx)下载后解压,直接运行就能看到详细的系统信息,包括CPU、IO、网络、进程等。要查看进程对应的句柄需要做以下操作(Process Explorer的使用一目了然,就查看句柄费了点劲,blog存档备用):打开process explorer选中想要查看句柄或者加载的dll的进程菜单点击view——Lower Pane View,其下有DLLS和Handles,选中即可。同时,需要勾选Show Lower Pane才能显示出来 阅读全文
posted @ 2012-09-24 19:06 onemuji 阅读(727) 评论(0) 推荐(0)
摘要:CCB ContextControlBlock 是存Private信息的,这个FO的特殊信息FCBFileControlBlock 是存全局信息的FO FileObject 代表一个文件打开实例之间关系:FO 与 CCB 是1:1的即一个FO有一个CCB根着FCB 与 CCB 是1:n的 (n >= 1)即一个FCB可能有n个CCB和它关联.FO->FsContext2指向CCBFO->FsContext指向CommFCB////////////////////////////////////////////////////////////////////////////// 阅读全文
posted @ 2012-05-19 10:11 onemuji 阅读(788) 评论(0) 推荐(0)
摘要:转自:http://www.cnblogs.com/Sonic2007/archive/2008/07/08/1238167.html任何时候系统内存资源相对磁盘空间来说都是相形见拙的。因为虚拟内存机制,使我们可以有相对丰富的地址资源(通常32bit的虚拟地址,可以有4G的寻址空间),而这些资源对物理内存来说一般情况是总是绰绰有余的。所以在现代操作系统中,总是在相对紧张时使用一些策略,如FIFO、LRU等将物理内存的一些页面置入相对便宜的磁盘空间资源中。一般的UNIX系统,独立使用一个分区,即swappartition。而这方面Windows只是使用普通的文件,通常命名为pagefile.sy 阅读全文
posted @ 2012-04-27 11:59 onemuji 阅读(440) 评论(0) 推荐(0)
摘要:标 题: 【分享】缓存管理器作 者: yaolibing时 间: 2009-07-31,21:48:35链 接: http://bbs.pediy.com/showthread.php?t=94762简言之,就是会预先读入文件和延迟写入文件。当ReadFile时,会调用NtReadFile()系统调用,它会构造一个IRP下发到FSD,FSD会检查这个IRP看是不是可以缓存的,是的话,如果还没有为此文件建立缓存的话,就会调用CcInitializeCacheMap()函数建立缓存,它里面会调用内存管理器(VMM)函数建立一个节对象。当用到时,会把这个节对象(和文件关联)映射到内核空间。如果IRP 阅读全文
posted @ 2012-04-27 11:44 onemuji 阅读(498) 评论(0) 推荐(0)
摘要:Windows 文件过滤驱动经验总结作者:ai3000本文转载自驱动开发网看了 ChuKuangRen 的第二版《文件过滤驱动开发教程》后,颇有感触。我想,交流都是建立在平等的基础上,在抱怨氛围和环境不好的同时应该先想一想自己究竟付出了多少?只知索取不愿付出的人也就不用抱怨了,要怪也只能怪自己。发自己心得的人无非是两种目的,一是引发一些讨论,好纠正自己错误的认识,以便从中获取更多的知识使自己进步的更快。二是做一份备忘,当自己遗忘的时候能够马上找到相关资料。我这里也总结了近几年做文件过滤驱动时所积累下来的一些小小经验,这分笔记也是看了 ChuKuangRen 的教程后,临时想到的一小部分而已,是 阅读全文
posted @ 2012-04-27 11:40 onemuji 阅读(886) 评论(0) 推荐(0)
摘要:用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\Control\Session ManagerGlobalFlag 0x0004002).gflags.exe勾选 Enable pool tagging3).重启系统4).打开poolmon 看到详细的内存分配释放信息P - 切换分页非 阅读全文
posted @ 2012-04-11 19:05 onemuji 阅读(890) 评论(0) 推荐(0)
摘要:[关键词]:disk.sys 文件系统 IO特征[方法]:DDK中包含了disk和clallpnp的源码(路径:src\storage\class\disk),修改disk的源码并编译成功后(主要是生成CDO,添加对自定义IOCTL的响应及对读写的监控等工作),将其替换system32\dirvers下的disk.sys,可将其用于监控记录我们需要分析其特征的文件系统IO。测试过程中,利用IOCTL选择性地记录IO信息是效率的关键。 阅读全文
posted @ 2012-02-21 21:00 onemuji 阅读(418) 评论(0) 推荐(0)
摘要:[关键词]:过滤驱动,设备堆栈,绕过设备堆栈[问题描述]:需要分析读写驱动发往disk.sys的IO特征来为性能提升提供支持,因此准备做一个过滤驱动diskFilter attach到disk.sys设备栈,然后在过滤驱动里记录发往下层的读写IO信息。工作流程都设计好了,准备开始编码了,突然发现不行,很可能没有效果。为什么呢?因为disk的设备堆栈可能从底向上为disk---PartMgr---diskFilter。但问题在于,处于安全性和效率的考虑,读写驱动直接绕过了上述的设备堆栈,直接列举出disk.sys的设备对象,然后把IO直接发到这些设备对象。然后diskFilter就干等吧,啥也等 阅读全文
posted @ 2012-02-07 22:07 onemuji 阅读(278) 评论(0) 推荐(0)
摘要:关键词:双向链表 其实是比较简单的问题 经验丰富的人就不用往下看了。驱动中把所有找到的盘插入到双向链表尾(listHead),然后再从头遍历链表,把符合条件的结点放入另一个链表(disks)中。默认listHead中的第一个结点肯定符合条件,将其插入disks尾。完成这个动作之后,再取第二个结点时,listHead里的链接就变了。看起来很奇怪的问题。LIST_ENTRY listHead; LIST_ENTRY disks;struct DISK_INFO { LIST_ENTRY entry; ... }... pListEntry = listHead.Flink; Di... 阅读全文
posted @ 2012-02-02 19:01 onemuji 阅读(302) 评论(0) 推荐(0)
摘要:[关键词]:MUTEX,完成例程,[状况]:驱动IoCallDirver之前先WaitForSingleObject以获取MUTEX,然后设置完成例程。在完成例程里ReleaseMutex,系统蓝屏。[原因]:“A mutex object can be released only by the thread that currently holds the mutex. ”获取MUTEX的线程和完成例程中试图释放MUTEX的线程不是同一个。[Debug过程]:略[DUMP]: 部分 SYSTEM_THREAD_EXCEPTION_NOT_HANDLED (7e) This is a very 阅读全文
posted @ 2011-12-31 14:17 onemuji 阅读(264) 评论(0) 推荐(0)
摘要:个人总结问题:如下的一段驱动代码里发生了异常,执行了ErrorLog(...); 但是FunctionA()里的内容特别丰富,层次多而且调用关系很复杂,单步跟踪费时费力,很难找出异常究竟出在哪。try{FunctionA();}except(EXCEPTION_EXECUTE_HANDLER){ErrorLog(...);}采用办法:直接去掉try()except,让FunctionA()直接执行。运行到异常点时,驱动蓝屏。WIndbg里!analyze -v看看出问题的点在哪,有针对性地改。 阅读全文
posted @ 2011-11-04 21:52 onemuji 阅读(255) 评论(0) 推荐(0)