• windows系统的对象管理


    windows中的对象和高级编程语言中所说的对象还欧区别,准确来讲,windows中的对象其实指的是一种数据结构并且是一种带着“对象头(object head)” 的数据结构!

     所以windows中的对象可以基本分为三个部分:对象头、基本对象结构、可选部分!
     对象数据结构 可以如图所示  
    objectheader结构定义
     1 lkd> dt _object_header
     2 nt!_OBJECT_HEADER
     3 +0x000 PointerCount : Int4B
     4 +0x004 HandleCount : Int4B
     5 +0x004 NextToFree : Ptr32 Void
     6 +0x008 Lock : _EX_PUSH_LOCK
     7 +0x00c TypeIndex : UChar
     8 +0x00d TraceFlags : UChar
     9 +0x00e InfoMask : UChar
    10 +0x00f Flags : UChar
    11 +0x010 ObjectCreateInfo : Ptr32 _OBJECT_CREATE_INFORMATION
    12 +0x010 QuotaBlockCharged : Ptr32 Void
    13 +0x014 SecurityDescriptor : Ptr32 Void
    14 +0x018 Body : _QUAD
                                              
    而创建对象后就会返回句柄,相关进程可以通过句柄来使用此对象,所以对象可以有名和可以无名。
    但是大部分情况,对象还是需要名字的,有名对象的组织就成了一个问题!
    在windows中通过OBJECT_DIRECTORY目录对项来管理!
    我们看下OBJECT_DIRECTORY结构:
    1 lkd> dt _object_directory
    2 nt!_OBJECT_DIRECTORY
    3 +0x000 HashBuckets : [37] Ptr32 _OBJECT_DIRECTORY_ENTRY
    4 +0x094 Lock : _EX_PUSH_LOCK
    5 +0x098 DeviceMap : Ptr32 _DEVICE_MAP
    6 +0x09c SessionId : Uint4B
    7 +0x0a0 NamespaceEntry : Ptr32 Void
    8 +0x0a4 Flags : Uint4B
    对象目录是由多个节点连接而成的树状结构(不考虑符号连接),树的根是一个目录对象,且树中的每个节点都是对象。除根节点之外,所有的中间节点都必须是目录对象或者符号链接对象(OBJECT_SYMBOLIC_LINK对象),普通的对象只能成为叶节点
    看OBJECT_DIRECTORY结构中的第一个元素,是一个OBJECT_DIRECTORY_ENTRY结构指针数组,灭个指针用来维系一个目录项结构的队列,注意,除根节点外,每一个对象都需要借助于目录项结构才能插入目录!
    1 lkd> dt nt!_object_directory_entry
    2 +0x000 ChainLink : Ptr32 _OBJECT_DIRECTORY_ENTRY
    3 +0x004 Object : Ptr32 Void
    4 +0x008 HashValue : Uint4B
    第一个元素仍然指向一个object_directory_entry结构,Object是其连接的对象。
                    
    由上图可以看到目录项可以和具体的普通对象结合插入对象目录,也可以和目录节点对象结合又形成一个目录。
    分析下上面的图:
    根节点是一个目录对象,主体是一个HASH表,这里只表现了其中的两个队列,每一个队列上的目录项(对象)具有相同的HASH值,结合具体的文件便可以轻松理解!
  • 相关阅读:
    C++ string 类的 find 方法实例详解
    linux系统中errno与error对照表
    tshark (wireshark)笔记
    自己签发免费ssl证书
    Go语言练习:网络编程实例——简易图片上传网站
    java开源工具包-Jodd框架
    数据库性能瓶颈解决方案
    [转载]如何快速学习一门技术
    [转载]IBM公司发布了最新的power7服务器p750 p770 p780
    计算机组成原理 — 指令系统
  • 原文地址:https://www.cnblogs.com/ck1020/p/5897473.html
Copyright © 2020-2023  润新知