Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Узнать процесс, который держит именнованый MUTEX 
:(
    Опции темы
lemax
Дата 3.8.2008, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 14.10.2007

Репутация: нет
Всего: 1



Процесс занимает именнованый мьютекс.
А другой процесс хочет узнать:"Кто занял этот именновыный мьютекс?"

Как решить такую задачку?

Это сообщение отредактировал(а) lemax - 3.8.2008, 01:10
PM MAIL   Вверх
Riply
Дата 3.8.2008, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 1
Всего: 32



Цитата(lemax @  3.8.2008,  01:09 Найти цитируемый пост)
Процесс занимает именнованый мьютекс.
А другой процесс хочет узнать:"Кто занял этот именновыный мьютекс?"

Как решить такую задачку?


Например,  можно так:
При помощи NtQuerySystemInformation(...SystemHandleInformation...)
получаем "массив" структур (SYSTEM_HANDLE_INFORMATION_EX), описывающих открытые Handl`ы.
Бежим по нему, проверяя тип Handl`а (ObjectTypeNumber) не равен ли он OBJECT_TYPE_MUTANT.
Если да, то открываем просесс (OpenProcess) по его ProcessId,
дупликатим Handle (DuplicateHandle) для собственного процесса 
и вызываем для него (дубликата) NtQueryObject(...ObjectNameInformation...)
Сравниваем полученное имя с нашим.

P.S.
 Чтобы уменьшить количество открываний\закрываний процессов, перед пробежкой
 лучше сгруппировать SYSTEM_HANDLE_INFORMATION-ы по принадлежности одному процессу.
P.P.S.
 Rонстанты типа OBJECT_TYPE_MUTANT, к сожалению? не существует ибо это значение плавающее
 в зависимости от системы. Его придется определять вручную.
 Пути могут быть различные. Самый простой (но не самый лучший smile
 создать временный мьютекс и при помощи той же NtQuerySystemInformation посмотреть 
 его ObjectTypeNumber в собственном процессе.
P.P.P.S.
 Бежать по всем Handl`м без разбора не советую. 
 Можно беспросветно повиснуть на Pipe`ах (объект имеет тип файл).
 С этим зависанием можно конечно бороться, но это уже другая тема smile



Это сообщение отредактировал(а) Riply - 3.8.2008, 07:10
PM MAIL   Вверх
lemax
Дата 4.8.2008, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 14.10.2007

Репутация: нет
Всего: 1



Спасибо. 
Но в MSDN такие слова (SYSTEM_HANDLE_INFORMATION...)  уже не присутствуют.  smile 
PM MAIL   Вверх
Riply
Дата 4.8.2008, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 1
Всего: 32



Цитата(lemax @  4.8.2008,  09:56 Найти цитируемый пост)
Но в MSDN такие слова (SYSTEM_HANDLE_INFORMATION...)  уже не присутствуют

Быстро же у Вас руки опускаются smile
Гугл по этому запросу мне выдал 2130 ссылок
Вот ее определение, например, от ReactOS-ев:
Код

typedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO
{
        USHORT UniqueProcessId;
        USHORT CreatorBackTraceIndex;
        UCHAR ObjectTypeIndex;
        UCHAR HandleAttributes;
        USHORT HandleValue;
        PVOID Object;
        ULONG GrantedAccess;
} SYSTEM_HANDLE_TABLE_ENTRY_INFO, *PSYSTEM_HANDLE_TABLE_ENTRY_INFO;

typedef struct _SYSTEM_HANDLE_INFORMATION
{
        ULONG NumberOfHandles;
        SYSTEM_HANDLE_TABLE_ENTRY_INFO Handles[1];
} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;


Я свое, вроде, брала у Гарри Неббета. (уже не помню). 
Его же рекомендую и почитать. 
PM MAIL   Вверх
lemax
Дата 4.8.2008, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 14.10.2007

Репутация: нет
Всего: 1



Да ладно Вам.
Просто на компьюторе есть набор разныз програм, которые при запуске используют один именованный мьютекс. А тут понадобилось узнать, какой именно процесс его захватывае.
Я думал, что этот вариант будет примитивней обычного перебора запущенных процессов с целью нахождения одного из тех процессов, который захватывает мьютекс.  smile 
PM MAIL   Вверх
Riply
Дата 4.8.2008, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: 1
Всего: 32



Цитата(lemax @  4.8.2008,  12:00 Найти цитируемый пост)
Я думал, что этот вариант будет примитивней обычного перебора запущенных процессов с целью нахождения одного из тех процессов, который захватывает мьютекс


Возможно, есть и такой вариант (в смысле примитивный).
Перебрать мьютексы системы.
Найти наш.
А дальше надо подумать. Возможно, существует такой способ перебора при котором
удастся заодно и "выцепить" информацию о процессе(ах), причастных к нему smile
Оставляю это заинересованным лицам, если конечно они заинтересованы smile

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0679 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.