20-深入理解内核对象
深入理解内核对象
1.内核对象
Windows 中每个内核对象都只是一个内存块,它由操作系统内核分配,并只能由操作系统内核进行访问,应用程序不能在内存中定位这些数据结构并直接更改其内容。这个内存块是一个数据结构,其成员维护着与对象相关的信息。少数成员(安全描述符和使用计数)是所有内核对象都有的,但大多数成员都是不同类型对象特有的。
如:file 文件对象、event 事件对象、process 进程、thread 线程、iocompletationport 完成端口(windows 服务器)、mailslot 邮槽、mutex 互斥量和 registry 注册表等。
2.内核对象的使用计数与生命期
内核对象的所有者是操作系统内核,而非进程。换言之也就是说当进程退出,内核对象不一定会销毁。
操作系统内核通过内核对象的使用计数,知道当前有多少个进程正在使用一个特定的内核对象。初次创建内核对象,使用计数为 1。当另一个进程获得该内核对象的访问权之后,使用计数加1。如果内核对象的使用计数递减为 0,操作系统内核就会销毁该内核对象。也就是说内核对象在当前进程中创建,但是当前进程退出时,内核对象有可能被另外一个进程访问。这时,进程退出只会减少当前进程对引用的所有内核对象的使用计数,而不会减少其他进程对内核对象的使用计数(即使该内核对象由当前进程创建)。那么内核对象的使用计数未递减为 0,操作系统内核不会销毁该内核对象。
注意
当内核对象被创建时,引用计数就是2。(被创建的时刻为1,同时被访问了,因此再+1)
发布于