Windows核心编程(三)内核对象

本文深入探讨Windows内核对象,包括基本概念、使用计数、进程对象句柄表、创建与关闭对象。介绍了如何通过API创建命名内核对象,以及对象句柄的继承、权限管理和安全问题。同时,讨论了进程间共享内核对象的方式,如对象句柄继承和命名空间的使用。
摘要由CSDN通过智能技术生成

内核对象基本概念

内核对象(kernel object)是系统提供的用户模式下代码与内核模式下代码进行交互的基本接口。在Windows中常常出现内核对象的概念

在这里插入图片描述
每个内核对象都是一个内存块,由操作系统进行内存分配,并且只能由操作系统的内核进行访问,这些内存块是以数据结构的形式存在的。应用程序是无法调用和修改这些内核对象的,所以在使用过程中,可以使用Windows提供的一些API来使用这些对象

使用计数

使用计数的所有者是操作系统。操作系统知道当前有多少个进程正在使用一个特定的内核对象,因为每个对象都包含一个使用计数,使用计数在该对象初次创建时设为1,如果有另一进程获得对现有内核对象的访问后,使用计数就会递增,进程终止运行时,操作系统内核就会自动递减使用计数,当使用计数为0时,操作系统内核就会销毁该对象,这样就可以保证系统中不存在没有被任何进程应用的内核对象。

某函数如下所示:
在这里插入图片描述
该函数的第二个参数就是一个安全特性LPSECURITY_ATTRIBUTES,如果一个windows函数有该参数。则说明该函数可以用于创建内核对象
在这里插入图片描述

而有的函数没有这个参数,如下图,创建的是用户对象(GDI对象)而非内核对象

在这里插入图片描述
同时在使用内核对象时,也要注意所要获取的权限。

进程对象句柄表

进程在初始化时,系统会给这个进程分配一个句柄表,这个句柄表仅供内核对象使用由于具体结构没有参考文档,大概的句柄表结构包含索引,指向内核对象内存块的指针,访问掩码(包含标志位的一个DWORD(4字节))以及标志。

创建与关闭内核对象

列出部分用创建内核对象的函数:

在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述
一个进程首次初始化的时候,其句柄表为空

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值