如果在ImpersonateSelf()失败后RevertToSelf()会致命吗?
MSDN表示,如果RevertToSelf()失败,程序应该立即终止,因为否则它会继续以被模拟的客户端名称运行,这是不合适的。 现在假设我这样做
ImpersonateSelf( SecurityImpersonation );
并且调用成功,那么我调用RevertToSelf()
,后者失败。 线程继续以当前进程的权限运行。 它也是非常糟糕的?
我喜欢你的问题,而MSDN对此并不清楚。
我看了Windows编程安全(Keith Brown)第112至117页ImpersonateSelf
通过调用你所做的所有工作
而RevertToSelf
只是一个呼叫
SetThreadToken(0,0)
传递两个空参数指示方法返回到前一个标记。 您不必处理模拟与主令牌和令牌访问权限。 电话会一直成功。
如果您查看RpcRevertToSelf
函数的错误代码,则会发现RPC相关的代码RpcRevertToSelf
,唯一的失败模式是如果您不模仿。
我认为假定RevertToSelf
(从与ImpersonateSelf相同的线程调用)总是会成功是安全的。
上一篇: Is it fatal if RevertToSelf() after ImpersonateSelf() fails?