Win7 比较 xp下ObjectHeader中的内容有所变化,xp直接在OBJECT_HEADER里保存了POBJECT_TYPE指针,而Win7中把所有的对象类型放在了一个表里,这个表叫做ObTypeIndexTable。可以这么定义为:
POBJECT_TYPE ObTypeIndexTable[0x100];
Win7的对象头中不再保存ObjectType指针,而是保存了TypeIndex,也就是对象类型在该表中的索引,并且提供了一个函数ObGetObjectType。需要取得对象类型时直接使用导出函数ObGetObjectType就可以得到对应的对象类型了,反而比以前方便。
该函数非常简单,还原成代码如下:
POBJECT_TYPE ObGetObjectType( IN PVOID Object) { POBJECT_HEADER ObjectHeader=OBJECT_TO_OBJECT_HEADER(Object); return ObTypeIndexTable[ObjectHeader->TypeIndex]; }
代码很简单,传入一个对象,取对象头中的TypeIndex作为索引,然后返回ObTypeIndexTable中对应的值。
一个简单的获取所有对象类型指针的方法就是:从ObGetObjectType中取ObTypeIndexTable遍历即可
kd> dd ObTypeIndexTable 83f7c900 00000000 bad0b0b0 86344768 863446a0 83f7c910 863445d8 863e2040 863e2f00 863e2e38 83f7c920 863e2d70 863e2ca8 863e2be0 863e2528 83f7c930 863fe418 863fe350 86405040 86405208 83f7c940 86405140 864092f8 86409230 86409168 83f7c950 863ffc90 863ffbc8 863ffb00 863ffa38 83f7c960 863ff970 863ff8a8 863ff7e0 863ff718 83f7c970 863ff650 86406f78 86406eb0 86406de8