1、与用户对象的区别
内核对象如:时间、文件映射、文件、邮件槽、互斥量、管道、进程、线程、信号量等。
与用户对象如:菜单、图标、窗口、光标、刷子、字体等
最明显的区别:创建时有内核对象一般具有安全属性,缺省NULL表示只有管理员和创建该内核对象的创建者可以访问,其他都不能访问
2、内核对象归属
属于系统而不是进程,通过计数来决定是否销毁/释放。所有对象的创建都返回一个进程相关的句柄(不同进程的不同对象句柄值是可以相同的)
3、错误检查
一般内核对象创建失败,返回的句柄值通常是0/NULL,可能的原因是内存太少或者安全问题。但是有几个返回-1(INVALID_HANDLE_VALUE),所以要仔细查看MSDN
4、关闭内核对象
一般调用CloseHandle,使得计数减1,内核判断为计数为0后,内核会释放该内核对象。但是某些新的函数可能不需要用户来调用CloseHandle了,看MSDN吧。
5、进程间共享内核对象:
1)设置当前进程中内核对象安全属性可以继承,然后创建子进程(传递继承参数为true),子进程会使得内核对象计数加1。在创建子进程时,把当前所有可继承的内核对象复制了一份。句柄值可以通过参数、消息、环境变量等方式让子进程知道。还可以通过GetHandleInformation和SetHandleInformation来设置句柄的临时的继承属性、是否允许被关闭等。
2)创建命名的内核对象。相关函数:Create... Open...,通过GetLastError判断是否已经存在等。
3)复制对象句柄(DuplicateHandle),特殊用法:复制到当前进程来增加一下计数
1305

被折叠的 条评论
为什么被折叠?



