C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Убиваем процесс...
snad
Отправлено: 26.11.2005, 16:15


Ученик-кочегар

Группа: Участник
Сообщений: 16



Есть необходимость постоянно следить за запускаемыми процессами и убивать какой-то определенный в случае его появления. Убить процесс не проблема, но как лучше организовать его отлов. Конечно можно с помощью таймера периодически просматривать список задач, но будет ли это оптимальным вариантом?
Guest
Отправлено: 26.11.2005, 19:27


Не зарегистрирован







написать глобальный хук (hook) см. в Статьях и в поиске по форуму
Gedeon
Отправлено: 28.11.2005, 08:56


Ветеран

Группа: Модератор
Сообщений: 1742



Хук на что? на CreateProcess? Без драйвера не обойдется.
На форуме такого нету.

вот ссылка
Дерзайте.
snad
Отправлено: 29.11.2005, 02:31


Ученик-кочегар

Группа: Участник
Сообщений: 16



Поставил хук на создание окон. Если класс окна совпадает с нужным мне, беру handle этого окна и убиваю.
Появился еще вопрос. Можно ли, зная handle главного окна запускаемого приложения, узнать откуда оно пыталось запуститься?
Gedeon
Отправлено: 29.11.2005, 12:51


Ветеран

Группа: Модератор
Сообщений: 1742



QUOTE (snad @ 29/11/2005, 02:31)
Появился еще вопрос. Можно ли, зная handle главного окна запускаемого приложения, узнать откуда оно пыталось запуститься?

Вам помогут функции
CODE

UINT GetWindowModuleFileName(          HWND hwnd,
   LPTSTR lpszFileName,
   UINT cchFileNameMax
);

и
CODE

DWORD GetWindowThreadProcessId(          HWND hWnd,
   LPDWORD lpdwProcessId
);

Кстати вторая будет очень полезна при вашем подходе, а как насчет процессов без окон, более того процесс может запуститься, сделать что-нить нехорошее, а уж потом создать окно.
snad
Отправлено: 29.11.2005, 14:51


Ученик-кочегар

Группа: Участник
Сообщений: 16



Спасибо Gedeon

Не важно сделает процесс что-нибудь при запуске или нет. Главное чтобы потом не работал.
Вопрос-то начался с того, что нужно было отучить неродивых студентов пользоваться миркой во время занятий.
Георгий
Отправлено: 29.11.2005, 22:51


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



QUOTE (snad @ 29/11/2005, 15:51)
Вопрос-то начался с того, что нужно было отучить неродивых студентов пользоваться миркой во время занятий.

а почему бы по шее им не надавать?
snad
Отправлено: 30.11.2005, 02:46


Ученик-кочегар

Группа: Участник
Сообщений: 16



Работаем без рукоприкладства. Да и преподы не способны уследить, чем студенты там занимаются. Вот и страдай бедный сисадмин.
Gedeon
Отправлено: 30.11.2005, 08:58


Ветеран

Группа: Модератор
Сообщений: 1742



А почему не закрыть порты, адреса?
klen
Отправлено: 30.11.2005, 10:57


Машинист паровоза

Группа: Участник
Сообщений: 239



QUOTE (Gedeon @ 30/11/2005, 08:58)
А почему не закрыть порты, адреса?

ага, фаерволом, тогда не ты будешь писать ловилку, а они изучать API, а ты кофе пить...
snad
Отправлено: 30.11.2005, 21:34


Ученик-кочегар

Группа: Участник
Сообщений: 16



Так файлы мирки еще физически надо удалять с винта — касперский ругается на нее, забивает мусором файлы отчетов.
snad
Отправлено: 01.12.2005, 18:19


Ученик-кочегар

Группа: Участник
Сообщений: 16



Кто-нить подскажет, по каким параметрам кроме имени и размера можно найти в папке определенный файл (эксешник мирки).
Георгий
Отправлено: 01.12.2005, 21:44


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



QUOTE (snad @ 01/12/2005, 19:19)
Кто-нить подскажет, по каким параметрам кроме имени и размера можно найти в папке определенный файл (эксешник мирки).

хэш какой-нибудь от содержимого файли или от заголовка посчитай
snad
Отправлено: 02.12.2005, 00:27


Ученик-кочегар

Группа: Участник
Сообщений: 16



В свойствах файла на закладке Version есть такие параметры: "Internal Name", "Original File name". Как мне вытянуть эти значения в своей проге.

---------------------------------------------------------------------------------------------
Кому интересно. Решил проблему функциями:
GetFileVersionInfoSize
GetFileVersionInfo
VerQueryValue

Отредактировано snad — 02/12/2005, 03:18
Grigoriy
Отправлено: 02.12.2005, 07:10


Мастер участка

Группа: Участник
Сообщений: 381



QUOTE (snad @ 02/12/2005, 00:27)
В свойствах файла на закладке Version есть такие параметры: "Internal Name", "Original File name". Как мне вытянуть эти значения в своей проге.

---------------------------------------------------------------------------------------------
Кому интересно. Решил проблему функциями:
GetFileVersionInfoSize
GetFileVersionInfo
VerQueryValue

А я бы на месте студента в таком случае архив сначала получил МИРКА и хранил его под другим расширением файла.
Gedeon
Отправлено: 02.12.2005, 09:37


Ветеран

Группа: Модератор
Сообщений: 1742



В данной ситуации таки самое правильное запретить ее адреса.
exp
Отправлено: 03.12.2005, 00:08


Мастер участка

Группа: Участник
Сообщений: 304



Я студент. Читаю это. И вдруг понимаю, что это пишет мой родной сисадмин, который вечно ругается на меня, что я в мирке сижу.
Мои действия:
1) Беру с собой Process Exploreer
2) Пишу заготовочку, в которую надо будет вставить имя админского процесса для заклания.
3) Запускаю ProcessExplorer на моей вузовской машине
4) Методом тыка догадываюсь о процессе, который мешает мне жить и болтать по мирке
5) Вставляю имя процесса в заготовочку (см. пункт 2)
6) Заготовочка с периодом 50 мс просматривает список процессов, убивая админский процесс
7) Студент доволен. Админ в бешенстве.
snad
Отправлено: 05.12.2005, 00:55


Ученик-кочегар

Группа: Участник
Сообщений: 16



Ну для начала студент должен догадаться, что его любимую мирку убивает какой-то админский процесс, а не глючит сама мирка и иные обстоятельства.
Если уж студент не поленился притащить Process Exploreer и написать заготовочку, значит это хороший студент не разгильдяй. При убийстве процесса посылается сообщение на админское место о злобном студенте. И если мне будет влом спуститься на этаж ниже и надрать ему уши, пусть общается на здоровье.

Вернуться в Вопросы программирования в C++Builder