windows核心编程<读书笔记三>内核对象

 

【文起】蟹儿的爱一直伴随着,奋斗!

内核对象

1、  定义:

内核对象可以供系统和应用程序使用来管理各种各样的资源,比如线程、进程、文件等。

内核对象就是内核分配的一个内存块,且只能由该内核来访问。这样做是为了确保内核对象结构保持状态的一致。而操作内核对象,只能通过Microsoft提供的一组函数。

2、  内核对象的使用计数:

内核对象是由内核所拥有的,而非进程所拥有的。也就是说,即使创建改内核对象的进程终止运行了,内核对象也可能仍然存在。那么内核对象到底是如何撤销的呢?这就谈到了内核对象的使用计数。

内核对象在被创建时,它的使用计数被置为1,每有一个进程调用它,就会加1;相应的进程终止运行时,内核就会确定该进程仍然打开的所有内核对象的使用计数,如果将为0,那么内核就会撤销该对象。

3、  安全性:

内核对象得到安全描述符的保护。安全描述符用于描述谁创建了该对象,谁能够访问或使用该对象,谁无权访问该对象。

每一个创建内核对象的函数几乎都有一个指向SECURITY_ATTRIBUTES结构的指针作为其参数。

typedef struct _SECURITY_ATTRIBUTES

         {

                   DWORD nLength;

                   LPVOID plSecurityDescriptor;

                   BOOL bInheritHandle;

}SECURITY_ATTRIBUTES;

4、  内核对象和其他对象(用户对象或图形设备对象)的区别。主要看创建对象的函数是否含有PSECURITY_ATTRIBUTES参数

5、  进程的句柄结构:

每一个结构包含一个指向内核对象的指针、一个访问屏蔽和一些标志

6、  创建内核对象:

创建内核对象的函数有好些:HANDLE CreateThread()等。每个函数返回一个跟进程相关的句柄

7、  关闭内核对象:

与创建内核对象有多种不一样,关闭内核对象全部通过调用BOOL CloseHandle(HANDLE hobj)

8、  共享内核对象

8.1对象句柄的继承性:

只有进程具有父子关系时,才能使用对象句柄的继承性。而这样做,父进程必须有如下步骤:

            i.父进程创建内核对象时,必须向系统指明它希望对象的句柄是个可继承的句柄。但是虽然句柄是可继承的,内核对象本身却不具备继承性。方法是:

SECURITY_ATTRIBUTES sa;

                sa.nLength = sizeof(sa);

                sa.lpSecurityDescriptor = NULL;

                sa.bInheritHandle = TRUE;

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

            ii让父进程生产子进程,并且同样将bInheritHandle置为TRUE

            iii要记住,继承性只能在生成子进程的时候使用。

8.2改变句柄的标志

        BOOL SetHandleInformation(HANDLE hObject,DWORD dwMask,DWORD dwFlags);

      第一个参数用于标识一个有效的句柄,第二个参数告诉该函数想要改变哪个或哪几个标志,第三个是用于指明想将该标志设置成什么值。

   8.3命名对象

       函数有一个共同的最后参数,PCTSTR pszName。

   8.4复制对象句柄

       BOOL DuplicateHandle().一般涉及两个进程时,调用该函数。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值