2011-12-22 2 views
1

У меня есть базовая настройка для работы здесь, без домены или причудливых вещей. Я могу заставить программу получать сообщение с моего телефона для запуска событий и т. Д.Как мне сделать Windows для входа в систему?

Как приложение C# может работать в фоновом режиме перед входом в систему? (Сначала я попробую как услугу ...)

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

некоторые псевдо-код (Да, я знаю, что это не безопасно):

LogOnWindows(string WindowsUserName, string WindowsPassword) 
{ 
    if (Environment.GetEnvironmentVariable(USERNAME) == null) 
    { 
    LogonWindows(WindowsUserName, WindowsPassword); 
    } 
} 

Я проверил API вызова LogonUser для Windows, но кажется, что для входа пользователя в фоновом режиме ...

+3

услуга не может этого сделать. –

+0

AFAIK, окна не позволят программе регистрироваться от имени пользователя ... кроме, может быть, поставщика биометрии ... – Adam

ответ

0

Если услуга всегда должна выполняться как заданный пользователь (т. Е. Она не должна изменять пользователей в ответ на запросы), то вы просто установите учетные данные указанного пользователя на вкладке «Вход в систему» ​​и не будете беспокоиться о программном изменении учетных данных.

В противном случае вам необходимо использовать API LogonUser и передать токен из этого API в новый экземпляр WindowsIdentity, а затем использовать метод Impersonate для этого нового идентификатора. Существует хорошая статья о том, что связано с here.

Также забыл упомянуть: если вы работаете как служба, то ваш метод использовать Environment.GetEnvironmentVariable не получит информацию об услуге пользователя, а не интерактивную информацию пользователя (технически, в зависимости от ОС, может быть несколько одновременных интерактивные пользователи).

0

Единственный способ, которым я видел это в прошлом, - реализовать что-то похожее на VNC, где вы управляете вводами мыши и клавиатуры от службы. Хорошей отправной точкой будет просмотр UltraVNC source code или что-то подобное. (Предупреждение написано на C++, а не для слабонервных).

EDIT: Если вам удобно с неуправляемым кодом (C++ или аналогичным), это может быть проще реализовано с использованием одного из предложенных предложений here.

1

Есть много и много хороших соображений безопасности, почему это очень и очень сложно для приложения. Как сказал бы Раймонд Чен: «Представьте, может ли какое-либо приложение сделать это».

Правильный способ сделать это (вероятно, FAR больше проблем, чем вы хотите иметь дело) - создать замену GINA. Например, вы можете посмотреть here.

Но опять же, остановитесь, подумайте и рассмотрите импликацию простой инструкции «Я хочу, чтобы приложение было в состоянии войти в систему, как и любой пользователь без взаимодействия с пользователем». Это было возможно в Windows 9x, и это была функция, удаленная по дизайну. Подумай об этом.

Смежные вопросы