好久沒來了!最近在整理以前的一些筆記,也希望把以前學過但沒記下來的東西補全,於是這是新一輪複習的第一篇。
一、一些概念
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...