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

来源:互联网 发布:linux 分区命令 编辑:程序博客网 时间:2024/05/29 15:32

    每个进程都有个句柄表,在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

原创粉丝点击