我没有得到ImpersonateSelf()
。假设我的代码在某个主机进程中运行。该主机进程创建了一个新线程并调整了线程安全性,以便线程具有最小权限,现在新线程执行我的代码。
我的代码调用
ImpersonateSelf( SecurityImpersonation );
它会有什么影响?它会重置为该线程完成的所有权限调整吗?
答案 0 :(得分:2)
我认为the article这是通过Google搜索ImpersonateSelf返回的第二个链接非常有用:
在调用AdjustTokenPrivileges之前,您必须获得一个安全令牌,该令牌将成为操作的目标[...]虽然Windows®API允许,但修改进程令牌是不合适的。
...
由于WindowsNT®安全体系结构,线程通常在没有安全令牌的情况下运行,[...]为避免弄乱进程状态,正确的做法是放置进程安全令牌的副本线程,一个名为模仿的操作。
...
在此步骤之后,线程正在模拟,您可以通过调用用于更改令牌 - AdjustTokenPrivileges特权的API来完成操作。
因此,其目的是允许修改令牌(例如启用权限),而不会影响“全局”流程令牌。
至于你所描述的场景,我不认为反对恶意代码的沙盒是Windows中模拟机制的目的。
答案 1 :(得分:2)
是。它复制进程令牌并将其指定为当前线程的模拟令牌。来自旧令牌的权限无关紧要,因为该线程不再使用该令牌。如果要合并权限,请使用GetTokenInformation获取旧权限并复制并自行分配模拟令牌。