您的位置:首页 > 其它

由于句柄值实际上是放入进程句柄表的索引,因此这些句柄 是与进程相关的,并且不能由其他进程成功地使用

2012-06-29 09:58 344 查看
用于创建内核对象的所有函数均返回与进程相关的句柄,这些句柄可以被在相同进程中运

行的任何或所有线程成功地加以使用。该句柄值实际上是放入进程的句柄表中的索引,它用于

标识内核对象的信息存放的位置。因此当调试一个应用程序并且观察内核对象句柄的实际值时,

会看到一些较小的值,如1,2等。请记住,句柄的含义并没有记入文档资料,并且可能随时变

更。实际上在Windows 2000中,返回的值用于标识放入进程的句柄表的该对象的字节数,而不

是索引号本身。

每当调用一个将内核对象句柄接受为参数的函数时,就要传递由一个C r e a t e * &函数返回的

值。从内部来说,该函数要查看进程的句柄表,以获取要生成的内核对象的地址,然后按定义

得很好的方式来生成该对象的数据结构。

如果传递了一个无效索引(句柄),该函数便返回失败,而G e t L a s t E r r o r则返回6

(E R R O R I N VA L I D H A N D L E)。由于句柄值实际上是放入进程句柄表的索引,因此这些句柄

是与进程相关的,并且不能由其他进程成功地使用。

如果调用一个函数以便创建内核对象,但是调用失败了,那么返回的句柄值通常是0

(N U L L)。发生这种情况是因为系统的内存非常短缺,或者遇到了安全方面的问题。不过有少

数函数在运行失败时返回的句柄值是-1(I N VA L I D H A N D L E VA L U E)。例如,如果C r e a t e F i l e

未能打开指定的文件,那么它将返回I N VA L I D H A N D L E VA L U E,而不是返回N U L L。当查看

创建内核对象的函数返回值时,必须格外小心。特别要注意的是,只有当调用C r e a t e F i l e函数时,

才能将该值与I N VA L I D H A N D L E VA L U E进行比较。下面的代码是不正确的:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐