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

原创 2007年09月16日 10:15:00
1.内核对象句柄的继承性
当父进程创建内核对象时,必须向系统指明,它希望对象的句柄是个可继承的句柄。父进程可以使用一个或多个内核对象句柄,并且该父进程可以决定生成一个子进程,为子进程赋予对父进程的内核对象的访问权。
 
注意啦:虽然内枋对象句柄具有继承性,但是内核对象本身不具有继承性.
 
2.创建能继承的句柄
父进程只要指定SECURITY_ATTRIBUTES 结构中的bInheritHandle为真, 然后将该结构的地址传递给特定的Create函数(创建内核对象的函数)
 
在内核对象句柄表中的标志,它就是用来指明该句柄是否具有继承性的。如果bInheritHandle为1,那么标志位就置为1,否则为0;
 
注意:对象句柄的继承性只有在生成子进程的时候才能使用,如果父进程准备创建带有可继承句柄的新内核对象,那么已经在运行的子进程将无法继承这些新句柄。
 
3.如何生成子进程
用CreateProcess(….)其中参数bInheritHandles设为TRUE, 那么子进程就可以继承父进程的可继承句柄值了。此时系统为子进程创建一个新的和空的句柄表,因为设定了bInheritHandle为TRUE,那么它要遍历父进程的句柄表,对于它找到的包含有效的可继承句柄的每个项目,系统会将该项目copy到子进程的句柄表。该项目copy到子进程的句柄表中的位置将与父进程的句柄平中的位置完全相同。也就是说父进程与子进程中,标识内核对象所使用的句柄值是相同的.另外,系统还要递增内核对象的使用计数,
注意:CreateProcess函数返回后,父进程可以立即关闭对象的句柄,而不影响子进程对该对象进行操作的能力
 
4.改变句柄的状态
当父进程创建了一个内核对象,然后又生成了两个子进程,父进程只想让一个子进程来继承对象的句柄。若要改变内核对句柄的继承标志,可以调用SetHandleInformation函数
BOOL SetHandleInformation(HANDLE hObject, DWORD dwMask, DWORD dwFlags);
hObject参数标识一个有效的句柄, dwMask告诉该函数想要改变哪个或哪几个标志,可选择的有HANDLE_FLAG_INHERIT   HANDLE_FLAG_PROTECT_FROM_CLOSE, dwFlags指明想将该标志设置成什么值
 
待续........
 

windows核心编程<读书笔记三>内核对象

【文起】蟹儿的爱一直伴随着,奋斗! 内核对象 1、  定义: 内核对象可以供系统和应用程序使用来管理各种各样的资源,比如线程、进程、文件等。 内核对象就是内核分配的一个内存块,且只能由该内核来...

Windows核心编程(三)内核对象

1、内核对象: 通过API来创建,每个内核对象是一个数据结构,对应一块内存,由操作系统内核分配,并且只能由操作系统内核访问。在此数据结构中少数成员(如安全描述符和使用计数)是所有对象都有的,但其他大...

《windows核心编程系列》三谈谈内核对象及句柄的本质

http://blog.csdn.net/ithzhang/article/details/7920204                              内核对象     ...

《windows核心编程系列》三谈谈内核对象及句柄的本质

2012、8、29 http://blog.csdn.net/ithzhang/article/details/7920204转载请注明出处!                         ...
  • ithzhang
  • ithzhang
  • 2012年08月29日 14:45
  • 10306

《windows核心编程系列》三谈谈内核对象及句柄的本质

内核对象     本章讨论的是相对抽象的概念,不涉及任何具体的内核对象的细节而是讨论所有内核对象的共有特性。 首先让我们来了解一下什么是内核对象。内核对象通过API...

《Windows核心编程》——三 内核对象

前言 内核对象用于管理进程、线程和文件等诸多种类的大量资源。 3.1 何为内核对象 内核对象包括访问令牌对象、事件对象、文件对象、文件映像对象、I/O完成端口对象、作业对象、邮件槽对象、互斥量对象、...

FW:《windows核心编程》学习笔记(一)内核对象

Link:http://www.winu.cn/space-14160-do-blog-id-28428.html 1.内核对象:     1).符号对象     2).事件对象  ...

Windows核心编程学习八:事件内核对象

注:源码为学习《Windows核心编程》的一些尝试,非原创。若能有助于一二访客,幸甚。 1.程序框架 /* * 文件:Handshake.cpp * 时间:2013-07-10 * 描述:学...

Windows核心编程——》第三章 内核对象

1.什么是内核对象 内核对象是由内核分配的一块内存,它只能被内核访问。 这块内存存储着一个保存着内核对象信息的数据结构。 2.如何访问内核对象 应用程序不能直接访问内核对象,只能通...

windows核心编程系列学习记录3——内核对象

内核对象
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WINDOWS核心编程之什么是内核对象(三)
举报原因:
原因补充:

(最多只允许输入30个字)