Windows对象管理:修订间差异

删除的内容 添加的内容
InternetArchiveBot留言 | 贡献
Add 1 book for verifiability (20210707)) #IABot (v2.0.8) (GreenC bot
InternetArchiveBot留言 | 贡献
补救3个来源,并将0个来源标记为失效。) #IABot (v2.0.8.7
 
第4行:
==体系结构==
[[Windows NT]]操作系统体系结构中,对象管理子系统管理所有的资源。资源被表示为对象。对象管理子系统保持着对每个对象的[[引用计数]]。任何访问对象的系统调用都必须通过对象管理子系统。Windows对象可分为内核对象、用户对象、GDI对象:
*用户对象(User interface object):支持窗口管理。每个对象仅有一个句柄,句柄不能复制或继承,不能引用其他用户会话中的进程的用户句柄。任何进程只要有对某个用户句柄的安全访问权限,即可以访问该用户对象,即用户对象在当前会话下是全局的。一个进程最多有 65536 个用户对象句柄。用户对象包括:快捷键表HACCEL、插入点HCaret、鼠标指针HCURSOR、DDE 会话、窗口钩子HOOK、图标 HICON、菜单 HMENU、窗口 HWND、窗口位置Window position。<ref>[{{Cite web |url=http://msdn.microsoft.com/en-us/library/windows/desktop/ms725486%28v=vs.85%29.aspx |title=User Objects] |access-date=2014-01-08 |archive-date=2017-09-18 |archive-url=https://web.archive.org/web/20170918203458/https://msdn.microsoft.com/en-us/library/windows/desktop/ms725486(v=vs.85).aspx }}</ref>
*GDI 对象:支持图形。每个对象仅有一个句柄,句柄为进程私有。一个进程最多有 65536 个 GDI 对象句柄。GDI 对象包括:位图 HBITMAP、画刷 HBRUSH、设备环境HDC、[[EMF|增强型图元文件(EMF)]]、EMF 设备环境、字体 HFONT、内存 DC、图元文件Metafile、图元文件 DC、调色板 HPALETTE、画笔 HPEN、区域(Region)HRGN。<ref>[{{Cite web |url=http://msdn.microsoft.com/en-us/library/windows/desktop/ms724291%28v=vs.85%29.aspx |title=GDI Objects] |access-date=2014-01-08 |archive-date=2017-09-18 |archive-url=https://web.archive.org/web/20170918202648/https://msdn.microsoft.com/en-us/library/windows/desktop/ms724291(v=vs.85).aspx }}</ref>
*内核对象:支持内存管理、进程执行、[[进程间通信]]。内核对象句柄是进程私有的,必须创建或者打开内核对象以获取其句柄。当进程创建或打开内核对象时,进程的句柄表中增加一个条目指向内核对象实例。进程的句柄表的索引称为'''[[句柄]]'''(handle)<ref>每个进程中都存在一个句柄表,列出了所有本进程内可以使用的句柄。句柄表实际上是一个数组,每个数组元素为一个结构,包含一个指向内核对象的指针、访问掩码、继承标识等。句柄实际上是进程句柄表数组的索引。因此句柄是进程私有的。进程的句柄表的表头数据结构为HANDLE_TABLE。所有进程的句柄表表头形成一个List。句柄表的表项的数据结构为HANDLE_TABLE_ENTRY,长度为8字节,其中前四个数据为内核对象地址,后四个字节为访问掩码或在当前表项为空闲时存储下一空闲表项的索引值。</ref>。对象管理子系统使用句柄与命名两种方式管理对象实例。句柄在一个进程内部是线程共享的,但在进程之间不是直接可复用,需要特别方式在进程间传递对象句柄。一个进程任何时刻最多拥有 2<sup>24</sup>,即大约 16,000,000 个句柄。句柄按照对象的分类可分为文件句柄、事件句柄、进程句柄等。一个进程对一个对象可以有多个句柄,以便按照不同权限来访问对象。
 
对象可分为'''内核对象'''(Kernel objects)与'''执行对象'''(Executive objects)。内核对象表示一些基本资源,如物理设备、同步服务等等。用户态的程序不能访问内核对象。<ref>[{{Cite web |url=http://msdn.microsoft.com/en-us/library/windows/desktop/ms724485%28v=vs.13%29.aspx |title=Kernel objects] |access-date=2014-01-08 |archive-date=2017-09-18 |archive-url=https://web.archive.org/web/20170918202244/https://msdn.microsoft.com/en-us/library/windows/desktop/ms724485(v=vs.13).aspx }}</ref>用户态的系统服务与应用程序使用执行对象,这是[[Windows NT体系结构|Windows Executive]]对外暴露的对象,用来封装一个或多个内核对象。执行对象还用于实现 NT 子系统或 POSIX 子系统的一些功能。
 
Windows NT 暴露的执行对象包括: