进程句柄与进程ID

程序、进程、线程的关系:
以一个比喻来说明:
程序就好比一间工厂的蓝图、设计图;
进程就是这间工厂的实体;
线程就是这间工厂的员工。

结论:由此可以看出,进程(工厂)是静态的,任何操作都是由线程(员工)去完成。
注意:进程与进程之间是互相独立的,互不干扰的。同理,线程与线程之间也是互相独立的,互不干扰的。(进程的本质就是一段内存空间)


进程句柄
进程句柄代表内核对象。进程句柄可以理解为指向指针的指针。


进程句柄和进程ID的区别和关系

进程是一个正在运行的程序 进程里可以包括多个模块(DLL,OCX,等)
进程句柄是程序访问时用到的东西,当前进程句柄等于主模块的句柄,当你使用OpenProcess时的进程句柄是不等于那个句柄的,使用完了还要关闭那个句柄
进程ID是在系统中的标识,一个进程可以有多个句柄但是ID就只有一个,可以通过ID打开多个句柄

进程是内核对象,其ID是一个32位的无符号整数,用于在整个系统中唯一地标志该对象(就象你的身份证号在全国范围内唯一地标志了你一样);你在任何进程中都可使用该ID号访问进程对象;

而进程的句柄则是基于特定进程的,对于同一个进程对象,在不同的进程中可能有不同的句柄值。因为句柄实际上是进程空间中的句柄表的偏移,由于在不同的进程空间中句柄表是不同的,针对相同的对象在句柄表的偏移也就不一样了!

句柄实际是一个指针,他指向一块包含具体信息数据的内存,可以当做索引 ,所以进程句柄是当你要访问该进程时取得的,使用完毕必须释放。

id一般是一个标识符,用来区别不同项

一个进程在不同的调用时间中有可能句柄的值是不一样的,但是ID只有也只能有一个

在Windows有一张指针表(就是指针数组),这些指针指向Windows内的各种对象(Windows概念的对象),其中就包含进行对象。
句柄就就是指针数组的编号。

总结:

进程ID,一个进程被创建后这个进程ID就是不变的。
进程句柄,每次打开这个进程(OpenProcess),返回给你的句柄是变化的

 

posted @ 2017-06-20 20:07  gd_沐辰  阅读(1848)  评论(0编辑  收藏  举报