Что нового

Убивать процессы, если они не запущены из определенной папки

tarasov.evgeny

Новичок
Сообщения
13
Репутация
0
Добрый день
Необходимо, чтобы скрипт проверял список запущенных процессов с какой-то периодичностью и убивал процессы если они не запущены из двух фиксированных папок:
c:\program files
c:\my folder

С грехом пополам убивать процессы по имени с какой-то периодичностью у меня получилось сделать.
Как сделать проверку откуда процесс запускается?
_ProcessGetPath - вот есть такая функция.
Я так понял, что нужно сделать следующее:
1. Просмотреть список процессов
2. "Изъять" оттуда пути запуска
3. Если они не равны двум путям : c:\program files or c:\my folder
3. Убивать процессы
Все это в цикле с период сколько-то секунд

Но как это сделать я не понимаю :smile:
Список процессов можно просмотреть через ProcessList, но функция выдает только pid и имя процесса.
_ProcessGetPath - это встроенная функция? Какой файл нужно скоприровать в папку include?

OffTopic:
Я не гарри потеррр я только учусь :smile:
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
218
tarasov.evgeny [?]
_ProcessGetPath - это встроенная функция? Какой файл нужно скоприровать в папку include?
Нет не встроенная. Скопируйте в скрипт:

Код:
Func _ProcessGetPath($hPID)
    Local $sPath = DllStructCreate('char[1000]')
    Local $hProcess = DllCall($hKernel, 'int', 'OpenProcess', 'dword', 0x0400 + 0x0010, 'int', 0, 'dword', $hPID)
    DllCall($hPsAPI, 'long', 'GetModuleFileNameEx', 'long', $hProcess[0], 'int', 0, 'ptr', DllStructGetPtr($sPath), 'long', DllStructGetSize($sPath))
    DllCall($hKernel, 'int', 'CloseHandle', 'hwnd', $hProcess[0])
    Local $ret = DllStructGetData($sPath, 1)
    Return $ret
EndFunc

Или ищите что-то похожее: http://www.google.com/search?q=autoit+_processgetpath
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
tarasov.evgeny [?]
и убивал процессы если они не запущены из двух фиксированных папок:
c:\program files
c:\my folder
А как же системные процессы? Они явно запущены не из этих двух папок. :smile: То есть надо добавлять в разрешенные пути C:\WINDOWS и C:\WINDOWS\system32, а это уже лазейка.

PS
dwerf,
Вы забыли в функции указать
Код:
;...
Local $hPsAPI = 'psapi.dll'
Local $hKernel = 'kernel32.dll'
;...
ИМХО, лучше использовать функцию _WinAPI_GetModuleFileNameEx() из WinAPIEx.au3.

PPS
Эти функции (_WinAPI_GetModuleFileNameEx() и _ProcessGetPath()) на некоторых системах у меня возвращали короткий путь.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
madmasles [?]
А как же системные процессы?
мне почему-то кажется, что автор имел в виду убивать процессы с определенным именем запущенные не их вышеперечисленных папок. но возможно я ошибаюсь.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Kaster
То, что автор имел в виду, только он знает. ;D
 
Автор
T

tarasov.evgeny

Новичок
Сообщения
13
Репутация
0
madmasles , спасибо я забыл про системные процессы.
OffTopic:
Рву волосы на голове

Задача именно блокировать все процессы запущенные не из определенных папок.
Я заблокировал usb и приводы, но весь левый дистрибутив можно скачать из интернета (закрыть который к сожалению нельзя :smile: )
Можно изменить папку установки и установить в свой профиль всё что душе угодно + есть программы, которые вообще не требуют установки.
Развитие событий было такое:
1. Блокировка usb, cdrom
2. Блокировка определенных процессов через сервис - magent.exe, qip.exe и т.д.
3. Вот теперь думаю как сделать контроль запуска из местоположения.
axlwor , спасибо посмотрел, попробую и так тоже.
 

axlwor

Скриптер
Сообщения
657
Репутация
147
tarasov.evgeny, твоя задача - полностью админская и давно решена средствами политик. Зачем позволять что то делать, а затем только блокировать. Можно сразу запретить.

про отключение девайсов
http://forum.ru-board.com/topic.cgi?forum=8&topic=4998&start=40
 
Автор
T

tarasov.evgeny

Новичок
Сообщения
13
Репутация
0
OffTopic:

Делалось через GPO. Возникла проблема с изменением. Т.е. блокировка срабатывала на ура, а если потом нужно было включить привод например... много проблем возникало.
Почему не спрашивайте, не я делал и доступа до GPO у меня нет. Но именно я потом искал, как включить обратно привод. 100% закономерности найдено не было, поэтому от этого отказались.
За ссылку спасибо, но хочется узнать по больше об\в скриптование - это практически первое по значимости - причина №1 почему я хочу сделать через скрипт.
 
Верх