Здравствуйте Аноним, Вы писали:
AF>>Надо каким-то образом заполучить токен текущего пользователя. Это можно сделать: AF>>1) перечислив процессы и взяв токен, скажем, еxplorer.exe (более точно — процесса оболочки, зарегистрированного в системе), либо
А>Я решил попробовать первый способ так как кажется он проще (пробовал в Delphi):
А>[...]
А>Вроде окно находит, дескриптор процесса получает, OpenProcessToken тоже без ошибок. А>А при выполнении CreateProcessAsUser возникает ошибка 1314 (отказано в доступе ?). А>Что я забыл сделать ?
Вроде раньше шла речь о сервисе, работающем в LocalSystem?
1314 = ERROR_PRIVILEGE_NOT_HELD, означает что у вызывающего пользователя нет необходимых привилегий для выполнения этой функции. И действительно, если внимательно посмотреть в документацию CreateProcessAsUser, то можно обнаружить, что она требует привилегию SE_ASSIGNPRIMARYTOKEN_NAME, которая по умолчанию есть только у LocalSystem.
То есть надо запускать этот код из сервиса, там должно работать.
P.S. В исходном коде стоит заменить PROCESS_ALL_ACCESS и TOKEN_ALL_ACCECSS на PROCESS_QUERY_INFORMATION и TOKEN_QUERY|TOKEN_DUPLICATE|TOKEN_ASSIGN_PRIMARY соответственно.