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核心编程之什么是内核对象(三)

2004年7月7日   晚10:00继续1.内核对象句柄的继承性当父进程创建内核对象时,必须向系统指明,它希望对象的句柄是个可继承的句柄。父进程可以使用一个或多个内核对象句柄,并且该父进程可以决定生成...
  • carbon107
  • carbon107
  • 2004年07月07日 22:03
  • 2231

Windows核心编程:(一)内核对象

一:何为内核对象       每个内核对象都只是一个内存块,它由操作系统内核分配,并只能由操作系统内核访问。这个内存块是一个数据结构,其成员维护着与对象相关的信息。 二:使用计数 ...
  • Windows_and_Linux
  • Windows_and_Linux
  • 2015年03月11日 11:13
  • 439

Windows核心编程 第九章 线程与内核对象的同步(上)

Windows核心编程 第九章 线程与内核对象的同步(上)
  • u013761036
  • u013761036
  • 2016年10月09日 23:58
  • 374

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

近来看了WINDOWS核心编程一书,看的挺过瘾(当然不会就去撞墙,回来再看,呵呵). 为了大家能更快的去了解其中的内容,特写此学习笔记供大家参考。注:本文章可以转载, 标明出处就可以啦在学习c++的时...
  • benny5609
  • benny5609
  • 2007年09月16日 10:11
  • 597

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

2004年7月6日   20点20分 书接上回 1.进程的内核对象句柄表当一个进程被初始化时,系统要为它分配一个句柄表.该句柄表只用于内核对象不用于用户对象或GDI对象.句柄表它只是个数据结构的数组,...
  • carbon107
  • carbon107
  • 2004年07月06日 20:48
  • 1418

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

2004年6月25日 14点近来看了WINDOWS核心编程一书,看的挺过瘾(当然不会就去撞墙,回来再看,呵呵). 为了大家能更快的去了解其中的内容,特写此学习笔记供大家参考。注:本文章可以转载, 标明...
  • carbon107
  • carbon107
  • 2004年06月25日 15:11
  • 2329

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

1.进程的内核对象句柄表当一个进程被初始化时,系统要为它分配一个句柄表.该句柄表只用于内核对象不用于用户对象或GDI对象.句柄表它只是个数据结构的数组,每个结构都包含一个指向内核对象的指针,一个访问屏...
  • benny5609
  • benny5609
  • 2007年09月16日 10:14
  • 596

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

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

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

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

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

【文起】蟹儿的爱一直伴随着,奋斗! 内核对象 1、  定义: 内核对象可以供系统和应用程序使用来管理各种各样的资源,比如线程、进程、文件等。 内核对象就是内核分配的一个内存块,且只能由该内核来...
  • wuhailin1987
  • wuhailin1987
  • 2011年11月19日 21:01
  • 314
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WINDOWS核心编程之什么是内核对象(三)
举报原因:
原因补充:

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