Sémaphore pour plusieurs utilisateurs

Ce que je veux réaliser: je voudrais compter les instances de mon application sur un nombre fixe. Si plusieurs instances de l’application sont démarrées, elles ne devraient fonctionner qu’en tant que “visualiseur”

Elle est le code de l’application exemple

Exemple de boost named_semaphore

Le problème: ça marche bien si tous les processus sont lancés depuis un seul utilisateur Mais je reçois une exception de sécurité si je lance l’application avec un autre utilisateur !! (Accès non autorisé)

Quelqu’un peut me diriger dans la bonne direction, la documentation de boost manque un peu sur ce sujet 😉
Quelles permissions doivent être définies pour autoriser l’access à tous les autres utilisateurs connectés?

J’ai trouvé la solution

On dirait que le document pour Boost n’est pas si mal: – / http://www.boost.org/doc/libs/1_47_0/doc/html/boost/interprocess/permissions.html

Il suffit de passer la permission et de la définir sur “sans ressortingction”

boost::interprocess::permissions permtest; permtest.set_unressortingcted(); _getch(); boost::interprocess::named_semaphore the_semphore(boost::interprocess::open_or_create,"test_semaphore",3,permtest); 

Malheureusement, boost utilise des atsortingbuts de sécurité par défaut pour les sémaphores et il est impossible de les modifier. Utilisez ATL::CSemaphore ou CSemaphore partir de MFC ou même CreateSemaphore partir de WinApi et créez un descripteur de sécurité permettant l’access à tous.

Je ne suis pas exactement un expert Windows, donc je ne peux pas vous donner la réponse par cœur, mais vous devez savoir comment sont nommées pour que cette ressource accorde un access à l’ensemble du système. Lisez donc le code boost.named_semaphore et s’ils utilisent un fichier, mettez à jour les permissions de ce fichier et, s’ils utilisent un appel système, lisez la documentation de l’API Windows pour cet appel système.