Удаление экрана входа в Windows через сервис

2

Я пытаюсь удалить экран входа в Windows (winlogon) из исполняемого файла, запущенного из службы. Служба автоматически запускается с окнами и ждет команд с другого компьютера. Когда он получит команду, он запустит exe, который запустит cmd.exe под конкретным именем пользователя.

Услуга уже присутствует. У меня есть работа по написанию этого исполняемого файла. В настоящее время я написал исполняемый файл (CmdLogin), который запускает cmd.exe под другим пользователем через вызовы LogonUserW, ImpersonateUser и CreateProcessWithLogonW. Я указываю lpDesktop как "WinSta0\Default". Единственный улов заключается в том, что служба должна запускаться под учетной записью администратора (но это другая проблема).

Это отлично работает при вызове из командной строки (даже в Windows 7). Это также работает при вызове со службы, когда пользователь вошел в систему и просматривал свой рабочий стол (как и при отладке на том же компьютере). Однако, как я уже говорил, мое реальное требование заключается в том, чтобы это работало даже при отображении экрана входа в Windows. В настоящее время exe дает правильный код выхода, но окно не появляется. Однако, когда пользователь входит в систему, он видит окно cmd на рабочем столе.

Одним из решений, которое я нашел, было использование "WinSta0\WinLogon" для lpDesktop вместо Default. Я еще должен попробовать это. Тем не менее, похоже, что он отобразит cmd-окно прямо над экраном входа. Мне действительно нужно на самом деле эмулировать вход пользователя в winlogon и показывать его фактический рабочий стол (и окно cmd).

Я огляделся и обнаружил пакеты уведомлений GINA и Winlogon. Они кажутся излишним, и я не уверен, что это даже решит цель здесь. Более того, они устарели в Windows Vista, что заставляет меня думать, что есть лучший и более простой способ решить эту проблему.

Любые предложения о том, что я должен использовать для достижения этого? Для записи исполняемый файл находится в С# с вызовами API с использованием P/Invoke. Я открыт для использования C dll, который я могу вызвать из этого приложения С#.

Спасибо,
Хусайн

  • 0
    Ну, причина этого в том, что моему клиенту нужно приложение, в котором он может выдавать разные имена пользователей и пароли людям для доступа к рабочей станции Windows без указания фактического имени пользователя и пароля. Служба, работающая на рабочей станции, будет удаленно входить в систему для пользователя, и пользователь продолжит работу на рабочей станции через клиент VNC. Это показалось мне немного странным, так же как и предоставление доступа пользователю Windows (почти). Однако это то, что хочет мой клиент.
  • 0
    <Sarcasm> Никогда не усложняйте ситуацию, когда вы можете сделать это трудным путем ... :-) </ Sarcasm> В любом случае, ваш клиент хочет получить доступ к локальной системе через соединение VNC? Слишком сложно. Должны быть более простые методы для ограничения пользователей.
Показать ещё 1 комментарий
Теги:
authentication
windows-services
windows-xp
winlogon

1 ответ

2

GINA перешла в Vista/2008 с помощью Credential Providers (недоступно в управляемом коде).

Я не знаю, как делать то, что вам нужно, но, возможно, это ключ к дальнейшему продвижению по тропе.

И для записи это кажется неправильным способом решения проблемы. Я просто не вижу, как вам нужно будет запускать командную строку под автозагрузкой... Почему бы не написать службу для выполнения своих задач и запустить ее под набором специальных учетных данных службы?

У меня нет фона на вашей проблеме, но это описание заставляет меня дрожать.: -)

[Обновление] Ну, в ответ на ваш комментарий. Я бы сказал, что поиск замены GINA для <= Windows 2003 или пользовательского поставщика учетных данных для Vista/2008 + будет лучшим вариантом.

Вы можете предоставить пользовательскую проверку подлинности в своем хранилище учетных данных, а затем разрешить или запретить вход в систему по своему усмотрению.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню