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

原创 2004年07月07日 22:03:00

2004年7月7日   晚10:00

继续

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

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

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

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

 

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指明想将该标志设置成什么值

 

待续........

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

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

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

1.内核对象句柄的继承性当父进程创建内核对象时,必须向系统指明,它希望对象的句柄是个可继承的句柄。父进程可以使用一个或多个内核对象句柄,并且该父进程可以决定生成一个子进程,为子进程赋予对父进程的内核对...
  • benny5609
  • benny5609
  • 2007年09月16日 10:15
  • 573

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

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

《Windows核心编程》之“内核对象”

内核对象(Kernel Object)是Winodws操作系统中最核心的一个概念,本文将对整个抽象的概念进行一些探索。 一、什么事内核对象 1,内核对象是对操作系统各项资源的抽象。     Windo...
  • Sagittarius_Warrior
  • Sagittarius_Warrior
  • 2016年08月19日 11:17
  • 712

windows核心编程-互斥量的内核对象

互斥量(mutex)内核对象用来确保一个线程独占对一个资源的访问。互斥量对象包含一个使用计数、线程ID 以及一个递归计数。互斥量与关键段的行为完全相同。但是,互斥量是内核对象,而关键段是用户模式下的...
  • qq_22423659
  • qq_22423659
  • 2016年12月07日 16:24
  • 232

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

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

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

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

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

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

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

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

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

1、内核对象: 通过API来创建,每个内核对象是一个数据结构,对应一块内存,由操作系统内核分配,并且只能由操作系统内核访问。在此数据结构中少数成员(如安全描述符和使用计数)是所有对象都有的,但其他大...
  • woshibendangao
  • woshibendangao
  • 2014年03月22日 20:40
  • 843
收藏助手
不良信息举报
您举报文章:WINDOWS核心编程之什么是内核对象(三)
举报原因:
原因补充:

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