Win7 _Object_header 中的 TypeIndex

时间:2022-07-31 19:34:00

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 bad0b0b0 863446a0
83f7c910 863445d8 863e2040 863e2f00 863e2e38
83f7c920 863e2d70 863e2ca8 863e2be0 863e2528
83f7c930 863fe418 863fe350
83f7c940 864092f8
83f7c950 863ffc90 863ffbc8 863ffb00 863ffa38
83f7c960 863ff970 863ff8a8 863ff7e0 863ff718
83f7c970 863ff650 86406f78 86406eb0 86406de8