您的位置:首页 > 其它

内核对象

2015-12-11 16:10 190 查看
图中红色部分为内核对象的创建过程,绿色为内核对象关闭过程。



几点说明:

1)一个进程当中可以有多个句柄指向同一个内核对象,但是句柄的值是不同的。一个句柄的关闭另一个句柄照常使用。因为内核对象的引用计数器的个数不为0。

2)线程内核对象创建的时候操作系统分配内核对象,并将内核对象的引用计数器设为2,这是因为如果引用计数器设为1的话当在主线程中调用CloseHandle时操作系统就会析构内核对象内存,这是子线程如果没有运行完就会产生严重错误,为了让子线程能够顺利运行结束,将引用计数器设为2。这时当子线程结束之后再将引用计数器减少1,这时再析构内核对象。

3)调用完CloseHandle()之后不要忘记将句柄变量设为NULL,如果不设为NULL,如果再调用该句柄会发生错误,严重情况是如果该句柄索引分配给新的内核对象,并且内核对象的类型和原来的内核对象类型一致,这时程序行为会异常。

4)创建完内核对象之后如果忘记调用CloseHandle(),则会导致进程的句柄表溢出,并且能导致进程运行期间内核对象泄露。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: