![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Named pipe
Чапаев © (2006-12-03 13:00:00)Можно ли узнать, кто (process identifier) подключился к именованному каналу? Если можно, то как?
vidiv (2006-12-04 17:45:00) [1]Удалено модератором
Примечание: Создание пустых сообщений
BiN (2006-12-04 17:01:00) [2]... по той простой причине, что в этих случаях создаются новые объекты ядра (имо)
BiN (2006-12-04 16:59:00) [3]
> Riply © (04.12.06 16:23) [19]
>
> Что-то я не понимаю. :(
> Запустила две программы (на одном компьютере). Они законнектились
> при помощи NamedPipe.
> Посмотрела адреса "Пайповых" объектов (QSI)- они различны
> :(
> Может надо учитывать какое-то смещение ?
>
Мда, точно... Наврал я вам -((
С объектами "File","Section" и "Key", такой трюк не пройдет...
Riply (2006-12-04 16:23:00) [4]>[17] BiN © (04.12.06 10:20)
Спасибо ! Статью нашла.
>а, значит, и адрес объекта должен совпадать
Что-то я не понимаю. :(
Запустила две программы (на одном компьютере). Они законнектились при помощи NamedPipe.
Посмотрела адреса "Пайповых" объектов (QSI)- они различны :(
Может надо учитывать какое-то смещение ?
Eraser (2006-12-04 15:25:00) [5]> [16] Чапаев © (04.12.06 08:51)
а почему бы программе-клиенту не поднять права до административных? тогда и проблема с коммуникацией решиться и прав больше будет.
BiN (2006-12-04 10:20:00) [6]
> Riply © (03.12.06 23:51) [12]
> А можно подробнее ?
> Просто я считала, что одинаковые поля Object в разных процессах
> могут указывать на
> разные объекты и наоборот, разные на один и тот же.
Object - этот адрес использует диспетчер объектов и драйвера для управления объектом. Тело объекта располагается в верхней части ВАП - выше $80000000. Это пространство обычно разделяется всеми процессами, а, значит, и адрес объекта должен совпадать.
LPC - это один из механизмов IPC, используемый, например, в remote procedure call. LPC также используется для передачи отладочных сообщений и сообщений исключений процессу подсистемы Win32.
Встречал статью на rsdn.ru с примерами.
Чапаев (2006-12-04 08:51:00) [7]Вот не знаю... На данный момент если юзер знает правильный логин/пароль комплекса, то он может делать всё, какие бы права он ни имел в системе.
Eraser (2006-12-04 00:52:00) [8]опять же, даже если известно, что имя процесса совпадает с нужным - это еще не о чем не говорит, как и тот факт, что запущен именно "свой" клиент.
желательно строить архитетуру приложения так, чтобы клиент не мог дать серверу опасную команду, т.е. ту, которую нельзя выполнить из-под ограниченного аккаунта.
Чапаев (2006-12-04 00:15:00) [9]> LPC" - что это такое и где можно посмотреть ?
Local procedure call. У Руссиновича.
Чапаев (2006-12-03 23:52:00) [10]LPC для меня -- тёмный лес. QSI -- это QuerySystemInformation()?
Riply (2006-12-03 23:51:00) [11]>[11] BiN © (03.12.06 22:15)
>можно получить по полю Object
А можно подробнее ?
Просто я считала, что одинаковые поля Object в разных процессах могут указывать на
разные объекты и наоборот, разные на один и тот же.
>[10] BiN © (03.12.06 22:00)
"LPC" - что это такое и где можно посмотреть ?
BiN (2006-12-03 22:15:00) [12]Кстати, список процессов, открывших тот же объект, что и твой процесс, можно получить по полю Object_ из списка открытых описателей, полученного с помощью QSI(SystemHandleInformationClass..)
BiN (2006-12-03 22:00:00) [13]Как вариант могу предложить использовать LPC. Там уже реализована поддержка определения не только процесса, но и потока клиента.
Eraser (2006-12-03 18:35:00) [14]> [8] Чапаев © (03.12.06 18:14)
кстати хорошая мысль, по крайней мере это даст больше гарантий, чем остальные способы. Тут главное быть уверенным, что запускаешь именно "своего" клиента.
Чапаев (2006-12-03 18:14:00) [15]Хм... А если создать anonymous pipe, перенаправить в него клиентский ввод-вывод и общаться с клиентом таким способом?
Eraser (2006-12-03 16:31:00) [16]> [6] Чапаев © (03.12.06 16:28)
тогда проблемка.. никто не даст гарантии, что данный клиент "свой", т.к. работа ведется на локальной системе и при должном желании можно написать эмулятор такого клиента.
Чапаев (2006-12-03 16:28:00) [17]> [5] Eraser © (03.12.06 16:26)
Нету, запускается CreateProcessAsUser().
Eraser (2006-12-03 16:26:00) [18]> [4] Чапаев © (03.12.06 16:23)
если клиент запущен сервисом, значит у него есть права "SYSTEM", просто разрешать подсоединяться к сервису клиентам, которые имеют такие права.
А механизм аутентификации не поможет, нужен будет еще и алгоритм авторизации, а как его делать в данной ситуации - сложно сказать )
Чапаев (2006-12-03 16:23:00) [19]Добавлю... Клиент запущен из сервиса. Мы всегда знаем, что мы запустили, но непонятно, как определить, кто подключился.
Чапаев (2006-12-03 16:21:00) [20]> была 100% гарантия, что это именно "свой" клиент?
Ну в общем да. Не очень хочется изобретать очередной велосипед аутентификации...
> нитификэйшн пакдж
Это уже твои домыслы. ;-)