MSDN说如果RevertToSelf()失败,程序应立即终止,否则它将继续以被模拟的客户端名称运行,这是不合适的。现在假设我做了
ImpersonateSelf( SecurityImpersonation );
并且调用成功,然后我调用RevertToSelf()
而后者失败。线程继续以当前进程的权限运行。它真的很糟糕吗?
答案 0 :(得分:4)
我喜欢你的问题,MSDN对此并不清楚。
我查看Programming Windows Security(Keith Brown)第112至117页。ImpersonateSelf
通过致电
虽然RevertToSelf
仅仅是对
SetThreadToken(0,0)
传递两个null参数指示方法恢复到先前的标记。您不必处理模拟与主令牌和令牌访问权限。电话会一直成功。
如果你查看RpcRevertToSelf
函数的错误代码,你会看到除了RPC相关的代码之外,唯一的失败模式是你没有模仿。
我说可以安全地假设RevertToSelf
(从与ImpersonateSelf相同的线程调用)将永远成功。