Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Неумирающий процесс.


Basilio ©   (2003-07-29 18:19:00) 

Win98SE, Delphi 5.
Процесс создан при помощи CreateProcess.
У него перехватываются потоки ввода/вывода:stdin,stderr,stdout.
в startupinfo dwflags стоит STARTF_USESTDHANDLES;
в CreateProcess флаг InheritHandles=false.

в списке процессов FarManager"a значатся WINOLDAP и REDIR32, которые умирают с процессом, при условии, что он умирает собственной смертью.

если при помощи TerminateProcess попробовать убить етот процесс, то ничего не получится. TerminateProcess вернёт true, а процесс останется живым. Повторные вызовы TerminateProcess возвращают false. Far тоже его убить по F8 не может :(

Если у процесса ввод/вывод не перенаправлять
(убрать .dwFlags=STARTF_USESTDHANDLES), то REDIR32 не грузиться и процесс нормально убивается.

Как можно бороться с процессом?


Игорь Шевченко   (2003-09-11 12:47:00) [1]


> исходники sysinternals"овского ProcExplorer"a (они где то
> есть, но где... :)


Их нету :) или есть у Руссиновича с Когсуелом :))

> Очень интересуют функция VDMTerminateTaskWOW и иже с ней


Попробуй в Wine поискать, может, прольет свет...


Basilio   (2003-09-11 11:55:00) [2]

up,
DebugAPI - это часом, не VDMDBG.DLL?

Копал долго.. накопал, что пути могут быть найдены в использовании библиотек (в зависимости от операционки) NTVDM.EXE, VDMDBG.DLL, PSAPI.DLL, TollHelp32.

где взять подробную информацию по ним?
статья http://www.rsdn.ru/article/qna/baseserv/killapp.xmlпроливает мало света.. :(
Очень интересуют функция VDMTerminateTaskWOW и иже с ней.


AlexRush   (2003-07-30 12:05:00) [3]

Во первых: TerminateProcess... Terminating a process does not necessarily remove the process object from the system. A process object is deleted when the last handle to the process is closed.
Во вторых: Можно внедриться в него (DebugAPI, Hooks и пр.) и грохнуть изнутри (ExitProcess).
В третих: поискать исходники sysinternals"овского ProcExplorer"a (они где то есть, но где... :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо