Здравствуйте, гость ( Вход | Регистрация )
Mar 18 2007, 00:15
IP: 192.168.0.0/16 | Сообщение
#1
|
|
|
Новичок ![]() Группа: Members Сообщений: 47 Регистрация: 3-January 07 Пользователь №: 5755 Вес: -1 кг
Удалено: 26.56% |
нужно закрыть хэндл процесса, имя процесса известен.. имя хэндла \Default , тип хэндла Desktop.
вот к примеру программа Process Explorer в ней можно закрывать хэндлы... подскажите как на дельфи это сделать... знаю что нада сначало использовать функцию OpenProcess а вот потом фиг знает ..... Подскажите |
|
|
|
![]() |
Mar 22 2007, 02:01
IP: 87.236.0.0/16 | Сообщение
#2
|
|
![]() Пользователь ![]() ![]() Группа: Members Сообщений: 67 Регистрация: 22-March 07 Из: Павлова Пользователь №: 6619 Вес: 2 кг
Удалено: 1.47% |
На простой делфе, без .Net?
|
|
|
|
Mar 22 2007, 20:35
IP: 192.168.0.0/16 | Сообщение
#3
|
|
|
Новичок ![]() Группа: Members Сообщений: 47 Регистрация: 3-January 07 Пользователь №: 5755 Вес: -1 кг
Удалено: 26.56% |
да
ну или на .net в общем так и так |
|
|
|
Mar 23 2007, 03:35
IP: 87.236.0.0/16 | Сообщение
#4
|
|
![]() Пользователь ![]() ![]() Группа: Members Сообщений: 67 Регистрация: 22-March 07 Из: Павлова Пользователь №: 6619 Вес: 2 кг
Удалено: 1.47% |
Прошу прощение за незнание синтаксиса делфи, но вот для .нет такая функция
procedure Kill_Process(Name : String); var P : System.&Array; i : int32; begin P := Process.GetProcesses; for i := 0 to P.Length - 1 do if (P[i] as Process).ProcessName = Name then (P[i] as Process).Kill; end; |
|
|
|
Mar 27 2007, 06:24
IP: 192.168.0.0/16 | Сообщение
#5
|
|
|
Новичок ![]() Группа: Members Сообщений: 47 Регистрация: 3-January 07 Пользователь №: 5755 Вес: -1 кг
Удалено: 26.56% |
да это просто он убивает процесс, командой киллпроцесс... а нада как то функцией closeHandle , вот прога есть такая process explorer, вот она как то убивает хэндлы...
|
|
|
|
Mar 27 2007, 14:58
IP: 87.236.0.0/16 | Сообщение
#6
|
|
![]() Пользователь ![]() ![]() Группа: Members Сообщений: 67 Регистрация: 22-March 07 Из: Павлова Пользователь №: 6619 Вес: 2 кг
Удалено: 1.47% |
да это просто он убивает процесс, командой киллпроцесс... а нада как то функцией closeHandle , вот прога есть такая process explorer, вот она как то убивает хэндлы... Что значит "убивает хэндлы"? Если тебе нужно убить процесс по хэндлу, можешь сравнить свойство Process.Handle. Есть какая то принципиальная разница, как убивать приложение? Возможно тебе нужно Process.Close, а не Process.Kill Сообщение отредактировал TerraGhost - Mar 27 2007, 15:01 |
|
|
|
Mar 27 2007, 23:05
IP: 192.168.0.0/16 | Сообщение
#7
|
|
|
Опытный пользователь ![]() ![]() ![]() ![]() Группа: Members Сообщений: 323 Регистрация: 5-July 04 Пользователь №: 38 Вес: 2 кг
Удалено: 24.36% |
мда, RFTM
CloseHandle CloseHandle invalidates the specified object handle, decrements the object's handle count, and performs object retention checks. After the last handle to an object is closed, the object is removed from the system. Persistent objects such as databases and files will remain in storage, but must be re-opened to be accessed again. Closing a thread handle does not terminate the associated thread. To remove a thread object, you must terminate the thread, and then close all handles to the thread. |
|
|
|
Apr 13 2007, 13:08
IP: 192.168.0.0/16 | Сообщение
#8
|
|
|
Новичок ![]() Группа: Members Сообщений: 47 Регистрация: 3-January 07 Пользователь №: 5755 Вес: -1 кг
Удалено: 26.56% |
|
|
|
|
Apr 13 2007, 17:10
IP: 87.236.0.0/16 | Сообщение
#9
|
|
|
Живёт здесь ![]() ![]() ![]() ![]() ![]() ![]() Группа: Members Сообщений: 1233 Регистрация: 30-September 06 Пользователь №: 4590 Вес: 106 кг
Удалено: 31.31% |
да это просто он убивает процесс, командой киллпроцесс... а нада как то функцией closeHandle , вот прога есть такая process explorer, вот она как то убивает хэндлы... Ты ее дизассемблировал и увидел там именно эту функцию?) -------------------- Мощный DC++ Сервер в сети (до 10 Тб!) + Фотогалерея, адрес: x-serv.kraslan.ru, FTP сервер, Обновления Nod32)
Доступно пользователям Krs-Ix. Если проблему нельзя решить с помощью магии, ее вообще не стоит решать. |
|
|
|
Apr 13 2007, 17:59
IP: 192.168.0.0/16 | Сообщение
#10
|
|
|
Новичок ![]() Группа: Members Сообщений: 47 Регистрация: 3-January 07 Пользователь №: 5755 Вес: -1 кг
Удалено: 26.56% |
|
|
|
|
Apr 13 2007, 19:29
IP: 192.168.0.0/16 | Сообщение
#11
|
|
![]() Живёт здесь ![]() ![]() ![]() ![]() ![]() ![]() Группа: Members Сообщений: 1072 Регистрация: 23-July 06 Пользователь №: 3749 Вес: 227 кг
Удалено: 76.75% |
нужно закрыть хэндл процесса, имя процесса известен.. имя хэндла \Default , тип хэндла Desktop. вот к примеру программа Process Explorer в ней можно закрывать хэндлы... подскажите как на дельфи это сделать... знаю что нада сначало использовать функцию OpenProcess а вот потом фиг знает ..... Подскажите Функция же есть CloseHandle.. Но если закрыть один только хендл, то по моему случится глюк этого процесса А вообще если нет хендела, то ты его получишь после использования OpenProcess, потом загони его в CloseHandle, обвесь ещё чем надо и всё. Синтаксис функции дан ниже. CODE BOOL CloseHandle( HANDLE hObject ); MSDN... ЗЫ Если хочешь получить полный ответ, то обьясни смысл, суть твоей задачи, так будет понятней для всех. |
|
|
|
Apr 18 2007, 19:00
IP: 192.168.0.0/16 | Сообщение
#12
|
|
|
Новичок ![]() Группа: Members Сообщений: 47 Регистрация: 3-January 07 Пользователь №: 5755 Вес: -1 кг
Удалено: 26.56% |
Функция же есть CloseHandle.. Но если закрыть один только хендл, то по моему случится глюк этого процесса А вообще если нет хендела, то ты его получишь после использования OpenProcess, потом загони его в CloseHandle, обвесь ещё чем надо и всё. Синтаксис функции дан ниже. CODE BOOL CloseHandle( HANDLE hObject ); MSDN... ЗЫ Если хочешь получить полный ответ, то обьясни смысл, суть твоей задачи, так будет понятней для всех. ftp://192.168.24.3/inc@me/ вот там есть видеоролик, нада как то программно через дельфи сделать... |
|
|
|
Apr 18 2007, 20:18
IP: 192.168.0.0/16 | Сообщение
#13
|
|
![]() Живёт здесь ![]() ![]() ![]() ![]() ![]() ![]() Группа: Members Сообщений: 1072 Регистрация: 23-July 06 Пользователь №: 3749 Вес: 227 кг
Удалено: 76.75% |
Любопытно, ты сам пробовал проделать то-же через эту прогу(ProcessExplorer)? |
|
|
|
Apr 21 2007, 18:11
IP: 192.168.0.0/16 | Сообщение
#14
|
|
|
Новичок ![]() Группа: Members Сообщений: 47 Регистрация: 3-January 07 Пользователь №: 5755 Вес: -1 кг
Удалено: 26.56% |
|
|
|
|
Apr 21 2007, 18:26
IP: 192.168.0.0/16 | Сообщение
#15
|
|
![]() Живёт здесь ![]() ![]() ![]() ![]() ![]() ![]() Группа: Members Сообщений: 1072 Регистрация: 23-July 06 Пользователь №: 3749 Вес: 227 кг
Удалено: 76.75% |
так это я и делал видеоролики прогой camstudio Хех.. Тогда разложи 'по полкам' как именно вырубал процесс, а то там есть действия смысл которых мне непонятен.. Если просто сделать CloseHandle, то PE выдаёт алерт с надписью "неверный дескриптор", при этом процесс не вырубается. Ещё не понял, как ты вырубил службу из под taskmgr'a? |
|
|
|
Apr 21 2007, 19:42
IP: 192.168.0.0/16 | Сообщение
#16
|
|
|
Новичок ![]() Группа: Members Сообщений: 47 Регистрация: 3-January 07 Пользователь №: 5755 Вес: -1 кг
Удалено: 26.56% |
Хех.. Тогда разложи 'по полкам' как именно вырубал процесс, а то там есть действия смысл которых мне непонятен.. Если просто сделать CloseHandle, то PE выдаёт алерт с надписью "неверный дескриптор", при этом процесс не вырубается. Ещё не понял, как ты вырубил службу из под taskmgr'a? 1) запустил Kaspersky Internet Security 6.0.0.303 2) запустил proccess explorer 10.2 3) в proccess explorer 10.2 выбрал процесс avp.exe (от пользователя system) 4) выбрал хэндл (тип хэндла Desktop, имя хэндла \default) 5) правой кнопкой выбрал меню closehandle 6) потом через минуту либо + - 30 секунд вылетел процесс avp.exe (от system) 7) когда вылетел этот процесс то можно спокойно отрубить avp.exe (из под текущего пользователя, у меня был пользщователь Администратор) незнаю может у меня старый касперский был , или старая винда (у меня винда windows XP SP2) |
|
|
|
Apr 21 2007, 20:28
IP: 192.168.0.0/16 | Сообщение
#17
|
|
![]() Живёт здесь ![]() ![]() ![]() ![]() ![]() ![]() Группа: Members Сообщений: 1072 Регистрация: 23-July 06 Пользователь №: 3749 Вес: 227 кг
Удалено: 76.75% |
1) запустил Kaspersky Internet Security 6.0.0.303 2) запустил proccess explorer 10.2 3) в proccess explorer 10.2 выбрал процесс avp.exe (от пользователя system) 4) выбрал хэндл (тип хэндла Desktop, имя хэндла \default) 5) правой кнопкой выбрал меню closehandle 6) потом через минуту либо + - 30 секунд вылетел процесс avp.exe (от system) 7) когда вылетел этот процесс то можно спокойно отрубить avp.exe (из под текущего пользователя, у меня был пользщователь Администратор) незнаю может у меня старый касперский был , или старая винда (у меня винда windows XP SP2) Это я понял. У меня при попытки закрытия хандела любого процесса выдается ошибка "Error opening process". У меня отключина половина служб, хз, может PE юзает какую-то из них, на сколько я понимаю, ведь она пользуется winapi. И по моему это не прокатит под ограниченым пользователем. Сообщение отредактировал lexxys - Apr 22 2007, 18:47 |
|
|
|
May 11 2007, 16:38
IP: 192.168.0.0/16 | Сообщение
#18
|
|
|
Новичок ![]() Группа: Members Сообщений: 47 Регистрация: 3-January 07 Пользователь №: 5755 Вес: -1 кг
Удалено: 26.56% |
я знаю тут есть умные люди x-disa, troop, kernel, rootещё много, ну подскажите как сделать?
|
|
|
|
Mar 21 2008, 10:38
IP: 10.10.0.0/16 | Сообщение
#19
|
|
![]() РазPIздяй любитель ![]() ![]() ![]() ![]() Группа: Members Сообщений: 331 Регистрация: 20-February 08 Из: астрала Пользователь №: 10745 Настроение: ХЗ Вес: 18 кг
Удалено: 17.25% |
я знаю тут есть умные люди x-disa, troop, kernel, rootещё много, ну подскажите как сделать? Если вам нужно управлять самим процессом непосредственно, то лучше использовать сладкую парлчку CreateProcess / TerminateProcess . А для того чтобы грохнуть процесс OpenProcess / TerminateProcess. функция CloseHandle не может закрыть дескриптор процесса не в родительском потоке, поэтому её использование в данном контексте бессмыслено. Вот пример из FAQ по DELPHI: Цитата Как правильно завершить некое приложение? Если не принудительно, то можно послать на его Instance сообщение WM_QUIT. Если же необходимо принудительно терминировать приложение, то смотрите ниже - Под Windows NT процесс можно терминировать через специально предназначенный для этого хэндл. Иначе гарантии нет. Предположим, что процесс создаем мы, ожидая его завершения в течение maxworktime. Тогда var dwResult: Longint; // This example was converted from C source. begin // Not tested. Some 'nil' assignments must be applied // as zero assignments in Pascal. Some vars need to // be declared (maxworktime, si, pi). AA. if CreateProcess(nil, CmdStr, nil, nil, FALSE, CREATE_NEW_CONSOLE, nil, nil, si, pi) then begin CloseHandle( pi.hThread ); dwResult := WaitForSingleObject(pi.hProcess, maxworktime*1000*60); CloseHandle( pi.hProcess ); if dwResult <> WAIT_OBJECT_0 then begin pi.hProcess := OpenProcess(PROCESS_TERMINATE, FALSE, pi.dwProcessId); if pi.hProcess <> nil then begin TerminateProcess(pi.hProcess, 0); CloseHandle(pi.hProcess); end; end; end; end; Сообщение отредактировал ZEF - Mar 21 2008, 10:45 -------------------- |
|
|
|
![]() ![]() |
| Текстовая версия | Сейчас: 15th December 2025 - 17:11 | |