持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第5天,点击查看活动详情
简介
句柄:通过一个数值获取一大堆数据的东西叫做句柄。指针类似于句柄,但是指针他具有实际存在是内存地址,但是指针具有和句柄相同的功能。他是用于与操作系统交流的东西。而且这个句柄是由操作系统所指定的,唯一的。句柄服从于操作系统,而操作系统管不了指针。
Handle从本质上说 他是一个32位的无符号整型,可以用它来表示一个内核对象。但是他没有实际的内核对象(这就是和指针的区别)。用户模式下的程序永远不可能获得一个内核对象的实际地址(一般情况下)。
Handle的意义
他实际的作用是作为一个索引在一个表中查找对应的内核对象的实际地址。而这个表就是句柄表,每一个进程都会有一个句柄表,表的第一项就是进程自己的句柄。
Handle他其实就是一个代表一个内核对象的整数值的中间量。可以在程序中使用handle来代表想要操作的内核对象。这里的内核对象包括:事件(Event)、线程、进程、Mutex等。我们最常见的就是文件句柄(file handle)。
但是最注意的是,Handle只可以在他所属的进程中有意义,别的进程中在咋用都不会有反应。但是如果想强行使用,那会需要使用DuplicateHandle()。
进程
进程ID是一个32位无符号整数(和handle是同样的类型),每个进程都有这样的一个唯一的ID,同时他在系统范围内也是唯一的。系统可以通过这个ID来 确定是哪一个进程。如果需要计算这个进程的内核对象的基地址系统也是通过这个进程ID来计算。
如有问题,请动动指教!