关于伪句柄

来源:互联网 发布:淘宝直播号怎么申请 编辑:程序博客网 时间:2024/05/08 02:47

一、什么是伪句柄

在使用很多函数的时候,我们都需要获得一个对象的句柄,而某些函数返回的是伪句柄。伪句柄本身不会打开内核对象的句柄表,因此内核对象的使用计数就不会增加。它本身就只指向调用它的主调进程或线程。会因为调用者的不同而改变,比如:调用者A使用一个伪句柄,这个句柄指向调用者A,而调用者A将该句柄传递给调用者X,则这个句柄就指向调用者X。我们可以通过调试的方式查看伪句柄,可以得知,进程的伪句柄总是0xffffffff,而线程的伪句柄总是0xfffffffe。

通过使用DuplicateHandle这个强大的函数,可以将伪句柄转换为真正的句柄。


顺便说说DuplicateHandle这个函数。该函数不仅仅可以使伪句柄转换为真正的句柄,还可以创建一个内核对象句柄的副本,并因此更改副本的某些属性,达到保护内核对象的目的。也可以将一个进程的内核对象句柄复制到另外一个进程的内核对象句柄表中。关于该函数更多的信息,可以参见《Windows via C/C++》。

二、为什么使用伪句柄

    MICROSOFT为什么这样处理,其实真正的目的可能是:在本身进程和线程中,对句柄没有必要进行权限的限制,而在把句柄交由别的进程或别的线程操作时可能就不怎么放心,一般要加上权限限制,这样就可以减少意外情况的发生。
    至于伪句柄和真实句柄之间的转换和权限限制,可以参考DumplicateHandle函数。


原创粉丝点击