今天有朋友问到,什么是句柄,什么是handle,什么是进程标识符,什么又是PID?
句柄就是handle,而进程标识符就是PID,即processId,
那么句柄和标识符又分别是什么?他们之间又有何联系?
句柄的声明 typedef void *HANDLE
它句柄的本质就是一个指针,但是它的作用又不同于指针,它又不是真正意义上的指针,或者说说句柄是一个受限的指针。
给你一个指针,你可以拿这个指针做几乎任何事情,给你一个句柄,你只能干一些Windows允许你干的事情。
我们知道Windows是一个以虚拟内存为基础的操作系统。在这种环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。而对象的地址经常变化,那么我们该如何找到这个对象呢?
Windows操作系统内核区维护着一张全局句柄表,全局句柄表里面存放着所有进程内核对象,这张全局句柄表存储单元的位置本身是不变的,而全局句柄表的索引就是PID。
如此我们通过句柄就可以间接地知道对象的地址。
这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。