Mutex

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Mutex

Сообщение Kovu » 22.02.2006 (Ср) 17:27

Можно ли узнать, какой процесс его(mutex) создал?
Если всё делать своими ручками, они скоро отвалятся !

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 22.02.2006 (Ср) 18:34

Имхо нет
(а если он создан не процессом вообще, тогда что?)
Изображение

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 22.02.2006 (Ср) 18:42

Создан он будет точно процессом, причем моим.
Смысл состоит в том чтобы определить что именно сейчас запущено(скажем редактор или программа сама, или просто копия одного из них) и в зависимоти от этого выполнить разные действия :)
Если всё делать своими ручками, они скоро отвалятся !

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.02.2006 (Ср) 18:44

Разные имена mutex'ам давать - не?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 22.02.2006 (Ср) 18:46

GSerg
Не догадался :oops:
Хотя жаль что определить нельзя кто создал :roll:
Если всё делать своими ручками, они скоро отвалятся !

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 22.02.2006 (Ср) 18:47

По имени, можно :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 22.02.2006 (Ср) 18:49

GSerg
Я имел ввиду ситацию когда нужно просто определить создателя мутекса =)
Если всё делать своими ручками, они скоро отвалятся !

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 23.02.2006 (Чт) 7:56

Я тут поразмышлял на эту тему и сделал кое-какие (теоритические) выводы. Если какой-то процесс открывает файл, то он имеет хэндл этого файла, правильно? Мы можем перечислить хэндлы с помощью ZwQuerySystemInformation, скопировать каждый хэндл к себе с помощью DuplicateHandle и определить файл к которому он относиться (ZwQueryInformationFile). Возникает вопрос, а не прокатит ли подобная фишка с мутексами? Если да, то вопрос на половину решен...
А я все практикую лечение травами...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.02.2006 (Чт) 10:08

Создатель мутекса может закрыть его хендл.
Он вообще может уже завершиться к моменту "исследования", если тот мутекс был вновь открыт другим процессом.
Размышляй дальше...
Изображение

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 23.02.2006 (Чт) 11:11

Создатель мутекса может закрыть его хендл.

Теоритически, в системе должно быть место, где храняться все идентификаторы мутексов (так же, как идентификаторы процессов хранятся в csrss.exe). Но я этого места не знаю...
Вообще тема интересная, стоит поковырять ее...
А я все практикую лечение травами...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.02.2006 (Чт) 14:10

Twister писал(а):
Создатель мутекса может закрыть его хендл.

Теоритически, в системе должно быть место, где храняться все идентификаторы мутексов

Ну пусть было бы это место. А за какой нуждой винде хранить там ещё и создателей этих мутексов?

ЗЫ: \\BaseNamedObjects -- это не то место?
Изображение

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 23.02.2006 (Чт) 15:29

А за какой нуждой винде хранить там ещё и создателей этих мутексов?
Смотри, мутекс создается с помощью KeInitializeMutex При этом функция заполняет структуру KMUTANT:
Код: Выделить всё
KMUTANT STRUCT
     Header          DISPATCHER_HEADER <>
     MutantListEntry LIST_ENTRY        <>
     OwnerThread     PVOID             ?
     Abandoned       BYTE              ?
     ApcDisable      BYTE              ?
                     WORD              ?
KMUTANT ENDS
OwnerThread - родительский поток. Дальше: узнать информацию о мутексе можно с помощью ZwQueryMutant. Она заполняет аналогичную структуру. Так что родителя узнать можно.
\\BaseNamedObjects -- это не то место?
Не знаю. Надо поэксперементировать...
А я все практикую лечение травами...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.02.2006 (Чт) 17:02

Twister писал(а):OwnerThread - родительский поток.

Вовсе нет.
Это владелец мутекса, т.е. тот, кто дождался его освобождения и захватил.
Изображение

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 23.02.2006 (Чт) 17:15

Стоп. Эта структура же заполняется при создании мутекса... Или я что-то упустил. :?: Так или иначе, я не могу ни согласиться, ни опровергнуть - конкретной инфы я не нашел...
А я все практикую лечение травами...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.02.2006 (Чт) 17:49

Первый раз заполняется при создании. А потом стотыщ раз изменяется -- при каждом захвате мутекса.

А согласиться тебя должен заставить английский словарь, в котором слово owner не имеет в числе своих значений "создатель" или "родитель".
Изображение

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 23.02.2006 (Чт) 17:55

Так если сделать мутексу имя вроде "myprog.myprogversion.beta.xxx5", изменяться бесконтрольно будет нечасто :)

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 23.02.2006 (Чт) 17:55

Я английский знаю нормально. Ты прав - Owner - владелец.
А я все практикую лечение травами...

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 23.02.2006 (Чт) 19:39

Amed писал(а):Так если сделать мутексу имя вроде "myprog.myprogversion.beta.xxx5", изменяться бесконтрольно будет нечасто :)

Точнее почти никогда :)
А можно поподробней как эту структуру получить? (KMUTANT)
Тогда можно было бы обойтись одним мутексом :roll:
Если всё делать своими ручками, они скоро отвалятся !

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.02.2006 (Чт) 21:06

Kovu писал(а):А можно поподробней как эту структуру получить? (KMUTANT)
Тогда можно было бы обойтись одним мутексом :roll:

Не понял логической связи этих двух строк...
Изображение

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 23.02.2006 (Чт) 21:11

Логическая связь в том, что тогда можно выполнить то, о чем я просил в топике, используя один мутекс, а не два разноименных, как предлагал GSerg :)
Если всё делать своими ручками, они скоро отвалятся !

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 23.02.2006 (Чт) 21:35

И как же ты, используя данные KMUTANT, собираешься определить создателя мутекса?
Изображение

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 23.02.2006 (Чт) 21:53

tyomitch
Не создателя а текущего владельца по OwnerThread.
Или вы считаете, что лучше так не делать? :roll:
Если всё делать своими ручками, они скоро отвалятся !

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 24.02.2006 (Пт) 8:47

А можно поподробней как эту структуру получить? (KMUTANT)
Почитай это.
А я все практикую лечение травами...

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 24.02.2006 (Пт) 17:57

И что же там такого написано, объясни мне пожалуйста. Драйвер мне не нужен никоим образом, и средствами асма получать эту структуру тоже (ибо асма не знаю)
Если всё делать своими ручками, они скоро отвалятся !

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.02.2006 (Пт) 18:13

Кстати да, мне тоже любопытно, как прочитать структуру KMUTANT из юзермода.
Если верить моему справочнику, то ZwQueryMutant такой возможности не даёт.
Изображение

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 24.02.2006 (Пт) 20:40

Ну а кто говорит про юзермод?
А я все практикую лечение травами...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.02.2006 (Пт) 20:49

Kovu писал(а):Драйвер мне не нужен никоим образом
Изображение

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 24.02.2006 (Пт) 21:22

Тут есть способ перейти в Ring0 без драйвера (в середине статьи). Только, конечно, код не на VB...
А я все практикую лечение травами...

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 25.02.2006 (Сб) 13:44

К тому же он запускается только под админом и создает уязвимость в системе однако... :roll:
Если всё делать своими ручками, они скоро отвалятся !

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 25.02.2006 (Сб) 16:32

2 Kovu
Кстати, на ВАСМе мне дали аналогичный ответ - создатель мутекса ни где не запоминается...
А я все практикую лечение травами...

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 130

    TopList