Хэндлы открытых именованных каналов

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

Хэндлы открытых именованных каналов

Сообщение Twister » 15.05.2006 (Пн) 20:20

Вообщем проблема такова:
При попытке именования такого хэндла (если канал работает в блокирующем режиме; хэндл естественно чужой, но скопированный через DuplicateHandle) с помощью ZwQueryObject или ZwQueryInformationFile вызывающий поток ждет прихода сообщения в канал и умирает навсегда. Пытался прибить поток по таймауту:
Код: Выделить всё
if WaitForSingleObject(hThread, INFINITE) = WAIT_TIMEOUT then TerminateThread hThread, 0
, но WaitForSingleObject так и не завершилась. Пробовал просто прибить через 10 мсек - не прибивается. Мало того, процесс с такими "мертвыми" потоками не возможно ни взять под отладку, ни прибить. Только Reset.
Может кто сталкивался с такой проблемой?
А я все практикую лечение травами...

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

Сообщение tyomitch » 15.05.2006 (Пн) 20:21

WaitForSingleObject(hThread, INFINITE) = WAIT_TIMEOUT никогда не произойдёт, по определению.
Изображение

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

Сообщение Twister » 15.05.2006 (Пн) 20:23

1. Почему? Например у ms-rema я видел именно такой код, только на сях.
2. Почему поток вообще не прибивается?
А я все практикую лечение травами...

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

Сообщение tyomitch » 15.05.2006 (Пн) 20:41

1. Ибо сказано в Писании:
If dwMilliseconds is INFINITE, the function's time-out interval never elapses.

Кто такой ms-rem, я не знаю.

2. Покажи, что ты с ним делаешь? От перечисления названий функций понятнее не стало.
Изображение

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

Сообщение Twister » 15.05.2006 (Пн) 20:43

Статьявсе разъяснит.
А я все практикую лечение травами...

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

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

1. Не разъяснила.
2. См. неубиваемую прогу от ANDLL -- тут, наверное, та же фишка.
Изображение

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

Сообщение Twister » 15.05.2006 (Пн) 20:55

Собственно я делаю с хэндлом то, что делает ms-rem в самом начале статьи - пытаюсь получить его имя, только с помощью ZwQueryObject. С хэндлами других типов проблем нет, а вот с каналами есть. И проблема именно в том что поток не прибивается никак - только Reset.

ЗЫ. До фишки с INFINITE я мог бы и сам допереть - затупил.
А я все практикую лечение травами...

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

Сообщение Twister » 15.05.2006 (Пн) 23:14

Вообщем результаты опроса и поиска по форумам не утешительны. Похоже эту проблему под XP решить не удастся... :cry:
А я все практикую лечение травами...

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

Сообщение Twister » 16.05.2006 (Вт) 15:04

Проблема решена!

Кому интересно, могу в двух словах объяснить: ZwQueryObject или ZwQueryInformationFile заставляют поток умереть навсегда, а GetFileType нет, точнее он умирает, но прибить его можно, если воспользоваться TerminateThread, а потом принудительно освободить его стек (сначала VirtualQuery, потом VirtualFree).
Если кому интересен код - могу привести, хотя советую подождать - вся эта неразбериха с хэндлами вдохновила меня на написание статьи, в которой мне хотелось бы описать принципы перечисления хэндлов, решение проблем возникающих по ходу дела и некоторые варианты практического применения данной методики...

Вообщем, тему можно считать закрытой...
А я все практикую лечение травами...

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

Сообщение tyomitch » 16.05.2006 (Вт) 18:32

А чем, собственно, мешают эти неубиваемые нити?
Висят себе и пусть висят, кушать ведь не просят.
Изображение

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

Сообщение Twister » 16.05.2006 (Вт) 18:36

А процесс потом выгружается только по ресету...
А я все практикую лечение травами...

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 17.05.2006 (Ср) 7:28

В сторону: "Ох уж эти любители исходников!"

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

Сообщение Twister » 17.05.2006 (Ср) 7:36

Nicky писал(а):В сторону: "Ох уж эти любители исходников!"
И к чему это? :? :roll:
А я все практикую лечение травами...

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 17.05.2006 (Ср) 7:57

Комментарий к вашим подписям

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

Сообщение Twister » 17.05.2006 (Ср) 7:59

Комментарий к вашим подписям
Оффтоп - в личку.
А я все практикую лечение травами...


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28

    TopList  
cron