Как стать автором
Обновить

Комментарии 11

msdn.microsoft.com/en-us/library/system.security.principal.windowsimpersonationcontext.undo.aspx

msdn.microsoft.com/en-us/library/system.runtime.interopservices.safehandle.aspx

Это то, что лучше использовать вместо интеропов на CloseHandle и RevertToSelf.

return false в функциях, которые могут провалиться по множеству причин — это очень плохой дизайн. Лучше бросать исключения.

Почему LogonUserA, а не LogonUserW?

Если в процессе получения или дублирования токена произойдет асинхронное исключение — то у вас хендлы потеряются. Используйте блок try… finally. А еще лучше, если работаете с нативными хендлами — изучите принципы работы CER или работайте с обертками.
Большое спасибо за качественный комментарий, большая редкость на хабре. Подправил по материалу из ссылок.

LogonUserA, а не LogonUserW потому что использую pinvoke.net при работе с WinAPI, и LogonUserW там нет.
В таком случае, рекомендую разобраться в смысле совершенных вами действий. Работа с unmanaged-кодом требует определенной четкости выполния и понимания сути совершаемых телодвижений.

В частности, как же выполняется p/invoke и как настраивать маршалер.
Если чего-то нет в pinvoke.net — самое время его туда добавить) В pinvoke оно все не само по себе взялось…
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Вы немного напутали с типами в примерах кода:

public void ImpersonateUser(...)

Метод типа void, но потом вы делаете

if (user.ImpersonateUser(USR, DOMAIN, PWD))
Да, спасибо, после исправления забыл второй клас выложить.
А можно ли таким образом вывести во время работы программы диалог UAC и повысить таким образом привилегии программы, если она была запущена без администраторских прав?
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации