複習 windows物件管理(1)核心物件組織結構

2021-06-17 14:49:21 字數 3518 閱讀 4835

好久沒來了!最近在整理以前的一些筆記,也希望把以前學過但沒記下來的東西補全,於是這是新一輪複習的第一篇。

一、一些概念

xp下核心物件的布局結構如下(由低到高):

object quota info

object handle info

object name info

object creater info

object_header

object

物件在核心中以雜湊樹的形式儲存,根目錄有37個槽,以下是根目錄的列印輸出

核心自己定義的物件型別也放在物件目錄中,列印如下

0: kd> !object \objecttypes

object: e1009b50  type: (863e9348) directory

objectheader: e1009b38 (old version)

handlecount: 0  pointercount: 26

directory object: e1009030  name: objecttypes

hash address  type          name

---- -------  ----          ----

00  863e9348 type          directory

01  863b2368 type          mutant

863b5ca0 type          thread

03  863c7738 type          filtercommunicationport

05  8639e380 type          controller

06  85da9770 type          360type

07  863b1ad0 type          profile

863b2708 type          event

863e9518 type          type

09  863e9178 type          symboliclink

863b1248 type          section

863b2538 type          eventpair

10  863b1560 type          desktop

11  863b1ca0 type          timer

12  863e7ad0 type          file

863b1730 type          windowstation

16  863e7e70 type          driver

18  863e1d78 type          wmiguid

863b1900 type          keyedevent

19  863e7040 type          device

863b5040 type          token

20  863b5298 type          debugobject

21  863e7ca0 type          iocompletion

22  863b5e70 type          process

24  8639e550 type          adapter

26  863ab420 type          key

28  863b5ad0 type          job

31  8639ee70 type          waitableport

8639e040 type          port

32  863b1040 type          callback

33  863c7908 type          filterconnectionport

34  863b1e70 type          semaphore

物件目錄結構如下

0: kd> dt nt!_object_directory

+0x000 hashbuckets      : [37] ptr32 _object_directory_entry

+0x094 lock             : _ex_push_lock

+0x098 devicemap        : ptr32 _device_map

+0x09c sessionid        : uint4b

+0x0a0 reserved         : uint2b

+0x0a2 symboliclinkusagecount : uint2b

entry 結構如下

0: kd> dt _object_directory_entry

nt!_object_directory_entry

+0x000 chainlink        : ptr32 _object_directory_entry

+0x004 object           : ptr32 void

3.其他內容

object type鍊錶

object查詢解析(parse、open等)

object許可權檢查

控制代碼與控制代碼表

1.可以通過以下**獲得「物件目錄」這個物件的物件型別。

status = obreferenceobjectbyhandle(hrootdir,

directory_all_access,

null,

kernelmode,

(pvoid*)&g_prootobj,

null);

pobject_header poh = (pobject_header)(obj_to_head(g_prootobj));

g_pdirobjecttype = poh->type;

2.遍歷物件樹,遞迴搜尋驅動物件(相容xp~win7)

void searchdriverobjbytree(ulong dir)

isscaneddri((pdriver_object)pobject);

}else if (poh->type == (pvoid)*iodeviceobjecttype)

while (pdev!=0);

}else if (poh->type == (pvoid)g_pdirobjecttype)

}else

isscaneddri((pdriver_object)pobject);

break;

}case ob_device_type_index:

while (pdev!=0);

break;

}default:

break;}}

}dir_entry = *(pulong)dir_entry;

} while (0!=dir_entry);

} }}

測試物件管理

1 uft中物件的概念 uft中的物件有兩個概念,乙個是測試物件,乙個是執行時物件 1 測試物件 test object,to 是uft定義的一些類,用它們代表被測應用的各種物件。2 執行時物件 runtime object,ro 是實際的被測應用物件,是測試執行過程中,to用來關聯的物件。2 uf...

物件管理資源

今天看了下effective c 的條款13 以物件管理資源,感覺十分有理,特此做一下筆記。假設我們使用乙個用來描述投資行為的程式庫,其中各式各樣的投資型別都繼承自乙個根類 investment 投資型別繼承體系中的root class class investment 這裡呢,我們進一步假設這個程...

python 物件管理

演示 class user def new cls,args,kwargs print user new method is running 建立物件由object完成 instance.obkect.new user return.instance 複製 new 方法建立物件時自動執行。覆蓋obj...