5、SomeObject 的函数来创建内核对象。调用该函数的时候内核就为该对象分配一个内存块,并进行初始化,然后内核再扫描该进程的句柄表,初始化一条记录并放在句柄表中。3、进程中使用内核对象的内部机制假设函数 F 使用某个内核对象,其参数为 Handle1,则该函数内部需要查找该进程的句柄表,找出参数句柄对应的记录,然后才能使用该内核对象。(四)关闭内核对象无论进程怎样创建内核对象,在不使用该对象的时候都应当通过boolCloseHandle(HANDLEhobj) 来向操作系统声明结束对该对象的访问。为什么叫声明呢?是因为此时也许还有其他进程对该对象
6、的访问,操作系统可能并不立即释放该对象。操作系统需要做的是:从进程的句柄表中删除该内核对象的记录,另外再考察该内核对象的使用计数以决定是否需要释放该对象。(五) 内核对象的共享说到共享,与之孪生的就是共享权限。 Windows 内核对象的共享有三种方式:1、继承式共享(父子进程间)只有当进程是父子关系的时候,才能使用此种方式的共享。特别要注意的是继承的是内核对象的句柄,内核对象本身是不具备继承性。要达到这种继承的效果需要做以下几件事:在进程创建内核对象的时候,需要一个安全结构 sa ( SECURITY_ATTRIBUTES 类型,以向 OS 声明
7、对象的访问方式)作为参数。继承式共享需要将结构的成员 sa.bInheritHandle 设置为 TRUE 。此时 OS 内部的处理式将进程的句柄表中的该对象的访问屏蔽字段设置成“可继承”。在创建子进程( CreateProcess 函数)时,设置创建参数 bInheritHandles 为 TRUE 。表示被创建的子进程可以继承父进程中的所有可继承内核对象。 OS 内部的处理是:复制父进程句柄表中的记录到子进程的句柄表中,并使用相同的句柄值;为内核对象的使用计数器加 1 。特别说明:子进程能够继承的的内核对象仅局限于父进程创建它的时候所拥有的可继