Главная страница
    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
1-1105804446
Nata
2005-01-15 18:54
2005.01.30
Номер записи


14-1105687741
Ihor Osov'yak
2005-01-14 10:29
2005.01.30
Нужен совет о комплектации системы (сpu, monitor)


1-1105945802
Fostr
2005-01-17 10:10
2005.01.30
RichEdit


4-1102587212
Alexius
2004-12-09 13:13
2005.01.30
Как узнать, какая программа обращается к COM порту?


1-1106123275
Viruz
2005-01-19 11:27
2005.01.30
DecimalSeparator





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский