Что нового

Скрипт запроса на повышение прав

Yukio

Новичок
Сообщения
4
Репутация
0
Всем здрасте! :smile:
Нужна помощь, начал изучать autoit, пытаюсь с помощью него сделать скрипт ввода логина и пароля при запросе повышения прав пользователя UAC Win7 (я админ, много компов, постоянно вводить логин и пароль для установки программ рутинно). Не получается обработать окно простого запроса повышения прав (рис1), хотя окно запуска от другого пользователя отлично выполняется (рис2). Подскажите как побороть и все-таки написать этот скрипт. Спасибо
Рисунок 1
db8618e0a357.jpg

Рисунок 2
a3a942436750.jpg
Код скрипта:
Код:
While 1
$hWnd = WinWaitActive("[TITLE:Безопасность Windows]", "")
ControlSetText($hWnd, "", "Edit1", 'Админ')
ControlSetText($hWnd, "", "Edit2", '123')
ControlClick($hWnd, '', '[CLASS:Button; INSTANCE:2]', "main", 1)
;$hWnd = WinWaitActive("[TITLE:Контроль учетных записей пользователей]", "") 
;ControlSetText($hWnd, "", "Edit1", 'Админ')
;ControlSetText($hWnd, "", "Edit2", '123')
;ControlClick($hWnd, '', '[CLASS:Button; INSTANCE:2]', "main", 1)
WEnd


P.S. TITLE:Безопасность Windows - это окно запуска от другого пользователя, а TITLE:Контроль учетных записей пользователей - это окно простого запроса повышения прав
 

madmasles

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


С уважением, ваш Глобальный модератор.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Yukio
а
Код:
RunAs
не подойдет? :smile:
смотреть справку
 

pvnn

Осваивающий
Сообщения
305
Репутация
32
Если сделать через
Код:
RunAs

Код:
$sUserName='1'
$sDomainName='2'
$sPassword='3'
$Path=''

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

$FormMain = GUICreate("Run As Admin", 552, 90, -1, -1)
$GrRunFile = GUICtrlCreateGroup("Запустить Файл", 8, 11, 537, 65)
$InpPath = GUICtrlCreateInput("", 16, 35, 377, 21)
$ButBrow = GUICtrlCreateButton("...", 400, 35, 35, 22)
$ButRunFile = GUICtrlCreateButton("Выполнить", 456, 33, 75, 25)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $ButBrow
			$file=GUICtrlRead($InpPath)
			$file=FileOpenDialog( "Выбор файла", "", "Поддерживаемые (*.exe)|Все (*.*)",3,$file)
			If StringLen(StringStripWS($file,3))<>0 Then GUICtrlSetData($InpPath,$file)
		Case $ButRunFile
			$Run = RunAs($sUserName, $sDomainName, $sPassword, 0, '"'&$Path&'"')
			If $Run=0 Then MsgBox(16,'Внимание','Не удалось выполнить команду')
	EndSwitch
WEnd
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Yukio [?]
обработать окно простого запроса повышения прав
Источник
При запуске образа, который запрашивает административные права, службе сведений о приложении (известна также как AIS, находится в %SystemRoot%\System32\Appinfo.dll), которая работает в процессе Service Host (%SystemRoot%\System32\Svchost.exe), предписывается запустить программу Consent.exe (%SystemRoot%\System32\Consent.exe). Программа Consent создает снимок экрана, применяет к нему эффект затемнения, переключается на рабочий стол, доступный только системной учетной записи, устанавливает затемненный снимок в качестве фона и открывает диалоговое окно повышения прав, содержащее сведения об исполняемом файле. Вывод на отдельном рабочем столе предотвращает изменение этого диалогового окна любой вредоносной программой, работающей под учетной записью пользователя.
Другими словами, чтобы скрипт смог получить доступ к этому окну, он должен быть запущен с системной учётной записью.
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
InnI, интересно, а как получить эти права не используя сторонние утилиты
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
OffTopic:
MnM [?]
не используя сторонние утилиты
На данный момент я не знаю - как, по причине отсутствия необходимости. Но уверен, что подобная информация в инете есть. Нужно её найти и изучить. Сторонние утилиты как-то ведь сделаны...
 
Автор
Y

Yukio

Новичок
Сообщения
4
Репутация
0
Спасибо, за ответы, буду что-нибудь пробовать состряпать из всего этого. Единственное, если брать команду RunAs, то она ведь открывает определенный файл от имени пользователя, а если выводится запрос допустим, когда открываешь системные настройки?
 
Автор
Y

Yukio

Новичок
Сообщения
4
Репутация
0
joiner сказал(а):
Yukio
а
Код:
RunAs
не подойдет? :smile:
смотреть справку

C помощью RunAs можно открыть определенные файлы от имени администратор, но если выводится запрос на повышение прав (допустим когда открываешь системные настройки), то эта команда не подходит (либо я не знаю как ее применить в этом случае). Сижу ковыряюсь, пока ничего не выходит :scratch:


Добавлено:
Сообщение автоматически объединено:

InnI сказал(а):
Другими словами, чтобы скрипт смог получить доступ к этому окну, он должен быть запущен с системной учётной записью.

Запустил скрипт с системной учетной записью, все равно не видит окна "Контроль учетных записей пользователей" :-\
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Yukio [?]
все равно не видит окна
Необходимо понизить уровень UAC до второго (не затемнять рабочий стол). Вот пример, проверенный на Win7 x86
Код:
ControlClick(WinWait("Контроль учетных записей"), "", "Button2")
Компилируете в test.exe и запускаете через psexec
Код:
d:\PsExec.exe -s -i d:\test.exe
Причём консоль должна быть запущена с правами администратора.

А если вы хотите получить доступ к защищённому рабочему столу (настройка UAC по умолчанию), то изучайте работу с рабочими столами
Код:
_WinAPI_EnumDesktops()
_WinAPI_EnumDesktopWindows()
_WinAPI_GetThreadDesktop()
_WinAPI_SwitchDesktop()


Есть ещё вариант запуска скрипта, как сервиса. Но я в этом не разбирался
http://www.autoitscript.com/wiki/FAQ#How_can_I_run_my_script_as_a_service.3F
 
Автор
Y

Yukio

Новичок
Сообщения
4
Репутация
0
Спасибо, сегодня попробую, потом отпишусь, получилось что-либо у меня или нет :ok:


Добавлено:
Сообщение автоматически объединено:

InnI сказал(а):
Необходимо понизить уровень UAC до второго (не затемнять рабочий стол). Вот пример, проверенный на Win7 x86
Код:
ControlClick(WinWait("Контроль учетных записей"), "", "Button2")
Компилируете в test.exe и запускаете через psexec
Код:
d:\PsExec.exe -s -i d:\test.exe
Причём консоль должна быть запущена с правами администратора.

АААА, спасибище огромное :beer:, все ништякович работает через PsExec, написал батник, который запускает PsExec из текущей папки, и все суперски работает, попробую еще что-нибудь придумать, чтобы из сети запускалось (а то cmd UNC пути не читает :-X)


Добавлено:
Сообщение автоматически объединено:

В дополнение хочу написать: решил проблему с запуском из сети по другому - сделал батник, который создает временно каталог на диске С, куда копируются необходимые файлы (а именно: PsExec и скрипт AutoIT), запускает скрипт, после необходимой работы со скриптом, каталог удаляется :ok: Сейчас можно спокойно запускать скрипт из сети, не парясь о постоянном вводе вручную данных администратора, супер!
P.S. Вот если кому понадобится текст батника:
Код:
mkdir C:\Temp\Adm
xcopy "%~dp0*.exe" "C:\Temp\adm"
start C:\Temp\adm\PsExec.exe -s -i C:\Temp\adm\adminka.exe
pause
rmdir C:\Temp\Adm /S /Q

Всем еще раз спасибо, AutoIt это круто :IL_AutoIt_1:
 
Верх