调用ImpersonateSelf()是否取消对同一个线程进行的所有安全性令牌调整?

时间:2011-07-19 11:02:54

标签: windows security winapi impersonation privileges

我没有得到ImpersonateSelf()。假设我的代码在某个主机进程中运行。该主机进程创建了一个新线程并调整了线程安全性,以便线程具有最小权限,现在新线程执行我的代码。

我的代码调用

ImpersonateSelf( SecurityImpersonation );

它会有什么影响?它会重置为该线程完成的所有权限调整吗?

2 个答案:

答案 0 :(得分:2)

我认为the article这是通过Google搜索ImpersonateSelf返回的第二个链接非常有用:

  

在调用AdjustTokenPrivileges之前,您必须获得一个安全令牌,该令牌将成为操作的目标[...]虽然Windows®API允许,但修改进程令牌是不合适的。

...

  

由于WindowsNT®安全体系结构,线程通常在没有安全令牌的情况下运行,[...]为避免弄乱进程状态,正确的做法是放置进程安全令牌的副本线程,一个名为模仿的操作。

...

  

在此步骤之后,线程正在模拟,您可以通过调用用于更改令牌 - AdjustTokenPrivileges特权的API来完成操作。

因此,其目的是允许修改令牌(例如启用权限),而不会影响“全局”流程令牌。

至于你所描述的场景,我不认为反对恶意代码的沙盒是Windows中模拟机制的目的。

答案 1 :(得分:2)

是。它复制进程令牌并将其指定为当前线程的模拟令牌。来自旧令牌的权限无关紧要,因为该线程不再使用该令牌。如果要合并权限,请使用GetTokenInformation获取旧权限并复制并自行分配模拟令牌。