关于Windows内核对象句柄在进程空间内的存储

当一个进程被初始化时,系统会为它分配一个句柄表。该句柄表只用于内核对象(简单的说就是由CreateFile, CreateMutex, CreateXXXX这类函数创建的对象),不用于用户对象或G D I 对象。

下表显示了进程的句柄表的样子,它是个数据结构的数组。每个结构都包含一个指向内核对象的指针、一个访问屏蔽和一些标志。

索引 内核对象内存块的指针 访问屏蔽(标志位的D W O R D ) 标志(标志位的D W O R D )
1 0 x ? ? ? ? ? ? ? ? 0 x ? ? ? ? ? ? ? ? 0 x ? ? ? ? ? ? ? ?
2 0 x ? ? ? ? ? ? ? ? 0 x ? ? ? ? ? ? ? ? 0 x ? ? ? ? ? ? ? ?
... ... ... ...

 

创建内核对象时获得的HANDLE值 如hFile, 进行右移2位(hFile>>2),得到的即是表中的索引值,所以调试程序时常看到句柄值为偶数结尾。不同进程中直接传递HANDLE是无意义的, 内核对象的内存指针并没有传递过去。

你可能感兴趣的:(数据结构,windows,存储)