![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перехват запуска приложений
DNT © (2003-08-09 18:45:00)
Программа разрешает запуск только избранных приолжений.
Необходимо написать программу, которая будет ловить запуск приложений и разрешать запуск программ только из специального списка, а запуск других будет блокировать.
Помогите плз, с чего начать?
Мои мысли:
Поставить хук. Но на что я не знаю :(
NightAngel (2003-08-12 20:38:00) [1]
> Burmistroff Иными словами - это и есть перехват API.
Ну, надо-же! Конца нет чудесам! :)
> как показала практика, все совсем наоборот: для NT все намного более проще и надежнее
Подобную задачу приходилось решать, и как показала практика, всё немного сложнее, чем кажется на первый взгляд. Или может быть у меня коэфициент кривизны конечностей, несколько превышает требования ГОСТа. ;)
Е-Моё имя (2003-08-12 18:31:00) [2]
Burmistroff (12.08.03 18:09)
имхо то же
Burmistroff (2003-08-12 18:09:00) [3]
>NightAngel
Иными словами - это и есть перехват API. Кстати, как показала практика, все совсем наоборот: для NT все намного более проще и надежнее, нежели для Win9x ;)
NightAngel (2003-08-12 14:50:00) [4]
> DNT © (12.08.03 09:23) [10] необходимо именно из моей программы перехватывать запуск.
С написанием драйвера, как я понял, проблемы. Если пишете под Win9x/Me можете пропатчить Kernel32.dll в памяти (для всех процессов он общий) - функции CreateProcess(), WinExec() etc. Под WinNT/2000/XP, как всегда всё сложнее. Без драйвера, для такой задачи, здесь всё будет полумерами ничего не гарантирующими. Можно поставить hook на NtResumeThread (NTDLL.DLL) во всех существующих процессах (эта функция всегда вызывается после того, как новый процесс загрузится).
PGM (2003-08-12 11:42:00) [5]
Перехватом API CreateProcess как посоветовал Burmistroff "по-плохому". Практически любой запуск рано или поздно приводит к этому вызову (но теоретически могут быть и исключения - те же 16-битные, например).
DNT (2003-08-12 09:23:00) [6]
Ребята, необходимо именно из моей программы перехватывать запуск.
Т.е. через API.
А как это сделать?
Burmistroff (2003-08-11 18:27:00) [7]
>Axis_of_Evil
wh_Shell пропускает порядка 40% случаев (16bit; безоконные; не из explorer.exe; ...)
Axis_of_Evil (2003-08-11 18:25:00) [8]
wh_Shell совсем никак?
An-N (2003-08-11 18:21:00) [9]
>Marser
Проблема в том, что те правила распространяются только на explorer.exe
Marser (2003-08-11 01:18:00) [10]
Слушайте Безымянное среднего рода
Burmistroff (2003-08-10 21:10:00) [11]
По хорошему - это делается так, как сказали выше. По-плохому - через перехват API.
Примеры второго способа можно обнаружить на http://maxcomputing.narod.ru/
mOOx_ (2003-08-10 10:35:00) [12]
Еще вариант: функцию TerminateProcess знаешь? Если ресурсов не жалко, то можно ее просто в цикле с ProcessMessage обрабатывать или по таймеру.
DNT (2003-08-10 09:50:00) [13]
NightAngel
CREATE_PROCESS можно на хук поставить?
Я не очень в этом разбираюсь.
Есть ли где-нибудь примерчик?
NightAngel (2003-08-09 21:23:00) [14]
> DNT © (09.08.03 18:45)
Для драйвера виртуального устройства есть возможность обработки сообщения CREATE_PROCESS, которое рассылается VWIN32 когда бы ни запустился новый процесс. В системе Windows NT/2000/XP существует дополнительная возможность установки такой функции через вызов процедуры PsSetCreateProcessNotifyRoutine из NTOSKRNL. Такая функция (описание смотрите в MSDN) позволяет драйверу устройства получать извещения системы о запуске новой программы.
Безымянное среднего рода (2003-08-09 20:20:00) [15]
А чем стандарьный способ не устраивает ?
Restricting Applications Users Can Run (Windows 9x and NT)
Windows gives the ability to restrict the applications that can be run by users on a workstation.
Open your registry and find the key [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]
Create a new DWORD value and name it "RestrictRun" set the value to equal "1" for enabled or "0" for disabled.
Then define the applications the are allowed to be run at the key [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\RestrictRun].
Creating a new string value for each application, named as consecutive numbers.
Reboot the computer for the changes to take effect.