IPB

Здравствуйте, гость ( Вход | Регистрация )

> функция CloseHandle, помогите
NikolaY
сообщение 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 а вот потом фиг знает .....
Подскажите
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 18)
TerraGhost
сообщение Mar 22 2007, 02:01
IP: 87.236.0.0/16 | Сообщение #2


Пользователь
**

Группа: Members
Сообщений: 67
Регистрация: 22-March 07
Из: Павлова
Пользователь №: 6619



Вес:   2 кг  
Удалено: 1.47%


На простой делфе, без .Net?
Go to the top of the page
 
+Quote Post
NikolaY
сообщение Mar 22 2007, 20:35
IP: 192.168.0.0/16 | Сообщение #3


Новичок
*

Группа: Members
Сообщений: 47
Регистрация: 3-January 07
Пользователь №: 5755



Вес:   -1 кг  
Удалено: 26.56%


да

ну или на .net

в общем так и так
Go to the top of the page
 
+Quote Post
TerraGhost
сообщение 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;
Go to the top of the page
 
+Quote Post
NikolaY
сообщение Mar 27 2007, 06:24
IP: 192.168.0.0/16 | Сообщение #5


Новичок
*

Группа: Members
Сообщений: 47
Регистрация: 3-January 07
Пользователь №: 5755



Вес:   -1 кг  
Удалено: 26.56%


да это просто он убивает процесс, командой киллпроцесс... а нада как то функцией closeHandle , вот прога есть такая process explorer, вот она как то убивает хэндлы...
Go to the top of the page
 
+Quote Post
TerraGhost
сообщение Mar 27 2007, 14:58
IP: 87.236.0.0/16 | Сообщение #6


Пользователь
**

Группа: Members
Сообщений: 67
Регистрация: 22-March 07
Из: Павлова
Пользователь №: 6619



Вес:   2 кг  
Удалено: 1.47%


QUOTE(NikolaY @ Mar 27 2007, 07:24 AM) *

да это просто он убивает процесс, командой киллпроцесс... а нада как то функцией closeHandle , вот прога есть такая process explorer, вот она как то убивает хэндлы...


Что значит "убивает хэндлы"? Если тебе нужно убить процесс по хэндлу, можешь сравнить свойство Process.Handle. Есть какая то принципиальная разница, как убивать приложение? Возможно тебе нужно Process.Close, а не Process.Kill

Сообщение отредактировал TerraGhost - Mar 27 2007, 15:01
Go to the top of the page
 
+Quote Post
ROOT
сообщение 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.

Go to the top of the page
 
+Quote Post
NikolaY
сообщение Apr 13 2007, 13:08
IP: 192.168.0.0/16 | Сообщение #8


Новичок
*

Группа: Members
Сообщений: 47
Регистрация: 3-January 07
Пользователь №: 5755



Вес:   -1 кг  
Удалено: 26.56%


ftp://192.168.11.13/2/
Go to the top of the page
 
+Quote Post
X-Disa
сообщение Apr 13 2007, 17:10
IP: 87.236.0.0/16 | Сообщение #9


Живёт здесь
******

Группа: Members
Сообщений: 1233
Регистрация: 30-September 06
Пользователь №: 4590



Вес:   106 кг  
Удалено: 31.31%


QUOTE(NikolaY @ Mar 27 2007, 07:24 AM) *

да это просто он убивает процесс, командой киллпроцесс... а нада как то функцией closeHandle , вот прога есть такая process explorer, вот она как то убивает хэндлы...

Ты ее дизассемблировал и увидел там именно эту функцию?)


--------------------
Мощный DC++ Сервер в сети (до 10 Тб!) + Фотогалерея, адрес: x-serv.kraslan.ru, FTP сервер, Обновления Nod32)
Доступно пользователям Krs-Ix.

Если проблему нельзя решить с помощью магии, ее вообще не стоит решать.
Go to the top of the page
 
+Quote Post
NikolaY
сообщение Apr 13 2007, 17:59
IP: 192.168.0.0/16 | Сообщение #10


Новичок
*

Группа: Members
Сообщений: 47
Регистрация: 3-January 07
Пользователь №: 5755



Вес:   -1 кг  
Удалено: 26.56%


QUOTE(X-Disa @ Apr 13 2007, 06:10 PM) *

Ты ее дизассемблировал и увидел там именно эту функцию?)

нет.. но нада именной этой....
ктонибуть помогите
Go to the top of the page
 
+Quote Post
Фримен
сообщение Apr 13 2007, 19:29
IP: 192.168.0.0/16 | Сообщение #11


Живёт здесь
******

Группа: Members
Сообщений: 1072
Регистрация: 23-July 06
Пользователь №: 3749



Вес:   227 кг  
Удалено: 76.75%


QUOTE(NikolaY @ Mar 18 2007, 01:15 AM) *

нужно закрыть хэндл процесса, имя процесса известен.. имя хэндла \Default , тип хэндла Desktop.
вот к примеру программа Process Explorer в ней можно закрывать хэндлы... подскажите как на дельфи это сделать... знаю что нада сначало использовать функцию OpenProcess а вот потом фиг знает .....
Подскажите


Функция же есть CloseHandle.. Но если закрыть один только хендл, то по моему случится глюк этого процесса biggrin2.gif

А вообще если нет хендела, то ты его получишь после использования OpenProcess, потом загони его в CloseHandle, обвесь ещё чем надо и всё.
Синтаксис функции дан ниже.
CODE
BOOL CloseHandle(
  HANDLE hObject
);


MSDN...



ЗЫ Если хочешь получить полный ответ, то обьясни смысл, суть твоей задачи, так будет понятней для всех.
Go to the top of the page
 
+Quote Post
NikolaY
сообщение Apr 18 2007, 19:00
IP: 192.168.0.0/16 | Сообщение #12


Новичок
*

Группа: Members
Сообщений: 47
Регистрация: 3-January 07
Пользователь №: 5755



Вес:   -1 кг  
Удалено: 26.56%


QUOTE(lexxys @ Apr 13 2007, 08:29 PM) *

Функция же есть CloseHandle.. Но если закрыть один только хендл, то по моему случится глюк этого процесса biggrin2.gif

А вообще если нет хендела, то ты его получишь после использования OpenProcess, потом загони его в CloseHandle, обвесь ещё чем надо и всё.
Синтаксис функции дан ниже.
CODE
BOOL CloseHandle(
  HANDLE hObject
);


MSDN...
ЗЫ Если хочешь получить полный ответ, то обьясни смысл, суть твоей задачи, так будет понятней для всех.



ftp://192.168.24.3/inc@me/
вот там есть видеоролик, нада как то программно через дельфи сделать...
Go to the top of the page
 
+Quote Post
Фримен
сообщение Apr 18 2007, 20:18
IP: 192.168.0.0/16 | Сообщение #13


Живёт здесь
******

Группа: Members
Сообщений: 1072
Регистрация: 23-July 06
Пользователь №: 3749



Вес:   227 кг  
Удалено: 76.75%


QUOTE(NikolaY @ Apr 18 2007, 08:00 PM) *

ftp://192.168.24.3/inc@me/
вот там есть видеоролик, нада как то программно через дельфи сделать...

Любопытно, ты сам пробовал проделать то-же через эту прогу(ProcessExplorer)?
Go to the top of the page
 
+Quote Post
NikolaY
сообщение Apr 21 2007, 18:11
IP: 192.168.0.0/16 | Сообщение #14


Новичок
*

Группа: Members
Сообщений: 47
Регистрация: 3-January 07
Пользователь №: 5755



Вес:   -1 кг  
Удалено: 26.56%


QUOTE(lexxys @ Apr 18 2007, 09:18 PM) *

Любопытно, ты сам пробовал проделать то-же через эту прогу(ProcessExplorer)?


так это я и делал видеоролики прогой camstudio

Go to the top of the page
 
+Quote Post
Фримен
сообщение Apr 21 2007, 18:26
IP: 192.168.0.0/16 | Сообщение #15


Живёт здесь
******

Группа: Members
Сообщений: 1072
Регистрация: 23-July 06
Пользователь №: 3749



Вес:   227 кг  
Удалено: 76.75%


QUOTE(NikolaY @ Apr 21 2007, 07:11 PM) *

так это я и делал видеоролики прогой camstudio

Хех.. Тогда разложи 'по полкам' как именно вырубал процесс, а то там есть действия смысл которых мне непонятен..
Если просто сделать CloseHandle, то PE выдаёт алерт с надписью "неверный дескриптор", при этом процесс не вырубается. Ещё не понял, как ты вырубил службу из под taskmgr'a?
Go to the top of the page
 
+Quote Post
NikolaY
сообщение Apr 21 2007, 19:42
IP: 192.168.0.0/16 | Сообщение #16


Новичок
*

Группа: Members
Сообщений: 47
Регистрация: 3-January 07
Пользователь №: 5755



Вес:   -1 кг  
Удалено: 26.56%


QUOTE(lexxys @ Apr 21 2007, 07:26 PM) *

Хех.. Тогда разложи 'по полкам' как именно вырубал процесс, а то там есть действия смысл которых мне непонятен..
Если просто сделать 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)
Go to the top of the page
 
+Quote Post
Фримен
сообщение Apr 21 2007, 20:28
IP: 192.168.0.0/16 | Сообщение #17


Живёт здесь
******

Группа: Members
Сообщений: 1072
Регистрация: 23-July 06
Пользователь №: 3749



Вес:   227 кг  
Удалено: 76.75%


QUOTE(NikolaY @ Apr 21 2007, 08:42 PM) *

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
Go to the top of the page
 
+Quote Post
NikolaY
сообщение 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ещё много, ну подскажите как сделать?
Go to the top of the page
 
+Quote Post
ZEF
сообщение Mar 21 2008, 10:38
IP: 10.10.0.0/16 | Сообщение #19


РазPIздяй любитель
****

Группа: Members
Сообщений: 331
Регистрация: 20-February 08
Из: астрала
Пользователь №: 10745
Настроение: ХЗ



Вес:   18 кг  
Удалено: 17.25%


Цитата(NikolaY @ May 11 2007, 16:38) *
я знаю тут есть умные люди 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


--------------------
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Rambler's Top100
Текстовая версия Сейчас: 15th December 2025 - 17:11
Rambler's Top100