【问题标题】:Question about Windows Kernel Object关于 Windows 内核对象的问题
【发布时间】:2010-11-11 01:43:11
【问题描述】:

我的很多问题都在这里解决了,非常感谢你们。我还想再问一个。 :)

我正在阅读,它说:

当我们想要访问现有内核对象(而不是创建新对象)时,我们必须指定我们打算对对象执行的操作。如果允许我们使用此类操作进行访问,则会返回内核对象的句柄。

...如果返回的句柄用于调用需要与您请求的权限不同的 API,则会出现拒绝访问错误。

AFAIK,句柄只是一个普通的整数,它只是进程句柄表的索引,句柄值不能提供更多。如果我们已经获得了一个内核对象的句柄,那么系统如何检测到我们将它用于我们请求之外的其他操作?

一个内核对象可以有多个句柄,这些句柄的所有者可能有不同的访问类型。系统在哪里存储这些不同的访问类型信息?我认为它应该在进程的句柄表中。

假设我尝试打开具有 2 种不同访问类型的单个内核对象,应该返回同一个内核对象的 2 个句柄,因此进程的句柄表中将有 2 个条目,指向同一个内核对象.

任何见解都将不胜感激。

更新 1

谢谢大家。

我参考了 第 5 版,它在第 6 章说。访问检查:

Windows 安全模型要求在打开对象时预先指定要对对象执行的操作类型。对象管理器调用 SRM 以根据线程所需的访问权限执行访问检查,如果授予访问权限,则为线程的进程分配一个句柄,线程(或进程中的其他线程)可以使用该句柄对线程执行进一步的操作。目的。如第 3 章所述,对象管理器在进程的句柄表中记录为句柄授予的访问权限。

看来我的猜测是对的。

谢谢。

【问题讨论】:

    标签: windows object kernel


    【解决方案1】:

    每个处于活动状态的内核对象都将存储一系列针对它的权限。这只是由安全参考管理器 (SRM) 管理的另一个表。当对象管理器断言安全性时,将查找对象句柄以收集对象引用 (ObReferenceObjectByHandle) 和结果对象,可用于查找权限 (ObCheckObjectAccess)。会有涉及安全令牌的间接性,但本质上这是理论。所以两个句柄可能确实指向同一个引用对象。

    在 Windows Internals(我的版本 5)中对 ObCheckObjectAccess 调用期间发生的事情有很好的描述。

    在这里解释一下:

    ObCheckObjectAccess 获取对象、调用线程的凭据和请求的访问权限,并调用 SRM (SeAccessCheck),以便确定权利是被声明还是被拒绝。

    【讨论】:

    • 感谢您的回复和提及
    猜你喜欢
    • 2011-11-17
    • 1970-01-01
    • 2014-10-13
    • 2011-04-09
    • 1970-01-01
    • 2010-10-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多