【发布时间】:2010-11-11 01:43:11
【问题描述】:
我的很多问题都在这里解决了,非常感谢你们。我还想再问一个。 :)
我正在阅读
当我们想要访问现有内核对象(而不是创建新对象)时,我们必须指定我们打算对对象执行的操作。如果允许我们使用此类操作进行访问,则会返回内核对象的句柄。
...如果返回的句柄用于调用需要与您请求的权限不同的 API,则会出现拒绝访问错误。
AFAIK,句柄只是一个普通的整数,它只是进程句柄表的索引,句柄值不能提供更多。如果我们已经获得了一个内核对象的句柄,那么系统如何检测到我们将它用于我们请求之外的其他操作?
一个内核对象可以有多个句柄,这些句柄的所有者可能有不同的访问类型。系统在哪里存储这些不同的访问类型信息?我认为它应该在进程的句柄表中。
假设我尝试打开具有 2 种不同访问类型的单个内核对象,应该返回同一个内核对象的 2 个句柄,因此进程的句柄表中将有 2 个条目,指向同一个内核对象.
任何见解都将不胜感激。
更新 1
谢谢大家。
我参考了
Windows 安全模型要求在打开对象时预先指定要对对象执行的操作类型。对象管理器调用 SRM 以根据线程所需的访问权限执行访问检查,如果授予访问权限,则为线程的进程分配一个句柄,线程(或进程中的其他线程)可以使用该句柄对线程执行进一步的操作。目的。如第 3 章所述,对象管理器在进程的句柄表中记录为句柄授予的访问权限。
看来我的猜测是对的。
谢谢。
【问题讨论】: