[Windows] Windows下的对象系统

对象的分类:

对象分为三种:用户对象、图形设备接口(GDI)对象、内核对象

三种对象的职责:
用户对象:为窗口管理提供支持
GDI图像设备接口对象:为图形展示提供支持
(!)内核对象:内存管理,进程执行,进程间通讯  三个主要用途

如果不做MFC相关编程,我们只需要关心内核对象。

所有细分的对象列表:
https://docs.microsoft.com/en-us/windows/win32/sysinfo/object-categories

 

对象管理:

windows 对象(内核对象、用户对象、GDI对象) 有标准的头部结构和与之类型对应的属性构成。正是因为有着较为统一的结构,故而windows系统可以很方便地统一管理这些对象。

头部中包含了当前对象的名称,正是有这个名称的存在,才让windows对象可以任意地在游离于各个进程间。


windows对象管理器有如下职责:
1)创建对象
2)验证某个进程是否可以访问某个对象
3)创建对象句柄,并反馈给调用者
4)维护引用计数器
5)提供复制句柄的能力
6)关闭句柄


windows提供如下操作对象的接口:
1)创建对象
2)获取一个指向对象的handle
3)获取对象的信息
4)设置对象的信息
5)关闭句柄
6)摧毁对象  (确定有直接摧毁对象的接口?不是通过指向对象的句柄引用计数管理的么?)

注:有些时候,当指向对象的所有handle都被关闭后(对象的引用计数为0),对象依旧可以存在于内存中。知道下一次被捕获时,系统告知用户当前对象已经被销毁,这个时候内核才会释放相应的内存。


  • 句柄 和 内核对象都会消耗内存。因此句柄泄露就是内存泄露。句柄泄露的最常见现象就是系统占用内存居高不下。
  • 进程退出时会释放所有的句柄和内核对象。但是线程退出时不会。
  • 内核对象销毁时,所有绑定在其上的handle也会一并销毁。但是我们往往是通过closehandle让引用计数为0而销毁对象。而不是通过销毁对象来反过来关闭句柄。
  • 有些对象只能存在一个句柄指向它,有些对象可能有多个句柄指向它。

 

对象操作:

 

CloseHandleCloses an open object handle.
CompareObjectHandlesCompares two object handles to determine if they refer to the same underlying kernel object.
DuplicateHandleDuplicates an object handle.
GetHandleInformationRetrieves certain properties of an object handle.
SetHandleInformationSets certain properties of an object handle.

 

区分内核对象的小窍门:

但凡需要指定 安全权限 的,都是内核对象。

 

工具:

https://docs.microsoft.com/zh-cn/sysinternals/downloads/winobj

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值