Windows内核对象浅介
1.什么是Widnows内核对象
内核对象是系统和应用程序用于管理各种资源的(比如进程、线程、文件等等)的一种数据结构,由内核管理,对应用程序不透明,即应用程序不能访问其数据结构。
2.内核对象有哪些
按照类型来分类,内核对象有:访问标记对象,事件对象,文件对象,文件映射对象,I/O完成端口对象,作业对象,信号槽对象,进程对象,线程对象等等。使用Sysinternal工具中的WinObj可以查看所有的内核对象。
3.怎样使用Windows内核对象
通过操作系统提供的CreateXXX或者OpenXXX函数来创建或者打开对应类型的内核对象。比如进程对象:CreateProcess(),OpenProcess()。
4.使用Windows内核对象应该注意的事项
4.1 注意区别内核对象与用户对象(窗口、菜单、鼠标)或者GDI对象(Brush、font、bitmap)。一般创建一个内核对象都需要一个PSECURITY_ATTRIBUTES的结构参数,而所有创建用户对象和GDI对象的函数都不需要PSECURITY_ATTRIBUTES这个结构参数。
4.2 内核对象的句柄值是与进程相关的,也就是说不能简单的将句柄值传递给另外一个进程使用。内核对象共享有三种方式:继承、命名内核对象、使用DuplicateHandle函数复制内核对象句柄。
4.3 内核对象是由内核管理的,也就是说与你的应用程序无关,可能你的应用程序已经关闭,但是内核对象还继续存在。操作系统内核使用引用计数来判断是否销毁内核对象,如果一个内核对象的引用计数值为0,内核就会销毁这个内核对象。创建、打开、共享一个内核对象都会使得内核对象的引用+1,所以当你的应用程序不再需要某个内核对象时,就应该调用CloseHandle()函数,使得内核对象计数-1。
4.4 使用CloseHandle()函数并不会是的内核对象管理的资源(比如线程、进程)终止。调用CloseHandle()函数只使得你不能再通过那个handle句柄值来获取内核对象的相关信息了。