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 и написать заготовочку, значит это хороший студент не разгильдяй. При убийстве процесса посылается сообщение на админское место о злобном студенте. И если мне будет влом спуститься на этаж ниже и надрать ему уши, пусть общается на здоровье.
|
|