句柄(handle)和文件标识符(PID)

今天有朋友问到,什么是句柄,什么是handle,什么是进程标识符,什么又是PID?
句柄就是handle,而进程标识符就是PID,即processId,
那么句柄和标识符又分别是什么?他们之间又有何联系?

句柄的声明 typedef void *HANDLE

它句柄的本质就是一个指针,但是它的作用又不同于指针,它又不是真正意义上的指针,或者说说句柄是一个受限的指针。
给你一个指针,你可以拿这个指针做几乎任何事情,给你一个句柄,你只能干一些Windows允许你干的事情。

我们知道Windows是一个以虚拟内存为基础的操作系统。在这种环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。而对象的地址经常变化,那么我们该如何找到这个对象呢?

Windows操作系统内核区维护着一张全局句柄表,全局句柄表里面存放着所有进程内核对象,这张全局句柄表存储单元的位置本身是不变的,而全局句柄表的索引就是PID。
如此我们通过句柄就可以间接地知道对象的地址。

这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值