2011-09-13 23 views
3

我想達到的目標: 我想將我的應用程序的實例計爲一個固定的數字。 如果應用程序的多個實例啓動時,它應該只工作作爲一個「瀏覽器」多個用戶的信號量

她是示例應用程序

boost named_semaphore example

的代碼的問題: 它工作正常,如果所有processe只從一個用戶開始 但是,如果我與另一個用戶啓動應用程序,我會得到一個安全異常! (不允許訪問)

有人可以點我在正確的方向,升壓文檔有點缺乏關於這一主題;-)
哪些權限,必須設置爲允許所有其他登錄的用戶訪問?

+1

聽起來像是「按預期工作」。非管理員用戶不應該能夠影響管理員用戶(基本安全原則),因此他們不應該能夠專門聲明有限的資源。無論如何,你是否真的打算將你的應用限制在固定數量的計算機上?或者你想要一個固定的數字_per user_? – MSalters

+0

沒關係,這是默認行爲,但我想改變它。 是的,我希望應用程序_per computer_而不是每個用戶 – nobs

回答

1

我不完全是Windows專家,所以我不能告訴你心中的答案,但你需要知道如何實現named_semaphores(請參閱boost.interprocess的「一些基本解釋」文檔),然後看看建立此資源的權限策略以授予系統範圍的訪問權限。因此,閱讀boost.named_semaphore代碼,如果他們使用文件,更新該文件的權限,並且如果他們使用系統調用,請閱讀該系統調用的Windows API文檔。

2

不幸的是boost使用信號量的默認安全屬性,並且沒有辦法改變它。使用來自MFC的ATL::CSemaphoreCSemaphore或來自WinApi的CreateSemaphore,並構建安全描述符,允許所有人訪問。