Закрытие чужих хэндлов

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

Закрытие чужих хэндлов

Сообщение Twister » 22.06.2006 (Чт) 19:42

Собственно, интересно:

Если скопировать чужой хэндл к себе, а потом его у себя закрыть CloseHandle, то чужой хэндл, конечно, не закроется, так как
http://www.sources.ru/magazine/0804/kernel.html писал(а):Эта функция сначала проверяет таблицу хэндлов, принадлежащую вызывающему процессу, чтобы убедиться, идентифицирует ли переданный ей индекс (хэндл) объект, к которому этот процесс действительно имеет доступ. Если переданный индекс правилен, система получает адрес структуры данных объекта и уменьшает в этой структуре счетчик числа пользователей; как только счетчик обнулится, ядро удалит объект из памяти.Если же описатель неверен, происходит одно из двух. В нормальном режиме выполнения процесса CloseHandle() возвращает FALSE, a GetLastError () - код ERROR_INVALID_HANDLE. Но при выполнении процесса в режиме отладки система допольнительно уведомляет отладчик об ошибке.

Перед самым возвратом управления CloseHandle() удаляет соответствующую запись из таблицы хэндлов: данный хэндл теперь недействителен в создавшем объект процессе, и использовать его нельзя. При этом запись удаляется независимо от того, разрушен объект ядра или нет. После вызова CloseHandle() невозможно больше получить доступ к этому объекту ядра; но, если его счетчик не обнулен, объект остается в памяти. Тут все нормально, это означает лишь то, что объект используется другим процессом (или процессами). Когда и остальные процессы завершат свою работу с этим объектом (тоже вызвав CloseHandle()), он будет разрушен.


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

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

Re: Закрытие чужих хэндлов

Сообщение tyomitch » 22.06.2006 (Чт) 19:57

Twister писал(а):Внимание вопрос: можно ли закрыть хэндл в чужом процессе, не прибегая к внедрению кода?

Конечно, нет. Это была бы уязвимость шириной со слоновью, ммм... пасть. ;-)
Изображение

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

Сообщение Twister » 22.06.2006 (Чт) 19:58

Все, это я и хотел услышать. Спасибо tyomitch, тема закрыта.
А я все практикую лечение травами...

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

Сообщение Twister » 02.07.2006 (Вс) 12:50

Поднимаю топик по следующей причине:

В winnt.h помимо
Код: Выделить всё
#define DUPLICATE_SAME_ACCESS       0x00000002
есть еще и
Код: Выделить всё
#define DUPLICATE_CLOSE_SOURCE      0x00000001
Не то ли это, о чем я думаю, народ?
А я все практикую лечение травами...

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

Сообщение tyomitch » 02.07.2006 (Вс) 13:08

Я думаю, что этот флаг просто вызывает CloseHandle на том хендле. Если непосредственный вызов CloseHandle не работает, то не сработает и этот флаг.
Изображение

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

Сообщение Twister » 02.07.2006 (Вс) 17:26

http://www.wasm.ru/article.php?article=green2red03 писал(а):Флаг DUPLICATE_CLOSE_SOURCE указывает, что функция DuplicateHandle закрывает указанный описатель в указанном процессе.
Интересная статейка. Вообщем сегодня попробую - расскажу.

Интересно. Тутговорится, что если через SetHandleInformation хэндлу установить свойство HANDLE_FLAG_PROTECT_FROM_CLOSE, то CloseHandle не закроет его. Вопрос: получается что не сняв флаг хэндл ни как не закрыть? :shock:
А я все практикую лечение травами...

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

Сообщение Twister » 02.07.2006 (Вс) 17:47

Еще один линк.
http://forum.vingrad.ru/index.php?showtopic=92151&st=0&#entry706816
Вообщем заработать должно. :)
А я все практикую лечение травами...

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

Сообщение Twister » 05.07.2006 (Ср) 9:46

Проверил - все прекрасно работает, так что
tyomitch зря писал(а):Конечно, нет. Это была бы уязвимость шириной со слоновью, ммм... пасть. :wink:
А я все практикую лечение травами...

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

Сообщение tyomitch » 05.07.2006 (Ср) 10:37

И что, права копировать чужие хендлы оказалось достаточно, чтобы их таким образом закрывать? :-?
Изображение

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

Сообщение Twister » 06.07.2006 (Чт) 9:46

tyomitch писал(а):И что, права копировать чужие хендлы оказалось достаточно, чтобы их таким образом закрывать? :-?
Да. Причем "SeDebug" привилегию нужно включать, только для доступа к системным процессам - в пользовательских можно закрывать и без нее... :!:
А я все практикую лечение травами...


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

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

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

    TopList