Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.01.2016, 12:34
EEjester EEjester вне форума
Прохожий
 
Регистрация: 03.07.2014
Сообщения: 15
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Получить список всех хендлов системы типа mutant

Как получить список всех хендлов в системе типа mutant(mutex)?
Знаю что как то с помощью вот этого:
Код:
NtQuerySystemInformation(......SystemHandleInformation......)
Помогите пожалуйста.
Ответить с цитированием
  #2  
Старый 16.01.2016, 19:37
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Что это за "типа mutant"? Вот обычный список, пример из drkb
Вложения
Тип файла: zip taskmon.zip (9.0 Кбайт, 13 просмотров)
Ответить с цитированием
  #3  
Старый 16.01.2016, 19:51
EEjester EEjester вне форума
Прохожий
 
Регистрация: 03.07.2014
Сообщения: 15
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Не могу открыть проект тот что ты скинул. Пустой проект.
А задача у меня следующая: закрыть mutex созданный чужим процессом.
Ответить с цитированием
  #4  
Старый 16.01.2016, 19:57
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Архив и проект рабочие, результат показывает детальный список запущенных процессов

З.Ы. Кстати
Цитата:
function OpenMutex(
dwDesiredAccess: DWORD; // Задает права доступа к объекту
bInheritHandle: BOOL; // Задает, может ли объект наследоваться дочерними процессами
lpName: PChar // Имя объекта
): THandle; stdcall;
а уничтожить
Код:
ReleaseMutex();

Последний раз редактировалось Alegun, 16.01.2016 в 20:04.
Ответить с цитированием
  #5  
Старый 16.01.2016, 20:33
EEjester EEjester вне форума
Прохожий
 
Регистрация: 03.07.2014
Сообщения: 15
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Архив и проект рабочие, результат показывает детальный список запущенных процессов

З.Ы. Кстати
а уничтожить
Код:
ReleaseMutex();

Это свой mutex. А чужой? Я уже как неделю мучаюсь. Через procexp запросто можно найти этот мутекс и убить.
Я написал dll, и инжектирую её в процесс который создал мутекс.
Код dll такой:
Код:
var
    Timer,i: dword;
    hProc1:HWND;
 
procedure TimerProc(hwnd, uMsg, idEvent, dwTime: dword);stdcall;
var
 PID:Integer;
 hMutex:THandle;
begin
 hProc1:=OpenProcess(PROCESS_DUP_HANDLE, false, GetCurrentProcessId);
 hMutex:=OpenMutex(MUTEX_ALL_ACCESS, true, '_!MSHISTORY!_');
 if hMutex <> 0 then ShowMessage('ok') else ShowMessage('nooo');
 DuplicateHandle(hProc1, hMutex, 0, 0, 0, false, DUPLICATE_CLOSE_SOURCE);
 CloseHandle(hMutex);
end;
 
begin
  Timer:=SetTimer(0,0,1000,@TimerProc);
end.

И всеравно не работает. Вот мой топик на форуме ваших коллег:
http://www.cyberforum.ru/delphi-begi...ad1639687.html
Ответить с цитированием
  #6  
Старый 16.01.2016, 22:11
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Просмотрел дружественную топку, коллеги там вам полность раскрыли тему, набросали инфы - вагон, бери и собирай, в чём загвоздка-то?

З.Ы. Как подсказка, примерный алгоритм-выжимка из тамошних постов:

1) Вызываем OpenMutex - это чтоб убедиться, что он есть плюс определить тип объекта на шаге 3
2) Используем NtQuerySystemInformation с классом SystemHandleInformation=2 для получения списка всех хендлов живущих в системе
3) Ищем в списке хендл открытого мьютекса и определяем его тип посредством ObjectTypeNumber
4) Ищем в списке хендлы мьютексов требуемого процесса по его PID и ObjectTypeNumber
5) Если нашли более одного, то проверяем соответствие заданному имени: OpenProcess + NtQueryObject с классом ObjectNameInformation=1
6) Если нашли соответствие, то убиваем найденный/е хендл/ы вызовом DuplicateHandle c параметром DUPLICATE_CLOSE_SOURCE

вроде всё

Последний раз редактировалось Alegun, 16.01.2016 в 22:43.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:18.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025