句柄表

1. 什么是内核对象?

像进程,线程,文件,互斥体,事件等在内核都有一个对应的结构体,这些结构体由内核负责管理。我们管这样的对象叫做内核对象。

2. 如何管理内核对象?

通过一个叫 "句柄" 的东西

3. 每个进程都有一个句柄表

不是每个内核对象都有句柄表,只有进程内核对象才有句柄表,即句柄表是进程内核对象中的一个成员

4. 多进程共享一个内核对象

句柄表是一个私有的值,句柄只有在本进程中才有意义

CloseHandle 使内核对象的引用计数 - 1,一般情况下引用计数为0了,没有任何指针指向它,这个内核对象就会被移除

但是 进程内核对象和线程内核对象是特例,只有关闭所有的线程句柄和终止掉线程两个条件同时满足的时候,这个线程内核对象才会被移除

5. 句柄是否可以被继承

在创建一个内核对象的时候,一定会有一个参数

typedef struct _SECURITY_ATTRIBUTES {

DWORD nLength;

LPVOID lpSecurityDescriptor;

BOOL bInheritHandle; //该内核对象是否可以被继承

} SECURITY_ATTRIBUTES,

6. 进程是否能够继承父进程的句柄

当用CreateProcess创建进程的时候,第5个参数bInheritHandles如果设置为TRUE,那么父进程句柄表中可以被继承的内核对象句柄就会被继承过去,具体继承方式如上图所示,就是将整个句柄表复制过去,不能继承的填充0,这样的话,在子进程中的句柄值可以与父进程一模一样

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值