Мне нравится ваш вопрос, и MSDN не совсем ясно.
Я посмотрел на Программирование безопасности Windows (Кит Браун) на страницах 112–117. ImpersonateSelf
выполняет всю работу, которую вы могли бы выполнить самостоятельно, позвонив по номеру
- OpenProcessToken
- DuplicateTokenEx (... TokenImpersonation ...)
- SetThreadToken
- CloseHandle
Хотя RevertToSelf
- это просто вызов
SetThreadToken(0,0)
Передача двух нулевых параметров указывает методу вернуться к предыдущему токену. Вам не нужно иметь дело с олицетворением против основных токенов и прав доступа к токену. Вызов всегда будет успешным.
И если вы посмотрите на коды ошибок функции RpcRevertToSelf
, то увидите, что кроме кодов, связанных с RPC, единственный режим отказа - это если вы не подражаете.
Я говорю, что можно с уверенностью предположить, что RevertToSelf
(вызывается из того же потока, что и ImpersonateSelf) всегда будет успешным.