CreateProcessAsUser hToken равен нулю - PullRequest
0 голосов
/ 13 апреля 2020

Я создаю приложение (имя AppRunner), которое будет запускать исполняемый файл (имя EXE) с помощью winapi.

В AppRunner я использую CreateProcessAsUser для запуска EXE, и этот метод принимает hToken (токен пользователя).

Когда AppRunner будет выполняться пользователем System в сеансе 0, он успешно извлечет токен пользователя (WTSQueryUserToken с идентификатором сеанса консоли), и все будет работать нормально.
Однако, когда AppRunner будет выполнен зарегистрированный пользователь в сеансе> 0, он не сможет получить токен пользователя.

Я заметил, что при вызове CreateProcessAsUser с hToken = 0, EXE выполняется под вошедшим пользователем в сеансе пользователя (> 0).

Могу ли я предположить, что вызов CreateProcessAsUser с hToken = 0 будет выполнять EXE под вошедшим пользователем в сеансе пользователя ? На странице CreateProcessAsUser я не нашел никакой документации об этом.

Спасибо

1 Ответ

1 голос
/ 14 апреля 2020

Кстати, в случае, если кто-то еще столкнется с этим: CreateProcessAsUser с hToken = 0 действительно создаст процесс с тем же пользователем, что и пользователь текущего процесса, НО, CreateEnvironmentBlock создаст среду со значениями по умолчанию Это означает, что папка appdata, например, будет указывать на пользователя по умолчанию, а не на папку appdata текущего пользователя. Для меня это большая проблема

Два обходных пути:

  1. Наследовать среду родительского процесса (AppRunner) при вызове CreateEnvironmentBlock. Тогда переменная окружения APPDATA будет указывать на папку appdata текущего пользователя. Но USERPROFILE все еще указывает на C:\Users\Default.
  2. Получить токен родительского процесса (AppRunner), используя GetCurrentProcessToken, а затем передать этот токен CreateEnvironmentBlock. Затем переменные окружения APPDATA и USERPROFILE указывают на текущего пользователя.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...