Windows 在ImpersonateSelf()失败后,如果RevertToSelf()会致命吗?

Windows 在ImpersonateSelf()失败后,如果RevertToSelf()会致命吗?,windows,security,winapi,impersonation,privileges,Windows,Security,Winapi,Impersonation,Privileges,MSDN说,如果失败,程序应该立即终止,否则它将继续以被模拟的客户端的名义运行,这是不合适的。现在让我来吧 ImpersonateSelf( SecurityImpersonation ); 调用成功后,我调用RevertToSelf(),后者失败。线程继续以当前进程的权限运行。这也很糟糕吗?我喜欢你的问题,MSDN对此并不清楚 我看了(基思·布朗)第112页到117页ImpersonateSelf通过调用 OpenProcessToken DuplicateTokenEx(…TokenIm

MSDN说,如果失败,程序应该立即终止,否则它将继续以被模拟的客户端的名义运行,这是不合适的。现在让我来吧

ImpersonateSelf( SecurityImpersonation );

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

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

我看了(基思·布朗)第112页到117页
ImpersonateSelf
通过调用

  • OpenProcessToken
  • DuplicateTokenEx(…TokenImpersonation…)
  • SetThreadToken
  • 握把
retertoself
仅仅是对

SetThreadToken(0,0)
传递两个null参数指示该方法还原到上一个标记。您不必处理模拟与主令牌和令牌访问权限的对比。电话总是会成功的

如果您查看
RpcRevertToSelf
函数的错误代码,您会发现除了与RPC相关的代码之外,唯一的故障模式是如果您没有模拟


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

这似乎是不可能失败的函数之一。我能想到的唯一失败场景是,在模拟自己之后(尽管我懒得尝试),在DACL中拒绝自己对线程(或进程?)的“设置线程令牌”权限。关于模拟,它会影响线程试图访问的所有内容。我可能会认为失败是致命的,严格意义上说是“不可能”,并采取预防措施(即使没有冒充和冒充自己的实际差异)。