Комментарии 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 или работайте с обертками.
msdn.microsoft.com/en-us/library/system.runtime.interopservices.safehandle.aspx
Это то, что лучше использовать вместо интеропов на CloseHandle и RevertToSelf.
return false в функциях, которые могут провалиться по множеству причин — это очень плохой дизайн. Лучше бросать исключения.
Почему LogonUserA, а не LogonUserW?
Если в процессе получения или дублирования токена произойдет асинхронное исключение — то у вас хендлы потеряются. Используйте блок try… finally. А еще лучше, если работаете с нативными хендлами — изучите принципы работы CER или работайте с обертками.
+13
Большое спасибо за качественный комментарий, большая редкость на хабре. Подправил по материалу из ссылок.
LogonUserA, а не LogonUserW потому что использую pinvoke.net при работе с WinAPI, и LogonUserW там нет.
LogonUserA, а не LogonUserW потому что использую pinvoke.net при работе с WinAPI, и LogonUserW там нет.
+2
В таком случае, рекомендую разобраться в смысле совершенных вами действий. Работа с unmanaged-кодом требует определенной четкости выполния и понимания сути совершаемых телодвижений.
В частности, как же выполняется p/invoke и как настраивать маршалер.
В частности, как же выполняется p/invoke и как настраивать маршалер.
+1
Если чего-то нет в pinvoke.net — самое время его туда добавить) В pinvoke оно все не само по себе взялось…
0
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
+2
Вы немного напутали с типами в примерах кода:
Метод типа void, но потом вы делаете
public void ImpersonateUser(...)
Метод типа void, но потом вы делаете
if (user.ImpersonateUser(USR, DOMAIN, PWD))
+1
А можно ли таким образом вывести во время работы программы диалог UAC и повысить таким образом привилегии программы, если она была запущена без администраторских прав?
0
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Исполнение куска кода от имени конкретного пользователя