Я реализовал это, используя функцию LogonUser, как вы, ребята, упомянули (кстати, для этой службы требуется WinXP SP2 или более поздняя версия, поэтому я не беспокоюсь о проблеме привилегий). Тем не менее, это не совсем работает, как я надеялся. Если я вызываю QueryServiceConfig, lpServiceStartName имеет формат «. \ Accountname». Если я передаю эту строку как есть в LogonUser, она завершается ошибкой. Я предполагаю, что часть перед символом '\' представляет машину, к которой принадлежит пользователь?
Кроме того, если я вызываю ChangeServiceConfig с указанием «LocalSystem» и «» для параметров lpServiceStartName и lpPassword соответственно, это работает нормально. Однако вызов LogonUser с этими параметрами не работает.
Мне бы очень хотелось использовать тот же синтаксис, который SCM использует для имен учетных записей.