請儘快幫助我。 我正在編寫C++代碼來運行服務,它在管理員帳戶 上正常工作,但在非管理員用戶帳戶上,OpenSCManager()函數返回null。 請告訴我如何授予非管理員用戶帳戶權限來啓動和停止服務。 或者我需要做別的事情。 請儘快回覆在非管理帳戶OpenSCManager()函數返回空
回答
也許您打電話OpenSCManager
指定SC_MANAGER_ALL_ACCESS
標誌,實際上它需要一組默認授予管理員權限。要在此啓動/停止服務,您只需指定SC_MANAGER_CONNECT
標誌,默認情況下該標誌將顯示給任何經過身份驗證的用戶。
既然您有一個服務管理器的句柄,您必須使用OpenService
來獲得該服務的句柄。要有權啓動/停止服務,您應該指定GENERIC_READ | GENERIC_EXECUTE
作爲所需的訪問權限(實際上,我認爲您甚至可以將所需權限縮小到僅限於SERVICE_START
和SERVICE_STOP
,如有必要,還可以)。
這裏是這樣的問題:標準服務DACL不會給普通用戶授予這樣的權限,所以你應該改變你需要啓動的服務的DACL以允許普通用戶啓動/停止它;見here。有關服務訪問權限的更多信息,請參閱here。
如果不是單一的服務,而是想讓普通用戶啓動/停止任何服務,我不知道是否有可能不更改所有的DACL,但在我看來,這絕對是一個壞主意。
請注意,即使在單服務情況下,如果服務在特權帳戶下運行(例如LocalSystem
),或者它是重要的系統服務,讓非特權用戶混淆它,這仍然是一個壞主意。您應該允許用戶僅啓動/停止對系統不重要的服務。
出於好奇,爲什麼你需要讓用戶啓動/停止服務?
+1這樣一個全面的答案! – JBRWilkinson 2010-07-19 10:01:14
謝謝! :)(隨機文本到15個字符) – 2010-07-19 10:27:14
爲了將來的參考,您可以更改服務管理器本身的權限(儘管它可能不是一個好主意!)例如,請參閱http://support.microsoft.com/KB/907460 – 2012-10-23 18:31:16
- 1. ClickOnce卸載正常非管理帳戶
- 2. WordPress的Ajax爲管理員用戶返回正確的數據,但返回非管理員的整個主頁
- 3. C++模板錯誤,無返回,函數返回非空
- 4. Facebook工作場所帳戶管理API不返回照片
- 5. 非託管dll函數字節*參數在C#中返回
- 6. 管理magento中的管理員帳戶
- 7. 從非管理員用戶帳戶啓動/停止Windows服務
- 8. 函數返回空數組
- 9. Android帳戶管理器
- 10. Sharepoint Windows帳戶管理
- 11. 用管理員帳戶
- 12. Bigquery:管理服務帳戶
- 13. 使用root帳戶安裝Cocos2D - iPhone用於非管理員使用root帳戶
- 14. node.js函數返回空
- 15. 不返回,在函數返回非void {在日食CDT}
- 16. Python-social-auth返回管理員用戶
- 17. 是否有T-SQL函數返回'sa'帳戶的名稱?
- 18. 調用非託管函數char返回char *
- 19. 管理本地用戶帳戶
- 20. Firebase管理員和用戶帳戶
- 21. 與服務帳戶Googlephpapi管理用戶
- 22. Web用戶帳戶管理組件
- 23. C警告'返回'沒有值,在函數返回非void
- 24. 如何使用Web部署3.0與非管理員帳戶
- 25. 允許非管理Windows帳戶自動更新應用程序
- 26. 函數不返回用戶()
- 27. 將Magento管理帳戶與客戶帳戶關聯
- 28. page在Puppeteer函數返回空對象
- 29. 請求函數返回在Firefox /鉻空
- 30. MySQL的函數COALESCE未能返回非空值
獲取NULL後,GetLastError()API調用會返回什麼?如果使用Visual C++,你可以在OpenSCManager()調用中放置一個斷點,在Watch窗口中執行'Step'並放入'@err' - 值是什麼? – JBRWilkinson 2010-07-19 10:03:23