欢迎来到天天文库
浏览记录
ID:14907431
大小:43.50 KB
页数:5页
时间:2018-07-30
《剖析windows nt2000内核对象组织》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、剖析WindowsNT/2000内核对象组织创建时间:2002-04-21文章属性:转载文章来源:(http://webcrazy.yeah.net/)文章提交:ki11er(coolroot_at_163.com)剖析WindowsNT/2000内核对象组织WebCrazy(http://webcrazy.yeah.net/)对象管理器在WindowsNT/2000内核中占了极其重要的位置,其一个最主要职能是组织管理系统内核对象。在WindowsNT/2000中,内核对象管理器大量引入了C++面向对象的思想,即所有内核对
2、象都封装在对象管理器内部,除对象管理器自己以外,对其他所有想引用内核对象结构成员的子系统都是不透明的,也即都需通过对象管理器访问这些结构。Microsoft极力推荐内核驱动代码遵循这一原则(用户态代码根本不能直接访问这些数据),她提供了一系列以Ob开头的例程供我们使用。但是也不是说只有对象管理器即这些函数才能访问这些数据。我下面提供的代码则直接存取这些结构,这种情况下,我们只能祈祷Microsoft永远保持这些对象头,对象体结构的不变,这一般不大可能,所以我提供的代码只供学习WindowsNT/2000内核之用,无其它实际
3、应用意义。先谈谈内核已命名对象吧,命名对象存于系统全局命名内核区,与传统的DOS目录与文件组织方式相似,对象管理器也采用树状结构管理这些对象,这样即可快速检索内核对象。这个优点很容易体现,对象检索速度快,这样会大大提高系统性能,举个例子吧:譬如进程A某个时刻已经使用某个文件,即A在内核中拥有了指向这个文件的一个内核对象(FILE_OBJECT),而如果这时另一进程B也试图访问这个文件,则B通过CreateFileAPI等打开这个文件时,系统指引对象管理器查找对象存储空间,如已存在此对象,则查看对象头,是否已独占访问,假如是
4、的话,则会出现失败,否则的话,增加此对象的引用计数或句柄计数。系统中这种搜索对象的情况无处不在,因为WindowsNT/2000中将所有的需SECURITY_DESCRIPTOR等结构进行保护的可操作的数据结构都当作对象处理,如常见的进程对象(EPROCESS/KPEB)、线程对象(ETHREAD/KTEB)、驱动程序对象(DRIVER_OBJECT)等等。当然这种树状结构组织内核已命名对象,还有另一个优点,就是使所有已命名对象组织的十分有条理,如设备对象处于Device下,而对象类型名称处于ObjectTypes下等
5、等。再者这样也能达到用户态进程仅能访问??与BaseNamedObjects下的对象,而内核态代码则没有任何限制的目的。至于系统内部如何组织管理这些已命名对象,其实WindowsNT/2000内部由内核变量ObpRootDirectoryObject指向的Directory对象指向根目录,使用哈希表(HashTable)来组织管理这些命名内核对象。先看看I386KD的分析,再让我们来看看我写的代码吧。kd>!objectObject:8148e210Type:(814c5820)DirectoryObjectHead
6、er:8148e1f8HandleCount:0PointerCount:39DirectoryObject:00000000Name:99symboliclinkssnappedthroughthisdirectoryHashBucket[00]:8148a350Directory'ArcName'814a8f10Device'Ntfs'HashBucket[01]:e2390040Port'SeLsaCommandPort'HashBucket[03]:e1012030Key'REGISTRY'HashBucket
7、[06]:e1394560Port'XactSrvLpcPort'HashBucket[07]:e13682e0Port'DbgUiApiPort'HashBucket[09]:84305760Directory'NLS'...kd>!object814a8f10Object:814a8f10Type:(814b5ac0)DeviceObjectHeader:814a8ef8HandleCount:0PointerCount:2DirectoryObject:8148e210Name:Ntfs实现代码如下://------
8、-----------------------------------------////DumpWindows2000KernelObject//OnlytestonWindows2000ServerChineseEdition//Build2195(Free)!ProgrammedByWebCraz
此文档下载收益归作者所有