c ++ - Semaphore for flere brugere

Indlæg af Hanne Mølgaard Plasc

Problem



Hvad jeg vil opnå:
Jeg vil gerne tælle forekomsten af ​​min ansøgning til et fast nummer.
hvis flere tilfælde af applikationen er startet, bør den kun fungere som en 'viewer'


Hendes er koden for prøveapplikationen


boost named\_semaphore eksempel [5]


Problemet:
det virker fint, hvis alle processer startes fra kun én bruger
Men jeg får en sikkerhedsundtagelse, hvis jeg starter applikationen med en anden bruger !!
(Adgang ikke tilladt)


Nogen kan pege mig i den rigtige retning, boost dokumentationen er lidt mangler på dette emne ;-)

Hvilke tilladelser skal indstilles for at tillade adgang fra alle andre loggerede brugere?

Bedste reference


Jeg fandt løsningen


Det ser ud til, at docu for Boost ikke er så slemt: -/
http://www.boost.org/doc/libs/1\_47\_0/doc/html/boost/interprocess/permissions.html[6]


Bare nødt til at videregive tilladelsen og sætte den til 'ubegrænset'


boost::interprocess::permissions permtest;
permtest.set\_unrestricted();
\_getch();
boost::interprocess::named\_semaphore
the\_semphore(boost::interprocess::open\_or\_create,"test\_semaphore",3,permtest);

Andre referencer 1


Desværre anvender standard sikkerhedsattributter til semaphore, og der er ingen måde at ændre den på. Brug ATL::CSemaphore eller CSemaphore fra MFC eller endda CreateSemaphore fra WinApi og konstruer sikkerhedsbeskrivelse, der giver adgang til alle.

Andre referencer 2


Jeg er ikke ligefrem en Windows-ekspert, så jeg kan ikke fortælle dig svaret af hjertet, men du skal vide, hvordan named\_semaphores er implementeret (se 'Nogle grundlæggende forklaringer' dokumentation for boost.interprocess) og derefter kigge på tilladelsespolitikken for denne ressource at give system-wide adgang. Læs derfor boost.named\_semaphore-koden, og hvis de bruger en fil, skal du opdatere filens tilladelser, og hvis de bruger et systemopkald, skal du læse Windows API-dokumentationen for det pågældende systemopkald.