Что нового

[Процессы] Создание авторизации посредством runas в cmd для запуска приложения

saranmak

Новичок
Сообщения
2
Репутация
0
Версия AutoIt: 3.

Описание:

Здравствуйте! Помогите, пожалуйста с задачей со следующими условиями:
1. В системе загружен общий пользователь, который не имеет права запускать заданное приложение (far.exe).
2. Любой другой пользователь, авторизовавшись от своего имени во время сессии первого пользователя, имеет право запускать приложение (far.exe).
3. Все пользователи являются локальными администраторами (изначально).
4. Авторизация происходит посредством команды runas в cmd.
5. После запуска заданного приложения cmd должна автоматически закрываться.
6. Необходимо, чтобы пользователи не получили доступ к командной строке.
7. Windows XP английская версия.

Пример скрипта, недостатком которого является: при неправильной авторизации пользователь получает доступ к командной строке:
Код:
$answer = MsgBox(4, "Program starts", "Enter your logon name.  Run?")

If $answer = 7 Then
    MsgBox(4096, "Exit", "OK.  Bye!")
    Exit
EndIf

$username = InputBox("Program starts", "Please type in your username and click OK")
 If $username == "operator" And "operator" Then
            MsgBox(4096, "Error", "operator is not allowed to run the program!")
		Exit
        Else
          Run("cmd")
			WinWaitActive("C:\WINDOWS\system32\cmd.exe")
			Send("runas /user:")
			Send($username)
			Send( ' "C:\Program Files\Far\Far.exe"')
			Send( "{enter}")
        EndIf

Собственно проблема:
1. Необходимо заблокировать кнопки клавиатуры с момента запуска командной строки до ввода пароля для команды runas, чтобы не сбить ход выполнения скрипта
2. Отследить нажатие клавиш enter, esc, ctrl и горячих клавиш во время ввода пароля и, если произошло нажатие, то закрыть cmd.
3. Закрыть cmd, если авторизация не прошла (ошибка 1326: Logon failure: uknown user name or bad password).
4. Закрыть cmd после того, как запустился far.exe.
Примечания:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.
 
Автор
S

saranmak

Новичок
Сообщения
2
Репутация
0
Нашел решение сам:
Код:
$answer = MsgBox(4, "Запуск приложения Far.exe", "Для запуска приложения необходимо ввести учетные данные. Если учетные данные введены неверно, то происходит автоматический выход из программы. Для продолжения нажмите Yes.")

If $answer = 7 Then
    MsgBox(4096, "Exit", "Выход из программы.")
    Exit
EndIf

$username = InputBox("Запуск приложения Far.exe", "Введите имя вашей учетной записи в домене. Имя учетной записи не должно содержать префикс, например, ivanoff.")

If $username = "" Then
    MsgBox(4096, "Error!", "Ошибка: неправильное имя учетной записи.")
    Exit
EndIf

 If StringRegExp(StringLower($username), "operator", 0, 0) or StringRegExp(StringLower($username), "administrator", 0, 0) Then
            MsgBox(4096, "Error", "Вам запрещено использовать данную программу!")
		Exit
	Else
		$password = InputBox("Запуск приложения Far.exe", "Введите пароль от учетной записи.", "", "*")
		If $password = "" Then
    MsgBox(4096, "Error!", "Ошибка: неправильный пароль от учетной записи!")
    Exit
	EndIf
         BlockInput(1) 
		  Run("cmd")
			WinWaitActive("C:\WINDOWS\system32\cmd.exe")
			Send("runas /user:eu\")
			Send($username)
			Send( ' "C:\Program Files\Far\Far.exe"')
			Send( "{enter}")
			Send($password)
			Send( "{enter}")
		EndIf
ProcessClose("cmd.exe")
BlockInput(0)
 
Верх