《windows核心编程》学习笔记——内核对象

注意:这个系列的日志目的是为了促进自己对书本的理解,所以要自己提炼问题,并尽量自己的语言来回答,不要直接抄袭书本。

1        何为内核对象

问题1:什么是内核对象

内核对象包括:令牌对象、事件对象、文件对象、文件映射对象、I/O完成端口对象、作业对象、邮件槽对象、互斥量对象、管道对象、进程对象、信号量对象、线程对象、可等待的计时器对象、线程池工厂对象,等。

内核对象实际上是一个内存块,里面存放着一个数据结构,其成员是与该对象相关的信息,有些成员是所有的对象都有的(如安全描述符和使用计数器),有的则是某些对象特有的。

问题2:内核对象怎么操作?

内核对象只能由系统访问,应用程序需要通过调用系统函数才能访问和操作内核对象。

问题3:什么是句柄?

进程调用了一个创建内核对象的函数之后,函数会返回一个句柄,句柄标注了该对象,通过将句柄传递给后续操作该内核对象的函数,就能够实现对该内核对象的访问。

需要说明的是,句柄是和进程挂钩的,可以给同一进程中的所有线程使用;但是同一个句柄变量传给其他进程将无法得到正确的结果:1,可能访问失败;2,访问到了其他内核对象,造成难以察觉的错误。

1.1        使用计数

问题1:什么是使用计数?

类似一个智能指针,能够记录有多少个进程在访问当前的对象,当进程关闭了当前对象,或是进程本身被关闭,计数值都会减一,直到降为零,系统将其销毁。

1.2        内核对象的安全性

问题1:什么是安全描述符?

安全描述符描述了内核对象的拥有者,并限定了其他进程对其的访问权限。

问题2:如何使用安全描述符?

在创建内核对象的时候,几乎所有的创建函数都有一个参数PSECURITY_ATTRIBUTES,它实际上是一个只想结构体SECURITY_ATTRIBUTES的指针,而后者的结构如下:

typedef struct_SECURITY_ATTRIBUTES{

DWORD nLength;                            //初始化时,nLength=sizeof(sa);

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值