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