Семафор для нескольких пользователей - PullRequest
3 голосов
/ 13 сентября 2011

Чего я хочу достичь: Я хотел бы сосчитать экземпляры моего заявления на фиксированное число. если запущено больше экземпляров приложения, оно должно работать только как «Средство просмотра»

Ее код образца приложения

пример имени named_semaphore

Проблема: это работает нормально, если все процессы запускаются только от одного пользователя Но я получаю исключение безопасности, если я запускаю приложение с другим пользователем! (Доступ запрещен)

Кто-то может указать мне правильное направление, документации по бусту немного не хватает по этой теме; -)
Какие разрешения должны быть установлены, чтобы разрешить доступ каждому другому зарегистрированному пользователю?

Ответы [ 3 ]

3 голосов
/ 14 сентября 2011

Я нашел решение

Похоже, документация для Boost не так уж и плоха: - / http://www.boost.org/doc/libs/1_47_0/doc/html/boost/interprocess/permissions.html

Просто нужно передать разрешение и установить его как "неограниченный"

boost::interprocess::permissions permtest;
permtest.set_unrestricted();
_getch();
boost::interprocess::named_semaphore
the_semphore(boost::interprocess::open_or_create,"test_semaphore",3,permtest);
2 голосов
/ 13 сентября 2011

К сожалению, boost использует атрибуты безопасности по умолчанию для семафора, и изменить его невозможно.Используйте ATL::CSemaphore или CSemaphore из MFC или даже CreateSemaphore из WinApi и создайте дескриптор безопасности, который обеспечивает доступ для всех.

1 голос
/ 13 сентября 2011

Я не совсем эксперт по Windows, поэтому я не могу сказать вам ответ наизусть, но вам нужно знать, как реализованы named_semaphores (см. Документацию "Некоторые основные объяснения" в boost.interprocess), а затем поискать политика разрешений для этого ресурса для предоставления доступа к системе. Итак, прочитайте код boost.named_semaphore и, если они используют файл, обновите разрешения для этого файла, а если они используют системный вызов, прочитайте документацию по Windows API для этого системного вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...