2015-06-22 97 views
4

情況是一個運行c#代碼的客戶端系統,在啓動時我們希望檢查並確認運行系統的Windows標識具有某些特定的權限,當前特定的情況是SeSystemtimePrivilege。 我們不希望用戶被要求成爲系統啓動的管理員。如何檢查本地安全策略權限爲非管理

路徑嘗試到目前爲止,包括:

  • WMI它沒有得到我們後的設定權。

  • LsaEnumerateAccountsWithUserRight through PInvoke - 完全有效,但需要管理員權限才能使用LsaOpenPolicy。

  • GetTokenInformation通過PInvoke與LookupPrivilegeName一起使用這不會返回所需的結果。相反,它只返回令牌的5個權限,但不包括SeSystemtimePrivilege,雖然它已明確授予有問題的用戶。 (我認爲它只是向我展示了GP的權利,它們與我通過cmd WhoAmI/priv檢查看到的權利相同。)
  • LookupPrivilegeValue通過PInvoke與PrivilegeCheck一起使用,而且這似乎也只能訪問與GetTokenInformation相同的5個權限,並且只有在實際啓用了該權限時才返回true。

我想不通至今如何使我的本地機器上的這一權利,以測試這種情況,但我不認爲我可以依靠它比默認情況下在客戶機上其他。

我在尋找更多關於如何獲得這些用戶權限而不必擁有管理權限的想法。

想法?我用盡了選項嗎?那不可能,可以嗎?

+0

Thanks!非常感激。我會記住的。 – tendrel

+0

我很確定我有一個可行的解決方案,令牌角度是有效的方法。我會在我完成測試後,在明天發佈我的答案。 (= – tendrel

回答

0

這個問題的答案我的情況竟然是

  • GetTokenInformation通過PInvoke的,連同LookupPrivilegeName 選項。

所以,我沒有得到充分的權利,是我認爲這是分裂的標誌。作爲管理員,當運行應用程序時,您會獲得兩個令牌作爲非提升。這阻礙了完整的工作流程,直到涉及清單。這裏的關鍵在於得到我們的完全管理權限後,將包括這一行的清單:

  • < requestedExecutionLevel水平=「highestAvailable」 uiAccess =「假」 />

然後就變成更輕鬆。管理員可以運行未升級的應用程序,並且GetTokenInformation將返回全套管理員權限,這些權限將包括我們的目標SeSystemtimePrivilege(我們不在任何人限制管理權限的系統上)。對於標準用戶,我們在本地安全策略中明確授予他們SeSystemtimePrivilege,然後以其令牌權限返回權限。

兩種情況均得到解決。它需要設置虛擬機來測試標準用戶等,這是由於其他的東西,這是緩慢的。但無論如何,它確實有效,並滿足我們的需求。

我希望這可以幫助別人!

Jen