如果ImpersonateSelf()之后的RevertToSelf()失败,这会致命吗?

时间:2011-07-29 12:49:12

标签: windows security winapi impersonation privileges

MSDN说如果RevertToSelf()失败,程序应立即终止,否则它将继续以被模拟的客户端名称运行,这是不合适的。现在假设我做了

ImpersonateSelf( SecurityImpersonation );

并且调用成功,然后我调用RevertToSelf()而后者失败。线程继续以当前进程的权限运行。它真的很糟糕吗?

1 个答案:

答案 0 :(得分:4)

我喜欢你的问题,MSDN对此并不清楚。

我查看Programming Windows Security(Keith Brown)第112至117页。ImpersonateSelf通过致电

完成你自己可以完成的所有工作
  • OpenProcessToken
  • DuplicateTokenEx(... TokenImpersonation ...)
  • SetThreadToken
  • CloseHandle的

虽然RevertToSelf仅仅是对

的调用
SetThreadToken(0,0)

传递两个null参数指示方法恢复到先前的标记。您不必处理模拟与主令牌和令牌访问权限。电话会一直成功。

如果你查看RpcRevertToSelf函数的错误代码,你会看到除了RPC相关的代码之外,唯一的失败模式是你没有模仿。

我说可以安全地假设RevertToSelf(从与ImpersonateSelf相同的线程调用)将永远成功。