Windows核心编程之3 内核对象

3 内核对象


3.1

哪些是Windows的内核对象

比如:令牌对象,事件对象,文件对象,目录对象,文件映射对象,IO完成端口,互斥量,线程对象,进程对象,作业,管道,等等。

内核对象有操作系统管理,返回HANDLE  它是指针,指向一个由操作系统管理的内核对象表.

3.1.1 使用计数

操作系统知道内核对象的使用计数,当计数为0,由操作系统负责销毁内核对象.


3.1.2 内核对象的安全性

SECURITY_ATTRIBUTES 结构体来描述

3.2 进程内核对象句柄表

 

3.2.1 创建内核对象 
创建一个内核对象,它是与进程相关的,就是说只能在创建的那个进程使用,其他进程不知道这个内核对象.

3.2.2 关闭内核对象

Closehandle 函数来关闭内核对象. 不关闭内核对象,会造成资源泄露。但是进程退出时,进程的所有资源都被操作系统收回。

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

有三种不同的机制来允许进程共享内核对象:

1 使用对象句柄继承

2 为对象命名

3 复制对象

3.3.1 使用对象句柄继承

只有进程之间有父子关系时才可以使用对象句柄继承。

安全描述的结构体需要把继承的标志位置为true

然后通过CreateProcess完成

3.3.2 改变句柄的标志

SetHandleInformation来改变内核对象的继承句柄

GetHandleInformation来得到内核对象的是否继承

 

3.3.3 为内核对象命名

HANDLE CreateMutex(

PSECURITY_ATTRIBUTES psa,

BOOL bInitialOwner,

PCTSTR pszName);

最后一个接收“以0为终止符的字符串”所以的内核对象都使用一个名字空间,如果重名的话,内核对象创建失败.

如果有一个同名的内核对象,那么CreateXX函数返回 ERROR_INVALID_HANDLE

getlastError 返回ERROR_ALREADY_EXISTS 表示存在.

可以使用OpenXX来打开一个内核对象

 

你可能感兴趣的:(windows,核心编程)