Windows 中的三种对象
来源:互联网 发布:网络写手平台 编辑:程序博客网 时间:2024/05/17 22:48
窗口站和桌面
https://msdn.microsoft.com/en-us/library/windows/desktop/ms687098(v=vs.85).aspx
Windows 创建了三种主要类型的对象:用户接口,图形设备接口,还有内核。内核对象是可保安全的,但是用户对象和GDI 对象是不可以的。为了提供额外的安全性,使用窗口站和桌面来管理用户接口对象,这两个对象本身是可保安全的。
用户对象
https://msdn.microsoft.com/en-us/library/windows/desktop/ms725486(v=vs.85).aspx
每个用户接口对象只可以拥有一个句柄。进程不能继承或者拷贝接口对象的句柄。一个会话中的进程不能引用另一个会话中的用户句柄。
理论上,一个会话最多有65536 个用户句柄。实际上会比这个更少,因为可能在达到句柄限制之前内存就已经不够了,而且每个进程允许拥有的句柄数目是有限的。可以通过下面的注册表键值来修改每个进程可以使用的句柄的数目。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\USERProcessHandleQuota
这个键值的设置范围为:[200,18000]
用户对象的句柄
用户对象的句柄对于所有的进程都是公开的。任何进程可以使用用户对象句柄,这意味着,任何有权限访问对象的进程都可以使用该用户对象句柄。
管理用户对象
下面这个表格展示了所有的用户对象的创建和销毁函数。创建函数或者同时创建对象并返回句柄,或者仅仅是打开一个已经存在的句柄。销毁函数将把对象从内存中清除并使得对应的对象句柄失效。
GDI 对象
https://msdn.microsoft.com/en-us/library/windows/desktop/ms724291(v=vs.85).aspx
一个GDI对象只有一个句柄,GDI 对象是进程私有的,只有创建它的进程才可以使用该对象句柄。
会话中的GDI 句柄的个数的限制同用户对象一样。
Windows 2000:一个会话最多有16384个GDI 句柄。
每个进程所能拥有的最大数量的GDI 对象的限制对应注册表键为:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\GDIProcessHandleQuota
这个值的可以修改的范围为:[256~65536]
管理GDI 对象
同用户对象
内核对象
内核对象句柄是进程相关的。一个进程如果想要对一个对象进行操作,必须创建或者打开一个已经存在的对象并得到其句柄。理论上进程可以创建2^24 个句柄,但是句柄是存储在分页内存池的,因此实际可以创建的句柄的个数取决于可使用的内存的数量。
只要一个进程知道了一个已经存在的对象(即使是其它的进程创建的对象)的名称并拥有所请求的访问就可以打开该对象并获得其句柄。内核对象句柄包含当前进程对于该对象的访问权限,包括允许的操作和禁止的操作。在创建一个对象或者获得一个已存在对象的句柄的时候,进程指定了期望在该句柄上进行的操作。每一种类型的对象都有其对应的权限的集合,比如事件对象拥有触发或者等待权限(或者两个都有),文件对象可以有读或者写权限(或者两个都有)。
大多数内核对象支持一个内核对象对应多个句柄。这个机制使得一个应用程序可以拥有同一个内核对象的不同访问权限的句柄。比如,对于一个事件对象来说,可能句柄1只有触发事件的权限,同时事件2只有等待事件的权限。
除了使用对象特定的打开函数来获得一个已经存在有名字的内核对象的句柄外,还有两种方法,其中一个获得对象句柄的方法为DuplicateHandle,详情可以查看MSDN 或者我之前的介绍文章,另一种是句柄继承。
直到对象的最后一个句柄被关闭,对象才被从内存中清除。另外,系统管理文件对象的方法和其它的对象不同。文件对象包含一个成员—文件指针,指向文件中下一个将被读/写的字节的位置。无论系统何时创建一个新的文件句柄,系统创建一个新的文件对象。因此,磁盘上一个单独的文件可以对应多个文件对象。只有通过复制或者继承句柄的方式才可以创建多个指向同一个文件对象的句柄。
下面列出了各种内核对象的创建函数以及销毁函数。创建函数还是一样,或者创建并返回一个句柄,或者返回一个已经存在的对象的句柄。销毁函数稍微有些不同,当对象的最后一个句柄被关闭的时候对象才真正的销毁。
- Windows 中的三种对象
- Hibernatet中的三种对象
- 对象在Hibernate中的三种状态
- 对象在Hibernate中的三种状态
- 对象在Hibernate中的三种状态
- hibernate中的对象的三种状态
- js中的windows对象
- js中的三大对象
- Windows驱动中的设备对象
- Windows驱动中的驱动对象
- Javascript中的windows窗口对象
- Hibernate学习-------对象在Hibernate中的三种状态
- Unity3D中的三种对象消失的方法
- 三种Windows中的定时或计时方法
- 内核对象 Windows via C/C++ (三)
- windows核心编程<读书笔记三>内核对象
- windows via c/c++ 三. 内核对象
- windows核心编程(三) 内核对象
- 设计心理学学习
- 汽车EPS解析
- android activity 启动模式 ==> launchmode
- sort +awk+uniq 统计文件中出现次数最多的前10个单词 (2012-12-05 15:57:12)转载▼ 标签: 转载 原文地址:sort +awk+uniq 统计文件中出现次数最多的前
- 网上商城 重难点
- Windows 中的三种对象
- 线索二叉树(二)
- spring cloud config
- STL_map
- 纯干货,Spring-data-jpa详解,全方位介绍。
- Cobbler全自动批量安装部署Linux系统
- [职业规划]年龄的重要性 Silicon Valley’s Dark Secret: It’s All About Age
- Dubbo入门
- C++ 初始化列表(转载)