内核对象

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),特殊用法:复制到当前进程来增加一下计数

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值