一个进程中的句柄值在另一个进程中是无效的

时间:2021-09-24 04:14:21

Windows中有很多像进程东西、线程东西、文件东西等等这样的东西,我们称之为Windows内查东西。内查东西是系统地点空间中的一个内存块,由系统创建并维护。内查东西为内核所拥有,而不为进程所拥有,所以差别进程可以访谒同一个内查东西。

 

 

二.内查东西布局

 

每个东西都有东西头和东西体构成。所有类型的东西头布局都是不异的,而布局体部分却各不不异的。下面是内查东西的布局图:

 

 

 

 

内查东西布局图

 

图中灰色部分是可能呈现的。每个东西中是否存在这些部分主要由OBJECT_HEADER布局中的相关标识表记标帜来指定。上面的5个布局的格局是固定的;而OBJECT布局体部分倒是各个东西各差此外。需要注意的是:指向东西的指针POBJECT是指向东西体部分,而不是指向东西头的。所以,若需要访谒OBJECT_HEADER,需要将POBJCECT减去0x18而获得。

下面是OBJECT_HEADER的布局

 

 

 

typedef struct _OBJECT_HEADER
{
 DWORD PointerCount; // 指针引用的数目
 DWORD HandleCount; // 打开句柄的数目
 POBJECT_TYPE ObjectType;  //指向类型东西的指针
 BYTE NameOffset; //东西名的偏移
 BYTE HandleDBOffset; // HANDLE DB的偏移
 BYTE QuotaChargesOffset; //QUOTA CHARGES的偏移
 BYTE ObjectFlags; // 东西标识表记标帜
 union
{ // 东西标识表记标帜中OB_FLAG_CREATE_INFO ? ObjectCreateInfo : QuotaBlock
 PQUOTA_BLOCK QuotaBlock;
 POBJECT_CREATE_INFO ObjectCreateInfo;
 };
 PSECURITY_DESCRIPTOR SecurityDescriptor;
 }OBJECT_HEADER, *POBJECT_HEADER;

 

 

 

 

三.目录东西

 

WINDOWS中有20几类无数的内查东西,它们都独登时存在于系统地点空间中。系统操作目录东西将所有的这些东西组织起来。目录东西是一个有37个数组元素构成的哈希(HASH)树。数据布局如下:

 

 

Typedef struct _OBJECT_DIRECTORY_ENTY

{

  Struct _OBJECT_DIRECTORY_ENTRY *NextEntry;

  POBJECT Object

}OBJECT_DIRECTORY_ENTRY, *POBJECT_DIRECTORY_ENTRY,**PPOBJECT_DIRECTORY_ENTRY;

 

Typedef struct _OBJECT_DIRECTORY

{

  POBJECT_DIRECTORY_ENTRY HashTable[37];

  POBJECT_DIRECTORY_ENTRY CurrentEntry;

  BOOLEAN CurrentEntryValid;

  BYTE  Reserved1;

  WORD Reserved2;

  DWORD Reserved3;

}OBJECT_DIRECTORY, *POBJECT_DIRECTORY;

 

 

 

 

 

系统将东西名称进行必然的算法得出一个HASH值,算法如下:

 

//按照名字计算HASH值。

hash = 0;

p = (PSHORT)wStr; //存放名称的一个WCHAR数组

while(*p)

{

Symb = (CHAR)*p;

hash = hash * 3 + (hash >> 1);

 

if (Symb < ‘a‘)  //<a

hash= hash  + Symb;

else if (Symb <= ‘z‘)   //即 a~z

hash = hash + Symb - 0x20;

else          // > z

hash = hash + (CHAR)RtlUpcaseUnicodeChar((WCHAR)*p);

 

p ++;

}

hash = hash % 37;  //最终的hash值。

 

 

 

 

 

系统将所有不异HASH值的东西链接到响应的数组项中,于是系统中所有元素将摆列成如下的布局图:

 

 

 

 

系统根目录的东西的指针由ObpRootDirectoryObject来指定。