其三章 内核查象(2)

  

进度间共享内核对象

基本对象的句柄是足以被延续的但根本对象自作者是不能够被接续的。

各个句柄都有二个标明位提出该句柄是不是可以被接续。如若创造基础对象时传递的LPSECU本田UR-VITY_ATTCRUISERIBUTES参数位NULL则,重返的句柄是不行三番九次的(标志位为0)把binheritHandle设为TURE就使得标志位为1。

  1. 句柄的接轨:

(1)A:当父进度创建基础对象时,公告OS该对象的句柄能够被接续。父进度须分配和初叶化3个SECU凯雷德ITY_ATTHighlanderIBUTES结构,并把该协会的地方传递给一定的Create*函数。

B:父进度使用Create
Process函数派生出子进度(binherit Handles参数位TRUE时子进度将三番7回父过程的可延续句柄,不然为FALSE则不足持续)。

1将父进度的可继续句柄精确拷贝到子进度的句柄表中(那样使得表示2个内和对象的句柄值在父子进度中是一致的)。

2基石对象的运用计数扩展1,(父进度可及时关闭该目的的句柄而步影响子进程操作对象的力量,子进度也不必然先甘休。子父进度须分别调用Close Handle函数关闭进度)

目的句柄的一而再只产生在派生的那一刻,之后父进度再次创下制带可继续句柄的水源对象,那一个句柄是不可能被曾经运营着的子进度所继承的。

(2)改变句柄标志

父进度可以经过变更内查对象句柄继承标志来控制将3个带可继续的句柄的内核查象,让那些派生对象来三番七回内核对象的句柄。

BOOL Set Handle Information(HANDLE hobject,DWORD dwMask,DWORD dwFlages)

Hobject 标识1个灵光的句柄
dwMask要改成哪个或怎么着标志 dwFlages 将标志位设成的值

  1. 命名内核对象:

(1)Process
A进程在开创内和目的时将内和对象命名,再用Create*创办一个新的Process B进程时钦命与原先创立的水源对象同名的水源对象时:

A:系统第二要查看是不是曾经存在钦命名字的基础对象。

B:若真正存在八个涵盖该名字的靶子,则基本要反省对象的种类,系统会举办3次安全检查,以明确调用者是不是具有对该指标的完全的访问权。

C:假使具有这种访问权,系统就在Process B的句柄表中找出多个空项目,并对该品种展开发轫化,使该类型针对现有的根本对象。对象的应用计数被递增,假若为bInheritHandle参数传递TURE,那么再次来到的句柄将是可继承的。

D:倘若该目的类型不合作,可能调用者被拒绝访问,Create*将运转战败(再次回到NULL)那八个进度中的句柄值很恐怕是见仁见智的值。

(2)按名字共享对象的另一种艺术是,进度不调用Create*函数,而是调用Open*函数。调用Create*函数与调用Open*函数之间的重点差别是:假设指标并不存在那么Create*函数将创立该目的,而Open*函数则运转战败。

(3) 为了保证对象的唯一性,建议创造二个GUID,并将GUID的字符串表达式用作对象名。命名对象平日用来严防运维一个应用程序的四个实例。

(4) 终端服务器拥有基本对象的多个名字空间。借使存在八个可供内核对象使用的全局名字空间,就意味着它能够供全数的客户程序会话访问。该名字空间最重要供服务程序使用。每一个客户程序会话都有它本人的名字空间。它能防备运维相同应用程序的三个或几个会话之间出现互相干扰的场合,约等于说一个会话无法访问另2个会话的靶子,纵然该指标具备同样的名字。

服务程序的名字空间对象总是放在全局名字空间中。暗许在终端服务器中,应用程序的命名内核查象将放入会话的名字空间中。能够用“
Global /”或“Local”置于对象名的前边,任务名对象进入全局名字空间或会话的名字空间。

HANDLE h = Create Event(NULL, FALSE, FALSE,
“Global//MyName”):

  1. 复制对象句柄

能够通过DuplicateHandle函数来复制内核对象的句柄来达成进度间共享内核查象。

BOOL DuplicateHandle(HANDLE
hSourseProsessHandle,

HANDLE hSoureseHandle, HANDLE hTargetProcessHandle,

PHANDLE phTargetHandle, DWORD dwDesiredAccess,

BOOL bInheritHandle, DWORD dwOptions);

hSourseProsessHandle源进程的根本对象句柄,hTargetProcessHandle目的经过的根本对象句柄。

hSoureseHandle 源内和对象的句柄,phTargetHandle指标基本对象的句柄(是HANDLE变量的地点,它将吸收获取源进度句柄新闻拷贝的花色目录。再次回到的句柄值与hTargetProcessHandle标识的进程有关)

dwOptions参数能够是0(零),也能够是上边七个标志的其它组合:DUPLICATE_SAME_ACCESS和DUPLICATE_CLOSE_SOURCE

A:假诺设定了DUPLICATE_SAME_ACCESS指标经过的句柄拥有与源进度句柄相同的访问屏蔽。使用该标志将使函数忽略它的dwDesiredAccess参数。

B:即使设定了DUPLICATE_CLOSE_SOU帕杰罗CE标志,则可以关闭源进度中的句柄。该标志使得2个进度能够很简单地将根本对象传递给另3个经过。当使用该标志时,内核查象的选取计数不会碰到震慑。

相关文章