Windows CreateProcess как локальная система

У меня есть служба, работающая как локальная система. Я использую функцию CreateProcess для вызова внешнего .exe. Какая учетная запись по умолчанию используется при вызове функции CreateProcess? Я не смог найти ничего по учетной записи по умолчанию в документации MSDN. Кроме того, я хочу, чтобы этот процесс был постоянным до тех пор, пока не будет запущена служба времени. Должен ли я использовать CreateService?


person Red John    schedule 10.05.2018    source источник
comment
И CreateService только создает запись в базе данных конфигурации службы, но фактически не запускает службу.   -  person SoronelHaetir    schedule 10.05.2018
comment
никакая учетная запись по умолчанию не используется. CreateProcess создать процесс с токеном родительского процесса (вашим текущим или установленным PROC_THREAD_ATTRIBUTE_PARENT_PROCESS)   -  person RbMm    schedule 11.05.2018
comment
и процесс будет постоянным, потому что вы запускаете его в сеансе сервисного терминала   -  person RbMm    schedule 11.05.2018


Ответы (1)


CreateProcess создает процесс, который выполняется от имени того же пользователя, что и родительское приложение, и выполняется в том же сеансе. Вы должны использовать CreateProcessAsUser/CreateProcessWithLogonW/ CreateProcessWithTokenW для создания процесса от имени другого пользователя. Единственным исключением является ShellExecute, который может создать процесс от имени другого пользователя, если используется повышение прав UAC, а пользователь не является администратором.

Если вам нужно взаимодействовать с другой службой, вы можете использовать ChangeServiceConfig, чтобы заставить себя зависеть от другой службы. Диспетчер управления службами запустит другую службу перед запуском вашей службы.

person Anders    schedule 10.05.2018
comment
Процесс подсистемы Windows создается либо через CreateProcess, либо через CreateProcessAsUser. CreateProcessWithLogonW и CreateProcessWithTokenW используют RPC для службы вторичного входа. При повышении уровня через ShellExecuteEx runas используется RPC для службы Application Information. Можно также определить и запустить задачу от имени другого пользователя через COM API службы планировщика заданий. Все они используют привилегированный сервис для вызова CreateProcessAsUser. - person Eryk Sun; 11.05.2018
comment
здесь можно отметить, что существуют родитель и создатель (которого называют CreateProcess) это обычно одно и то же, но не обязательно. и дочерний процесс запускается в том же сеансе входа в систему, что и родительский, и в том же сеансе терминала, что и создатель. процесс, созданный из службы (когда он и родитель), выживет после выхода из системы - person RbMm; 11.05.2018
comment
ребенок наследует от родителя не только pid, но и токен - и это серьезно влияет на ребенка, если у нас есть родитель != создатель. но терминальная сессия унаследована от создателя (если мы используем CreateProcess). для запуска в другой терминальной сессии нужно уже использовать CreateProcessAsUser. интересно, если использовать CreateProcessAsUser с PROC_THREAD_ATTRIBUTE_PARENT_PROCESS (мы можем использовать оба сразу) - дочерний процесс наследует явный токен вместо токена родительского процесса. но все это не связано, если у нас есть создатель == родитель - person RbMm; 11.05.2018