模拟

模拟是线程在与拥有该线程的进程的上下文不同的安全上下文中执行操作的能力。 在客户端的安全上下文中运行时,服务器在某种程度上“是”客户端。 服务器线程使用表示客户端凭据的访问令牌来获取对客户端有权访问的对象的访问权限。

模拟的主要原因是对客户端标识执行访问检查。 使用客户端标识进行访问检查可能会导致访问受到限制或扩展,具体取决于客户端有权执行的操作。 例如,假设文件服务器中的文件包含机密信息,并且其中每个文件都受 ACL 保护。 为了帮助防止客户端未经授权访问这些文件中的信息,服务器可以在访问文件之前模拟客户端。

用于模拟的访问令牌

访问令牌是描述进程或线程的安全上下文的对象。 提供的信息包括用户帐户的标识以及用户帐户可用的特权子集。 每个进程都有一个主访问令牌,用于描述与进程关联的用户帐户的安全上下文。 当进程的线程与安全对象交互时,系统默认使用主令牌。 但是,当线程模拟客户端时,模拟线程同时具有主访问令牌和模拟令牌。 模拟令牌表示客户端的安全上下文,此访问令牌可用于模拟期间的访问检查。 模拟结束时,线程还原为仅使用主访问令牌。

可以使用 OpenProcessToken 函数获取进程主令牌的句柄。 使用 OpenThreadToken 函数获取线程模拟令牌的句柄。

访问令牌

委托和模拟