3.2.1 创建内核对象
当进程初次被初始化时,它的句柄表是空的。然后,当进程中的线程调用创建内核对象的
函数时,比如C r e a t e F i l e M a p p i n g,内核就为该对象分配一个内存块,并对它初始化。这时,内
核对进程的句柄表进行扫描,找出一个空项。由于表3 - 1中的句柄表是空的,内核便找到索引1
位置上的结构并对它进行初始化。该指针成员将被设置为内核对象的数据结构的内存地址,访
问屏蔽设置为全部访问权,同时,各个标志也作了设置(关于标志,将在本章后面部分的继承
性一节中介绍)。
下面列出了用于创建内核对象的一些函数(但这决不是个完整的列表):
用于创建内核对象的所有函数均返回与进程相关的句柄,这些句柄可以被在相同进程中运
行的任何或所有线程成功地加以使用。该句柄值实际上是放入进程的句柄表中的索引,它用于
标识内核对象的信息存放的位置。因此当调试一个应用程序并且观察内核对象句柄的实际值时,
会看到一些较小的值,如1,2等。请记住,句柄的含义并没有记入文档资料,并且可能随时变
更。实际上在Windows 2000中,返回的值用于标识放入进程的句柄表的该对象的字节数,而不
是索引号本身。
当进程初次被初始化时,它的句柄表是空的。然后,当进程中的线程调用创建内核对象的
函数时,比如C r e a t e F i l e M a p p i n g,内核就为该对象分配一个内存块,并对它初始化。这时,内
核对进程的句柄表进行扫描,找出一个空项。由于表3 - 1中的句柄表是空的,内核便找到索引1
位置上的结构并对它进行初始化。该指针成员将被设置为内核对象的数据结构的内存地址,访
问屏蔽设置为全部访问权,同时,各个标志也作了设置(关于标志,将在本章后面部分的继承
性一节中介绍)。
下面列出了用于创建内核对象的一些函数(但这决不是个完整的列表):
用于创建内核对象的所有函数均返回与进程相关的句柄,这些句柄可以被在相同进程中运
行的任何或所有线程成功地加以使用。该句柄值实际上是放入进程的句柄表中的索引,它用于
标识内核对象的信息存放的位置。因此当调试一个应用程序并且观察内核对象句柄的实际值时,
会看到一些较小的值,如1,2等。请记住,句柄的含义并没有记入文档资料,并且可能随时变
更。实际上在Windows 2000中,返回的值用于标识放入进程的句柄表的该对象的字节数,而不
是索引号本身。