Форум: "WinAPI";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
ВнизИдентификация процесса по Mutex Найти похожие ветки
← →
Yuri Btr © (2004-12-09 13:31) [0]Ув. мастера,
например я вызываю CreateMutex и получаю в GetLastError ERROR_ALREADY_EXISTS, следовательно вренувшееся значение в результате вызова CreateMutex и есть уже существующий мутекс.
Подскажите как можно получить PID процесса, который установил уже существующий мутекс.
Вообще то мне нужно определить хэндл главного окна приложения, которое установило до меня этот же самый мутекс, для пересылки ему сообщения.
Заранее спасибо.
← →
BiN © (2004-12-09 13:50) [1]ZwQuerySystemInformation с параметром SystemHandleInformation
← →
Игорь Шевченко © (2004-12-09 14:01) [2]BiN © (09.12.04 13:50) [1]
И ?
(честно говоря, сам рылся в MSDN только что, пока не нашел). Дело в том, что Handle, показанный в результате вызова QSI действителен для того процесса, которому он принадлежит, а Handle, возвращенный CreateMutex, действителен для вызывающего процесса.
Я в Process Explorer не смог увидеть, кто создал объект (именно создал, а не открыл)
С уважением,
← →
Digitman © (2004-12-09 14:07) [3]проще отказаться от мьютекса в пользу MMF
или, обнаружив существующий мьютекс, перечислить все верхнеуровневые окна десктопа в поисках предопределенного значения SetWindowLong(окно, GWL_USERDATA), установленного работающим экз-ром того же приложения с пом SetWindowLong(GWL_USERDATA)
← →
BiN © (2004-12-09 14:12) [4]Игорь Шевченко © (09.12.04 14:01) [2]
BiN © (09.12.04 13:50) [1]
И ?
на сайте некоего Colin Wilson-a есть пример описывающий технику получения всех хэндлов системы и информации о них.
а именно
http://www.wilsonc.demon.co.uk/d7ntutils.htm
и
http://www.wilsonc.demon.co.uk/d7fileanalyzer.htm
Там есть серьезные ошибки, но ресурс без сомнения очень интересный.
С уважением,
← →
BiN © (2004-12-09 14:17) [5]Игорь Шевченко © (09.12.04 14:01) [2]
Хм, да, а ведь я не учел различия между созданием и открытием мутанта. Так ведь по сабжу не столь важно кто именно создал объект. Ведь даже если "создатель" и закроет хэндл, ошибка ERROR_ALREADY_EXISTS будет иметь место, пока есть незакрытые хэндлы в других процессах.
← →
Yuri Btr © (2004-12-09 14:22) [6]Большое спасибо за ответы,
дело ясное, что дело темное... :)
Я тоже просмотрел все в MSDN на тему мутексов, однако насколько я понял они были введены в Windows исключительно для сигнализации о каком либо событии, не предоставляя возможности узнать информацию о владельце, но сама Windows как то определяет - кто является владельцем мутекса - иначе зачем тогда параметр "initial owner" в CreateMutex....
← →
Yuri Btr © (2004-12-09 14:23) [7]Большое спасибо за ответы,
дело ясное, что дело темное... :)
Я тоже просмотрел все в MSDN на тему мутексов, однако насколько я понял они были введены в Windows исключительно для сигнализации о каком либо событии, не предоставляя возможности узнать информацию о владельце, но сама Windows как то определяет - кто является владельцем мутекса - иначе зачем тогда параметр "initial owner" в CreateMutex....
← →
Yuri Btr © (2004-12-09 14:23) [8]Большое спасибо за ответы,
дело ясное, что дело темное... :)
Я тоже просмотрел все в MSDN на тему мутексов, однако насколько я понял они были введены в Windows исключительно для сигнализации о каком либо событии, не предоставляя возможности узнать информацию о владельце, но сама Windows как то определяет - кто является владельцем мутекса - иначе зачем тогда параметр "initial owner" в CreateMutex....
← →
Yuri Btr © (2004-12-09 14:26) [9]Большое спасибо за ответы,
дело ясное, что дело темное... :)
Я тоже просмотрел все в MSDN на тему мутексов, однако насколько я понял они были введены в Windows исключительно для сигнализации о каком либо событии, не предоставляя возможности узнать информацию о владельце, но сама Windows как то определяет - кто является владельцем мутекса - иначе зачем тогда параметр "initial owner" в CreateMutex....
Вариант Digitman наиболее приемлимый. Спасибо.
← →
BiN © (2004-12-09 14:29) [10]Вообще-то, кто создал мьютекс и, поток какого процесса является сечас владельцем мьютекса - это совершенно 2 разных вопроса
← →
Digitman © (2004-12-09 14:33) [11]
> они были введены в Windows исключительно для сигнализации
> о каком либо событии
нет.
мьютексы были введены не для сигнализации о событии (для этого существуют event-объекты), а для интерпроцессной синхр-ции доступа к ресурсам, не допускающим одновременное пользование со стороны более чем одного трэда
> кто является владельцем мутекса - иначе зачем тогда параметр
> "initial owner" в CreateMutex.
термин "владелец мьютекса" - это не то о чем ты думаешь ... обрати внимание - этот параметр имеет булев тип.
если он = True, то все остальные трэды в системе, заинтересованные в доступе к синхронизируемым мьютексам ресурсам, будут "висеть" на wait-ф-ции до тех пор пока трэд-создатель не выполнит ReleaseMutex() или не завершит свое выполнение.
← →
Yuri Btr © (2004-12-09 14:39) [12]Спасибо за разъяснения.
Что то форум глючит, вот столько сообщений и получилось.
← →
BiN © (2004-12-09 14:40) [13]Кстати при желании можно попробовать и владельца мьютекса вычислить считав структуру _KMUTANT по адресу Object из полученного
_SYSTEM_HANDLE_INFORMATION {
ULONG ProcessId;
UCHAR ObjectTypeNumber;
UCHAR Flags;
USHORT Handle;
PVOID Object;
ACCESS_MASK GrantedAccess;
← →
Игорь Шевченко © (2004-12-09 15:36) [14]BiN © (09.12.04 14:12) [4]
> на сайте некоего Colin Wilson-a есть пример описывающий
> технику получения всех хэндлов системы и информации о них.
> а именно
На моем компьютере тоже есть эта техника, описанная у Гэри Неббета и реализованная на Object Pascal. К сожалению, на сайт пока не выложена.
С уважением,
← →
BiN © (2004-12-09 15:58) [15]Игорь Шевченко © (09.12.04 15:36) [14]
На моем компьютере тоже есть эта техника...
Было бы любопытно взглянуть.
Если можно, отправьте на teleroot^mail.ru
С уважением
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.043 c