Windows中的对象

windows里常用句柄操作资源,而对应的对象由操作系统维护,
 
对象分为: 用户对象(GUI对象)、GDI对象和内核对象 用户对象用于windows管理 GDI对象用于绘图 内核对象用于内存、进程和IPC
 
Windows核心编程写道识别内核对象的方法是看有没有SECURITY_DESCRIPTOR参数。内核对象是不属于进程的,是属于Windows内核的。 进程只有一个内核对象句柄表,用来存放所有的内核对象句柄。所以,多个进程可以同时使用一个内核对象-- 只要有handle即可。
 
用户对象的资源包括:快捷键、光标、标记、dde转换、钩子、图标、 菜单、窗口
GDI对象包括:位图、画刷、画笔、设备上下文、图元、字体、调色板、区域等
内核对象包括:访问令牌、设备、控制台、桌面、事件、文件、文件映射、堆、作业、邮槽、模块、互斥体、管道、信号量、socket、线程、计时器等
 
其中GUI和GDI对象一般只能单线程访问,属于线程级的对象,多线程操作或访问这些对象会引起一些问题,当然这些对象也就不需要安全机制来控制了
 
用户对象,每个对象只能有一个句柄,不允许进程间复制和继承句柄,一个session的进程不能引用另一个session进程的句柄。每个session最多用户句柄有上限(200,18000),

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\USERProcessHandleQuota




GDI对象,每个对象只能有一个句柄,GDI对象的句柄对于进程是私有的,只有创建对象的进程可以使用对象句柄,句柄数最多用户句柄有上限(256,16384),
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\GDIProcessHandleQuota

内核对象句柄是进程所有的,也就是说进程要么打开已有对象,要么创建对象以获取内核对象句柄,该句柄可以复制和继承,每个进程句柄上限是2^24,然而句柄是存在分页内存中的,因此实际句柄数与可用内存有关。
内核对象的数据结构只能被内核访问,而 应用程序无法在内存中找到这些数据结构并改变它们的内容。进程共享这些内和对象,Windows通过引用计数的方式来保证内和对象的构建和销毁。与其他两种对象不同的是,当不再使用内和对象时,需调用CloseHandle方法来销毁内核对象。




 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顺其自然~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值