La mia app utilizza SetSystemTime()
per impostare l'orologio del PC da una sorgente GPS. Funziona bene in Windows 7 con Controllo account utente disabilitato, ma in Windows 8, anche con UAC disabilitato, fallisce. L'errore che torno è ERROR_PRIVILEGE_NOT_HELD
. L'utente che ha effettuato l'accesso alla macchina si trova nel gruppo Administrators. Posso farlo funzionare solo se eseguo l'applicazione come "Esegui come amministratore" dal menu di scelta rapida del file in Esplora risorse - ma l'utente che ha effettuato l'accesso è un amministratore.Impossibile impostare l'orologio utilizzando SetSystemTime su Windows 8
Quindi ... cosa devo fare diversamente su Windows 8 per far funzionare SetSysytemTime()
? Ho bisogno di privilegi ancora più elevati rispetto ai diritti di amministratore degli attuali utenti? In tal caso, quali sono i privilegi più elevati rispetto all'amministratore? O ho bisogno di impostare l'account utente in modo diverso per consentire a questi tipi di chiamate di funzionare su Windows 8?
MODIFICA: come indicato nei commenti, il tentativo manuale di abilitare il privilegio SE_SYSTEMTIME_NAME
non funziona. Né tenta di aggiungere il privilegio utilizzando il metodo MSDN suggerito di LsaAddAccountRights
.
L'angolo "UAC disabilitato" è molto angusto, non può essere disabilitato afaik. Quasi sicuramente non su Win8, l'impianto idraulico sottostante viene utilizzato per fornire la sandbox in cui vengono eseguite le app Metro. Avrai bisogno di un manifest per chiedere l'elevazione o avviare la tua app da un processo che è già elevato. –
Dà la possibilità di disattivare UAC ancora ... quindi è una specie di non effettivamente disattivato allora? Che noioso! –
"Il processo di chiamata deve avere il privilegio SE_SYSTEMTIME_NAME Questo privilegio è disabilitato per impostazione predefinita.La funzione SetSystemTime abilita il privilegio SE_SYSTEMTIME_NAME prima di modificare l'ora di sistema e disattiva il privilegio prima di tornare.Per ulteriori informazioni, vedere Esecuzione con privilegi speciali." - Forse in Windows 8, il privilegio non è più abilitato automaticamente e devi farlo da solo con AdjustTokenPrivileges()? Potrebbe valere la pena provare. –