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

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

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

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

вроде всё

Звучит очень здорово. Но я даже не смог получить список всех хендлов в системе. И топик висит уже сутки об этом, и так никто и не помог даже с этим, не говоря уже о завершении чужого хендла.
Ответить с цитированием