《windows内核情景分析》句柄和句柄表

    每个进程都有个句柄表,在EPROCESS结构的0xc4偏移处的ObjectTable,类型为_HANDLE_TABLE,用来指向本进程的句柄表

  第一项TableCode是个指针数组,对应为HANDLE_TABLE_ENTRY数据结构,每个有效的句柄都对应着(某个)句柄表中的一个表项

    表项的第一项Object指向某个对象的头部,而该表项在句柄表中的位置则取决于句柄的值。

    在Windows内核中句柄表是个三维稀疏数组。HANDLE_TABLE_ENTRY大小为8个字节,由2个32bit组成。如果第一个32bit值不为0,那么第一个32bit就可以转换成一个指向对象头的指针。HANDLE_TABLE_ENTRY第一个32bit的最高位用作标志。当把一个HANDLE_TABLE_ENTRY第一个32bit转换成对象头的指针时,需要把低3bit设为0,最高位设为1。

    每当创建或者打开了一个对象,要为之创建句柄并将其插入句柄表的时候,就为其准备一个临时的HANDLE_TABLE_ENTRY数据结构,使其

指向这个对象的头部,然后通过ExCreateHandle()将其安装到句柄表中

    ObpKernelHandleTable是ntdll中的一个全局变量,指向系统初始进程SYSTEM的句柄表

   PsInitialSystemProcess是一个全局变量,类型为EPROCESS,为系统初始进程SYSTEM

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章