第三章 内核对象(1)

来源:互联网 发布:淘宝联盟 易语言源码 编辑:程序博客网 时间:2024/05/18 04:01

内核对象有访问令牌对象,事件对象,文件对象,文件映射对象等。

几乎所有创建内核对象的函数都有一个允许我们指定安全属性信息的参数,这点与用户对象或者GDI对象不同。

内核对象都包含一个引用计数,初次创建时被设为1,再次被使用时增加,当使用计数变成0时,操作系统内核才会销毁改对象。不是调用一次CloseHandle就销毁改对象,调用CloseHandle只是将改对象的引用计数-1.

跨进程边界共享内核对象:

1.使用文件映射对象,可以再同一台机器运行的两个不同进程之间共享数据块。

2.借助有键槽和命名管道,在网络中发送数据块。

3.互斥量,信号量和事件允许不同进程中线程同步执行。


对象句柄继承:

一般使用Create系列函数创建内核对象时,安全描述都为NULL,获得系统默认安全属性,当希望子进程继承父进程句柄时。

1.SECURITY_ATTRIBUTES sa;

sa.bInheritHandle = TRUE;

HANDLE hMutex = CreateMutex(&sa, FALSE, NULL);

然后使用父进程生成子进程。

2.CreateProcess第五个参数为BOOL bInheritHandles,设置为TRUE,表示子进程继承父进程中“可继承句柄”。

如果该句柄可继承,我们不希望它能够继承怎么办?

SetHandleInformation(hObj, HANDLE_FLAG_INHERIT, 0);如果要使句柄重新可继承,第三个参数设置为1即可。


这1/2章都是一些理论的东西,没有代码,理解起来吃力还乱糟糟的。

0 0
原创粉丝点击