Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.042 c
3-1104138893
Russko
2004-12-27 12:14
2005.01.30
Ошибка: "Данные редактируются другим пользователем"


14-1105523810
AlexG
2005-01-12 12:56
2005.01.30
Общедоступный FTP, без пароля и имени пользователя...


3-1104162519
juice
2004-12-27 18:48
2005.01.30
Печать из TQuickReport


14-1105389929
palva
2005-01-10 23:45
2005.01.30
Наезд на авторов толстой книги


4-1102923618
denis24
2004-12-13 10:40
2005.01.30
запуск второй копии програмы из faq





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский