![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Закрытие процесса [D7, WinXP]
Alex870 © (2005-06-21 13:46:00)Подскажите пожалуйста, можно ли перехватить закрытие процесса моего приложения, выполнить какие-либо действия, а потом завершить процесс. Приложение у меня без формы:
program MyProg;
uses
Windows, messages;
var
M : tagMSG;
begin
while GetMessage( M, HInstance, 0, 0) do
begin
TranslateMessage(M);
DispatchMessage(M);
end;
end.
Если нет, подскажите, может создание формы поможет? Спасибо
Digitman (2005-06-22 09:48:00) [61]
> Alex870 (22.06.05 09:41) [30]
а не проще ли написать свою собственную программу (сервис) для мониторинга траффика и ведения статистики ? не такое уж и сложное это дело
Alex870 (2005-06-22 09:41:00) [62]
> Игорь Шевченко
>
> Вот если не секрет, какой смысл при завершении процесса
> выполнять некоторые действия ? Может, какой другой способ
> есть решить задачу ?
Конечно не секрет, извиняюсь, что сразу не описал. Моя программа должна следить за трафиком на определенной машине (НЕ сервере). Есть конечно много готовых (DUMeter, TMeter...), но они меня не устраивают, ведь после перезагрузки или смены пользователя они начинают считать трафик заново, а моя прога именно этот случай и должна отлавливать, и сохранять в файл время и значения in,out трафика на это время, а так же аккаунт (user name) пользователя.
MS-MEN (2005-06-22 09:10:00) [63]С драйвером?
Вместо CALL_GATE поставь DRIVER_GATE
kaZaNoVa (2005-06-22 01:22:00) [64]MS-MEN © (21.06.05 20:14) [24]
DEBUG не помогла:(
kaZaNoVa (2005-06-21 20:26:00) [65]но иногда вылетает BSOD :(
kaZaNoVa (2005-06-21 20:25:00) [66]в Windows 2000 SP4, запущенной на VMware программа [18] тоже вылетает:( (Runtime Error 216)
kaZaNoVa (2005-06-21 20:15:00) [67]MS-MEN © (21.06.05 20:09) [23]
проблема в данных типа:
case Version.dwBuildNumber of
2195 : begin // Windows 2000
UndocData.ActivePsListOffset := $0A0;
UndocData.PidOffset := $09C;
UndocData.NameOffset := $1FC;
UndocData.ppIdOffset := $1C8;
UndocData.ImgNameOffset := $000;
end;
для Windows 2003 Server - не подскажите что туда вписать?
MS-MEN (2005-06-21 20:14:00) [68]>kaZaNoVa
>у меня вылетает на CallRing0, права админа...
Это говорит о том что у тебя SP2 или 2003 попробуй получить привилигию DEBUG
если не поможет тебе надо использовать системною привилигию DEBUG.
MS-MEN (2005-06-21 20:09:00) [69]Например
Если в конце поставить Readln то процесс будет в бездействий это будет, отложатся не только в диспетчере задач, а также во всей системе а если вы установите, например Repeat Until … то система пойдет в BSOD также отразится во всей системе, так как REPEAT и UNTIL используют ф-ций API, так как в драйвере запрещается использовать ф-ций WinAPI только NativeAPI (Их также можно использовать и в в третем кольце.
kaZaNoVa (2005-06-21 20:06:00) [70]MS-MEN © (21.06.05 20:02) [21]
у меня вылетает на CallRing0, права админа...
MS-MEN (2005-06-21 20:02:00) [71]Вообще надо иметь привилигие системы но к сожалению это возможно
только с помощью Драйвера, хотя и из нулевого кольца тоже возможно
Что я показал, не обращайте сильного внимание, так как это
и - за не правильного обращение к системному процессу может
вызвать BSOD (Синие окно).
kaZaNoVa (2005-06-21 20:00:00) [72]MS-MEN © (21.06.05 19:55) [19]
фантастика ... :)))
сейчас попробую:)
MS-MEN (2005-06-21 19:55:00) [73]Я запутался измените эту строку
ChangeProcessId(MyPid,0); // Также и PID укажем системный
на эту
ChangeProcessId(MyPid,4); // Также и PID укажем системный
MS-MEN (2005-06-21 19:52:00) [74]Ну, во-первых, все, что относится к системе, если считать
низкокого уровня программирование то везде надо иметь
Админовские привилигие иначе не как.
Во - вторых там есть модуль, который также может работать
с нулевым кольцом (Без драйвера) и кстати тоже надо иметь
привилигие Админа, но этот вопрос уже решен.
Вот маленький переделанный код.
program Protection;
{$APPTYPE CONSOLE}
uses
Windows,
Ring0;
Var
MyPid:THandle; // Текущий процесс.
begin
InitialzeRing0Library(CALL_GATE); // Переходим в нулевое кольцо (Без драйвера)
MyPid := GetCurrentProcessId(); // Берем текущий PID
ChangeProcessName(MyPid, 'System'); // Переименуем как системный
ChangeProcessId(MyPid,0); // Также и PID укажем системный
FreeRing0Library(); // Выгружаемся из нулевого кольца
end.
А теперь попробуй удалить его из системы
Не помишает также скрыть сам файл или даже папку
это тоже возможно с помощью перехвата.
Пойщю может скину код для скрытия файлов/папок.
Игорь Шевченко (2005-06-21 17:34:00) [75]Alex870 (21.06.05 16:55) [16]
Вот если не секрет, какой смысл при завершении процесса выполнять некоторые действия ? Может, какой другой способ есть решить задачу ?
"Не все прямые дороги ведут к цели, то, что нельзя сделать шилом, можно штопором".
Alex870 (2005-06-21 16:55:00) [76]
> А...я понял. Дети Ивана Кулибина вышли на волю.
10 баллов! (не за красоту, а за смысл). Однако мне лично статья показалась познавательной, так как мои знания еще далеки до MS-REM'a и до Ваших, однако применять такие вещи мне кажется опасным, что подтверждает и автор статьи, хотя и не всегда явно. Одно я понял наверняка - кроме перехвата TerminateProcess выхода другого нет, ну или то, что предложил kaZaNoVa © в [5]. Всем огромное спасибо! Если у кого есть еще решения - буду очень признателен.
Игорь Шевченко (2005-06-21 16:35:00) [77]MS-REM (21.06.05 16:20) [14]
Я, собственно говоря, читал. Если ты мне скажешь, на что именно надо обратить внимание, а еще лучше, приведешь конкретную цитату, тогда есть смысл продолжать дискуссию. Драйвера писать - дело нехитрое, только следует учесть, что права на загрузку драйвера есть не у всех, и плясать уже от этого факта.
MS-REM (2005-06-21 16:20:00) [78]> Игорь Шевченко
Прочти внимательнно.
Игорь Шевченко (2005-06-21 16:03:00) [79]MS-REM (21.06.05 15:56) [12]
А...я понял. Дети Ивана Кулибина вышли на волю.
Мой совет - вместо того, чтобы заниматься различного рода ерундой, аналогичной рассмотренной в указанной статье и примерам к ней, лучше что-нибудь дельное напиши.
А от таких скрывальщиков процессов существует раскрывальщик и не один.
MS-REM (2005-06-21 15:56:00) [80]Прилагаются примеры на DELPHI (Снизу статьй)
там есть пример.