CSDN博客

img carbon107

WINDOWS核心编程之什么是内核对象(三)

发表于2004/7/7 22:03:00  2206人阅读

分类: windows核心编程

2004年7月7日   晚10:00

继续

1.内核对象句柄的继承性

当父进程创建内核对象时,必须向系统指明,它希望对象的句柄是个可继承的句柄。父进程可以使用一个或多个内核对象句柄,并且该父进程可以决定生成一个子进程,为子进程赋予对父进程的内核对象的访问权。

 

注意啦:虽然内枋对象句柄具有继承性,但是内核对象本身不具有继承性.

 

2.创建能继承的句柄

父进程只要指定SECURITY_ATTRIBUTES 结构中的bInheritHandle为真, 然后将该结构的地址传递给特定的Create函数(创建内核对象的函数)

 

在内核对象句柄表中的标志,它就是用来指明该句柄是否具有继承性的。如果bInheritHandle1,那么标志位就置为1,否则为0;

 

注意:对象句柄的继承性只有在生成子进程的时候才能使用,如果父进程准备创建带有可继承句柄的新内核对象,那么已经在运行的子进程将无法继承这些新句柄。

 

3.如何生成子进程

CreateProcess(….)其中参数bInheritHandles设为TRUE, 那么子进程就可以继承父进程的可继承句柄值了。此时系统为子进程创建一个新的和空的句柄表,因为设定了bInheritHandleTRUE,那么它要遍历父进程的句柄表,对于它找到的包含有效的可继承句柄的每个项目,系统会将该项目copy到子进程的句柄表。该项目copy到子进程的句柄表中的位置将与父进程的句柄平中的位置完全相同。也就是说父进程与子进程中,标识内核对象所使用的句柄值是相同的.另外,系统还要递增内核对象的使用计数,

注意:CreateProcess函数返回后,父进程可以立即关闭对象的句柄,而不影响子进程对该对象进行操作的能力

 

4.改变句柄的状态

当父进程创建了一个内核对象,然后又生成了两个子进程,父进程只想让一个子进程来继承对象的句柄。若要改变内核对句柄的继承标志,可以调用SetHandleInformation函数

BOOL SetHandleInformation(HANDLE hObject, DWORD dwMask, DWORD dwFlags);

hObject参数标识一个有效的句柄, dwMask告诉该函数想要改变哪个或哪几个标志,可选择的有HANDLE_FLAG_INHERIT   HANDLE_FLAG_PROTECT_FROM_CLOSE, dwFlags指明想将该标志设置成什么值

 

待续........

0 0

相关博文

我的热门文章

img
取 消
img