内核对象与进程
使用内核对象的步骤:(4步)
- 创建对象(createXXXX)
- 打开对象,得到句柄(一般与第一步合并)
- 通过API访问对象
- 关闭句柄
- 句柄全部关完,对象自动销毁
内核对象的一些基本属性:
1.内核对象是跨进程的
2.每个内核对象都有一个引用计数(引用计数为0时,内核对象才会自动销毁)
3.对象的安全属性;一旦内核对象以某种属性创建,之后便只能在规定的权限内工作
三种方式实现跨进程访问内核句柄:
1.父进程继承给子进程
2.使用DuplicateHandle()函数,将句柄从一个进程传递到另外一个进程
3.在进程A中创建内核对象的时候,给内核对象命名,在进程b中就可以通过名字打开内核对象
在一个进程的句柄表中添加句柄有以下几种形式:
1.子进程继承父进程句柄表中的句柄
2.使用DuplicateHandle()函数打开对象,获取句柄
3.创建对象时候打开,如CreateXXXX
4.显式打开:OpenXXXX
句柄:具有指定权限和属性的访问句柄
一个句柄代表对于对象的打开操作,句柄的权限是指本次打开对象时,当初申请得到的访问权限,以后凡是对于这个句柄的操作都不能当初打开时申请得到的访问权限
一个进程至少包含了:
1.一个虚拟内存空间
2.在内存空间中,有映射进来的exe文件以及与程序运行相关的dll,EXE与dll称为模块
3.进程内核对象,至少包含了:进程的内核对象句柄表,进程的权限,进程的全局唯一ID值
4.至少运行着一个线程