首页  > c罗世界杯表现 > [Windows] CloseHandle到底做了什么

[Windows] CloseHandle到底做了什么

c罗世界杯表现 2025-12-13 07:50:33 5427

内核对象的句柄是进程独立的,同一个内核对象,可以有N个句柄,每个进程都可以持有同一个内核对象的一个句柄。

进程要么通过创建内核对象的方式获得 一个句柄,要么通过打开一个已经存在的内核对象获得一个句柄。

单个进程打开句柄的最大数量是 2的24 次方个。注意这里是单进程,也就是说每个进程都可以打开这么多。

但是,句柄存储在内核地址区域,因此最大句柄数量也受物理内存容量的约束。

任何进程都可以通过api创建一个句柄来引用某个已经创建的内核对象。只要知道内核对象的名称即可完成此操作。

可见,内核对象是内核级别的,句柄是进程级别的,每个进程都可以有自己的句柄指向那个内核对象,内核为我们 维护计数器,当所有进程中指向内核对象的句柄都关闭时,内核对象被系统回收。 此外,内核对象是由名字的,任何进程都可以通过这个名字来创建一个指向这个内核对象的句柄。

每种内核对象都有自己特定的一套权限控制。

很多内核对象都支持在单个进程中创建多个句柄,前提是需要知道内核对象的名字。比如CreateEvent 和 OpenEvent。 这样可以产生多个HANDLE,而且每个HANDLE都可以独立设置自己的权限控制。

如果想复制HANDLE,则可以通过DuplicateHandle来创建一个一模一样的HANDLE。

(!)当且仅当所有进程对于某个内核对象的HANDLE都被关闭,这个内核对象才会被销毁,windows中这很危险,一旦有 一个持有很多内核对象HANDLE的进程卡死了,那么这些内核对象都不会释放。

应用程序退出时会自动回收自己创建的所有HANDLE。


友情链接:
Copyright © 2015 冲击世界杯_2002韩日世界杯 - 0534pos.com All Rights Reserved.