ACCESS老三段 内核对象(2)

  

过程中共享内核对象

基本对象的词柄是得让连续的而基本对象自我是未克吃接续的。

每个词柄都起一个标明位指出该词柄是否好叫接续。如果创建基础对象时传递的LPSECURITY_ATTRIBUTES参数号NULL则,返回的语句柄是不行延续的(标志位也0)把binheritHandle设为TURE就叫标志位吗1。

  1. 句柄的持续:

(1)A:当父进程创造基础对象时,通知OS该目标的词柄能够被接续。父进程须分配和初始化一个SECURITY_ATTRIBUTES结构,并拿欠组织的地方传递给一定的Create*函数。

B:父进程使Create
Process函数派生出子进程(binherit Handles参数各类TRUE时子进程将延续父亲进程的但继承句柄,否则也FALSE则不足连续)。

1用爸爸进程的只是继承句柄精确拷贝到子进程的语句柄表中(这样叫表示一个舅以及对象的词柄值在父子进程中凡是同等的)。

2基础对象的使计数增加1,(父进程而立刻关闭该对象的词柄而步影响子进程操作对象的力量,子进程也不自然先罢。子父进程要分别调用Close Handle函数关闭进程)

靶句柄的持续只来在派生的那一刻,之后父亲进程再创带可承句柄的本对象,这些词柄是匪能够叫曾经运行着的子进程所继承的。

(2)改变句柄标志

爸爸进程可以通过反内核对象句柄继承标志来支配以一个带可承的句柄的本对象,让好派生对象来持续内核对象的句柄。

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

Hobject 标识一个行之有效之词柄
dwMask要改变哪个要怎样标志 dwFlages 将表明位而成的值

  1. 命名内核对象:

(1)Process
A进程在开创内与目标时用内及对象命名,再用Create*创立一个新的Process B进程时指定同原先创设的木本对象同名的水源对象时:

A:系统率先要查阅是否已存在指定名字的基本对象。

B:若真的存在一个暗含该名的靶子,则基本而反省对象的类,系统会实行同样涂鸦安全检查,以确定调用者是否有所对该对象的完整的访问权。

C:如果拥有这种访问权,系统即于Process B的语句柄表中找寻有一个缺损项目,并对拖欠种展开初始化,使该档针对现有的水源对象。对象的运计数被递增,如果为bInheritHandle参数传递TURE,那么回的语句柄将是可继续的。

D:如果该目标类型不配合,或者调用者被驳回访问,Create*以运行失败(返回NULL)这点儿只经过中的词柄值很可能是殊之价值。

(2)按名共享对象的别一样栽办法是,进程不调用Create*函数,而是调用Open*函数。调用Create*函数和调用Open*函数之间的显要出入是:如果目标并无设有那么Create*函数将开创该对象,而Open*函数则运行失败。

(3) 为了保险对象的唯一性,建议创建一个GUID,并将GUID的字符串表达式用作对象名。命名对象时用来防护运行一个应用程序的几近单实例。

(4) 终端服务器拥有基本对象的基本上独名字空间。如果有一个可供应本对象下的大局名字空间,就象征她可供所有的客户程序会话访问。该名空间要供应服务程序使用。每个客户程序会话都发出她和谐之名字空间。它会防范运行相同应用程序的点滴个或多个会话之间出现彼此干扰的事态,也就是说一个对话无法访问另一个会话的靶子,尽管该目标有同等之名字。

服务程序的名字空间对象总是在全局名字空间被。默认在终端服务器中,应用程序的命名内核对象将放入会话的名空间被。可以为此“
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_SOURCE标志,则好关闭源进程遭到之句柄。该标志使得一个过程会挺易地用根本对象传递让另外一个历程。当以该标志时,内核对象的使用计数不会见受到震慑。

相关文章