Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
kpoxa
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
#1

Как дать доступ к разделенной памяти для пользовательских программ из сервиса - C++

07.07.2006, 17:24. Просмотров 1781. Ответов 4
Метки нет (Все метки)

У меня такая проблема, при запуске компьютера стартует сервис с правами SYSTEM. Этот сервис создает разделенную память и помещает в нее идентификатор потока, который может получать сообщения от пользователей. Сообщения передаются с помощью PostThreadMessage.
Проблема в том, что когда клиент пытается открыть доступ к памяти с помощью OpenFileMapping, то он получает хендл равный 0.
Как я понимаю, при создании этой памяти ей устанавливаются права доступа только для SYSTEM. Каким образом я могу создать эту память и установить доступ к ней на чтение, но для всех?
Кстати, опишу задачу шире, может у кого будут другие идеи.
Программа стартует на сервере в качестве сервиса, выполняет свои задачи, но не имеет пользовательского интерфейса. Когда оператору надо проверить данные о выполнении или изменить настройки он должен запустить некую программу (в моем случае тот же выполняемый файл, но с другими параметрами) и получить пользовательский интерфейс. Я решил, что легче всего будет при запуске сервиса создать разделяемую память и в нее поместить ID того потока, который отвечает за открытие пользовательского интерфейса. Тогда при запуске программы в пользовательском режиме программа откроет эту память, получит поток и пошлет ему сообщение, после чего спокойно закроется, а сервис продолжит работу, но уже в графическом режиме.
Была так же идея с внедрением клиенсткого процесса в процесс сервиса с получением адресса необходимой процедуры, но там будет много проблем с синхронизацией и, так же, с атрибутами безопасности.
Буду рад любой помощи, а так же интересным и простым идеям.
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2006, 17:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как дать доступ к разделенной памяти для пользовательских программ из сервиса (C++):

Разработка и отладка алгоритмов и программ с применением пользовательских функций - C++
подскажите пожалуйста как реализовать задачи(код программы на языке С):scratch: 1)Описать функцию вещественного типа(параметры – x, ε),...

Разработка и отладка алгоритмов и программ с применением пользовательских функций - C++
Добрый день, помогите решить задачку Написать процедуру перевода числа из десятичной системы счисления в (12%9+1)-ю систему.

Как дать доступ для индексации свой сайт только Яши и Гугл? - SEO
Как дать доступ для индексации свой сайт только Яши и Гугл?

Как дать доступ в интернет - Администрирование Windows
Windows Server 2008 10 ПК работают в интернете, пытаюсь по wifi подрубить телефон. Телефон к wifi подключается а выхода в интернет все...

Как дать общий доступ к папке - Windows 7
Выбираю папку захожу в свойства стоит галочка на только чтение (не яркая, а серая), я её убираю нажимаю применить, всё нормально, проверяю...

как дать доступ к игрушке на странице сайта? - Joomla
как дать доступ к игрушке на странице сайта? (Если вопрос не сюда прошу прошения)! Есть сайт на ISS с движком joomla! Нужно дать дать...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
08.07.2006, 05:40 #2
Хе-хе, сейчас модно через сокеты



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



После этого, если правильно разработать управляющий сервисом или его некоторыми параметрами протокол, можно будет написать клиента локального или удаленного на любом языке и с любым интерфейсом



Ну это так, теоретически..



Вернемся к сути вопроса. Для того чтобы разделить память между процессами, если я правильно все понимаю, используется API функция CreateFileMapping (http://msdn.microsoft.com/library/en...ilemapping.asp)



Вторым атрибутом этой ф-ции идет LPSECURITY_ATTRIBUTES lpAttributes, если у задать NULL, то:

If lpAttributes is NULL, the file mapping object gets a default security descriptor.



Что нужно сделать? Создать и правильно заполнить структуру SECURITY_ATTRIBUTES так чтобы дать права всем локальным пользователям или администраторам на доступ к разделенной памяти после этого разделенная память должна быть доступна процессам, запущеным под пользователем а не из под SYSTEM



Удачи,

Владимир
kpoxa
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
08.07.2006, 18:45  [ТС] #3
Собственно вопрос был именно по этой структуре, я раньше не сталкивался с атрибутами безопасности, поэтому не понимаю, как с ней работать. Я пытаюсь разобраться через MSDN, но пока для меня это слишком запутанно. Если-бы у меня было пару примеров с разрешением/запрещением доступа к ресурсу + MSDN, то было бы на много легче с этим разобраться.
boombastik
7 / 7 / 0
Регистрация: 13.02.2007
Сообщений: 1,255
08.07.2006, 19:10 #4
Вот тут есть пример подробными комментариями:

http://msdn.microsoft.com/library/en...ing_a_dacl.asp



Удачи,

Владимир
kpoxa
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
13.07.2006, 21:57  [ТС] #5
Спасибо, пример как раз в точку. Сейчас заработало.
А по поводу сокетов, идея интересная, надо подумать на будующее.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2006, 21:57
Привет! Вот еще темы с ответами:

Как дать доступ в интернет (cisco asa). - Cisco
Добрый день, Вопрос по Cisco ASA 55XX. Только сильно не пинайте, новичок. Залил свежий ASDM, IOS (asa901-k8.bin немножко отличный...

Как создать пользователя и дать доступ к папке - Ubuntu Linux
Нужно создать пользователя и дать доступ к определенной папке, в моём случае к папке "/home/servers/css" и ко всем файлам что внутри этой...

Как дать полный доступ к файлам в Windows 8? - Windows 8, 8.1
Здравствуйте, у меня такая ситуация, надо удалить файлы из диска C, а там нет прав на доступ к файлам, пишет Запросите разрешение от...

Как дать доступ к игрушке на странице сайта? - IIS
как дать доступ к игрушке на странице сайта? (Если вопрос не сюда прошу прошения)! Есть сайт на ISS с движком joomla! Нужно дать дать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.07.2006, 21:57
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru