Я прочитал все сообщения о переполнении стека о CreateProcessAsUser, и очень мало решенных вопросов, так что я не могу остановиться на этом. Но похоже, что я определенно что-то упускаю, так что это может быть легко.
Целевая ОС - Windows XP. У меня есть служба, работающая как «Локальная система», из которой я хочу создать процесс, выполняющийся от имени другого пользователя. Для этого пользователя у меня есть имя пользователя и пароль, поэтому LogonUser работает нормально, и я получаю токен для пользователя (в данном случае, учетную запись администратора.) Затем я пытаюсь использовать этот токен для вызова CreateProcessAsUser, но он не работает, потому что этот токен не поставляется с SeAssignPrimaryTokenPrivilege - однако он имеет SeIncreaseQuotaPrivilege. (Я использовал GetTokenInformation, чтобы сбросить все привилегии, связанные с этим токеном.) Согласно странице MSDN для CreateProcessAsUser, вам нужны обе привилегии для успешного вызова CreateProcessAsUser.
В нем также говорится, что вам не нужен SeAssignPrimaryTokenPrivilege, если токен, который вы передаете CreateProcessAsUser (), является «ограниченной версией основного токена вызывающего процесса», которую я могу создать с помощью CreateRestrictedToken (), но тогда он быть связанным с пользователем локальной системы, а не с целевым пользователем, я пытаюсь запустить процесс как.
Итак, как мне создать токен входа в систему, который является одновременно ограниченной версией основного токена вызывающего процесса И связан с другим пользователем? Спасибо!
Обратите внимание, что здесь нет необходимости во взаимодействии с пользователем - все это без присмотра - поэтому нет необходимости делать такие вещи, как захват WINSTA0 и т. Д.