Проверьте имя пользователя и пароль учетной записи Windows - PullRequest
7 голосов
/ 21 октября 2008

У меня есть установочный пакет, который устанавливает созданный мной сервисный процесс. Я хотел бы попросить пользователя ввести имя пользователя / пароль учетной записи, под которой должен выполняться процесс обслуживания. Я хотел бы проверить правильность комбинации имени пользователя и пароля перед продолжением установки. У меня есть C DLL, которую я использую для специального поведения при установке, но я не могу понять, как использовать Windows API для проверки учетных данных учетной записи. Я хотел бы иметь возможность поддерживать тот же синтаксис имени учетной записи, который используется диспетчером управления службами.

Ответы [ 3 ]

12 голосов
/ 21 октября 2008

Функция, которую вы хотите использовать: LogonUser . Вы даже можете быть очень крутым и указать флаг LOGON32_LOGON_SERVICE, который проверяет, чтобы убедиться, что у пользователя есть соответствующие разрешения на запуск службы.

2 голосов
/ 21 октября 2008

LogonUser - это канонический способ сделать это, хотя Microsoft несколько не одобряет это .

0 голосов
/ 21 октября 2008

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

Кроме того, если я вызываю ChangeServiceConfig с указанием «LocalSystem» и «» для параметров lpServiceStartName и lpPassword соответственно, это работает нормально. Однако вызов LogonUser с этими параметрами не работает.

Мне бы очень хотелось использовать тот же синтаксис, который SCM использует для имен учетных записей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...