Полагаю, вы могли бы сделать это, используя запутанную последовательность вызовов Win32 API, аналогичную . Эти проверки для потока выполняются от имени администратора .
Однако гораздо проще (и лучше оформить) гарантировать, что имитирующие потоки всегда возвращаются.Вы можете грубо форсировать это, используя Win32 API, но я полагаю, что вы также можете сделать это, создав класс-оболочку, который олицетворяет конструкцию и возвращает ее, когда он выходит из области видимости, аналогично модели общей защиты блокировки для безопасного исключения мьютекса / критическогораздел обработкиДаже если у вас есть несколько мест, где ваш код делает это, выравнивание их по надежной конструкции представляется целесообразным.
В таком случае поток будет:
{
MyImpersonationClass newContext(desiredUser);
// constructor calls Impersonate, saving required info
// do the code that requires impersonation here
}
// newContext goes out of scope, destructor calls RevertToSelf