2017-05-29 104 views
0

我試圖使用SetSystemTime(從Kernel32.dll)或從cmd.exe使用TIME
都失敗,TIME給我的錯誤權限丟失使用SetSystemTime

所需的特權不保留由客戶端。

我已經使用gpedit.msc添加本地/用戶,也是用戶本身security settings/Local Policies/Change the system time
我試圖啓用AdjustTokenPrivileges(SeSystemtimePrivilege ...)的權限,但我得到了GrandPrivilege failed錯誤。

我正在使用Win7 x32 Professional。

這是一個具有管理員權限的標準用戶,但我試圖使時間更改沒有"Run as Administrator",因爲調用SetSystemTime函數的程序不應以"Run as Administrator"開頭。

我假定Change the system time政策的目的正是針對這種情況,它也是在MSDN

我在一個不知所措描述。

+0

您可能需要通過「以管理員身份運行」來啓動cmd,否則它仍然在沒有提升權限的情況下運行。 – kennyzx

+0

@kennyzx謝謝,但普通用戶不能以「以管理員身份運行」運行命令(在我的情況下可能,因爲用戶擁有它)。使用'SetSystemTime'的程序不能以管理員權限啓動 – jeb

+0

因此您試圖通過編輯組策略設置來允許標準用戶更改系統時間,默認情況下,只有管理員和本地服務可以進行更改? – kennyzx

回答

1

事實證明,雖然SeSystemTimePrivilege不會觸發UAC對一個非管理員,這是所產生的限制令牌仍然被刪除時該結果的管理員登錄的是,你可以使用組策略來將SeSystemTimePrivilege分配給非管理用戶,但該策略對管理用戶不起作用。

如果程序在管理員用戶運行時需要提升高度是可以接受的,則可以使用highestAvailable清單設置。這樣,如果用戶是管理員,程序只會要求提升。或者,您可以設計程序以僅在實際需要設置時間時纔要求提升。

如果提升提示不可接受,則必須安裝系統服務以代表應用程序更改系統時間。

+0

感謝您的洞察力,我很害怕這樣的結果。由於我的程序不能問用戶,我必須編寫一個系統服務 – jeb