Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.02;
Скачать: CL | DM;

Вниз

Перехват процесса.   Найти похожие ветки 

 
Igor   (2003-04-03 09:58) [0]

Задача такая: необходимо ограничить пользователей на число запусков одного процесса, т.е если процесс с таким именем существует выдавать сообщение об этом и пресекать попытку загрузить 2-ой.


 
caesar ©   (2003-04-03 10:19) [1]

твоего приложения или вообще любого процесса?
Если твоего, то:
if FindWindow("TForm1","Form1")<>0 then Applicatin.Terminate;
перед CreateForm
{подключи модуль Windows}


 
Igor   (2003-04-03 10:26) [2]

имя процесса я задаю (не моя программа)


 
a   (2003-04-03 11:49) [3]

Удалено модератором
Примечание: Offtopic


 
Joisy ©   (2003-04-03 11:54) [4]

Izvinite za oshibku (vishe).

Ya dumayu chto eto mojno sdelat sled obrazom - periodicheski zapuskay api func EnumWindows, v perviy raz zapomni handle i imya nujnogo okna FindWindow(inHWND, TitleTxt) i elsi obnarujitsya chto poyavilos eshe odno okno s takim je imene posilay yemu SendMessage(HWND, WM_CLOSE, 0, 0)

poeksperemeniruy koroche


 
Digitman ©   (2003-04-03 12:02) [5]

>Igor

реализуй службу, которая будет (глобально в системе, для всех существующих и потенциально стартуемых) перехватывать все вызовы kernel32.CreateProcess[Ex]


 
Igor   (2003-04-03 12:08) [6]

>digitman Можно поподробней?


 
Digitman ©   (2003-04-03 12:31) [7]

>Igor

В подавляющем большинстве случаев новый процесс создается вызовом неким процессом (например, процессом Explorer"a) ф-ции kernel32.CreateProcess[Ex]. Вполне достаточно будет внедрить во все контролируемые (существующие и вновь стартуемые) процессы код перехвата обращения (со стороны этих процессов) к ф-ции CreateProcess[Ex] из kernel32.dll и возвращать отказ, если происходит попытка запуска некоего нежелательного процесса.
Внедрение кода перехвата можно возложить на некое "свое" сервисное приложение, автоматически стартуемое при старте системы.


 
Igor   (2003-04-03 12:59) [8]

>digitman
Если я правильно понял,то: я пишу некое приложение, которое при старте внедряет во все уже сущестующие процессы упомянутую тобой функцию, затем при возникновении нового процесса: если плохой, то отрубать если хороший, то внедрять функцию.

Вопрос: как внедрить? (Пример кода)


 
Digitman ©   (2003-04-03 14:06) [9]


> Igor


Неправильно понял. Ты пишешь приложение, которое при старте внедряет во все существующие процессы код, осуществляющий перехват обращений этих процессов к упомянутой функции.

Когда некий процесс A обратится к упомянутой ф-ции c целью попытки создания процесса B, код, который ты внедрил в этот процесс А, получит управление, если старт B нежелателен, вернет отказ; иначе - вызовет оригинальную (перехваченную) ф-цию, дождется успешного старта процесса и внедрит в него копию кода перехвата.

внедрение кода - см. ф-ции VirtualQueryEx, VirtualProtectEx, WriteProcessMemory и т.д.

старт внедренного кода - см. CreateRemoteThread

перехват экспортируемых/импортируемых Win32API-вызовов в теле внедренного кода - см. описание формата PE-модулей


 
Igor   (2003-04-03 16:19) [10]

tnx



Страницы: 1 вся ветка

Текущий архив: 2003.06.02;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
3-2784
Dimaz-z
2003-05-13 19:26
2003.06.02
Как упаковать таблицу Paradox?


1-2977
Mihan
2003-05-15 12:53
2003.06.02
Алгоритм умножения в столбик


1-2983
$Hic0
2003-05-21 13:31
2003.06.02
Странное поведение переменной цикла


1-2842
Xeon
2003-05-21 23:08
2003.06.02
Реестр


4-3206
maxi
2003-04-03 16:46
2003.06.02
Что такое Progman ?