向Windows7下移植一个驱动,花了半天时间,一开始还以为Windows7的版本号应该是7.0,写了程序后才知道原来是6.1,汗一个,Windows7在以下地方变动比较大:
1._object_header、_object_type及其其它与这些相关的结构,这块变化应该算比较大的,Vista及其以下版本都是在_object_header结构中保存object_type指针,在Windows7中Object_header只保存Object_type的索引,多了一张Object_type表。但Windows7中添加了一个函数,ObGetObjectType,返回Object_type对象指针,所以操作Object_type不需要硬编码了。
NTKERNELAPI
PVOID
NTAPI
ObGetObjectType(
IN PVOID pObject
);
2.在Vista及其以下系统中,一个线程在KeStackAttachProcess 后没有DetachProcess而直接再调用KeAttachProcess 不会有任何问题。但在Windows7下必须使用KeStackAttachProcess ,若使用KeAttachProcess 会在一段时间后出现莫名其妙的蓝屏。
3.SSDT index与Shadow SSDT index变化,这个显而易见,不说了。
4.EProcess结构中的线程双向链表的偏移还是0x50,但EThread相对与List_Entry的偏移变成-0x1e4,_PEB的偏移变成0x1a0
5.消息钩子注入Dll,KeUserModeCallback的ApiNum变成0x41