Mi aplicación usa SetSystemTime()
para configurar el reloj de la PC desde una fuente de GPS. Esto funciona bien en Windows 7 con User Account Control deshabilitado, pero en Windows 8, incluso con UAC deshabilitado, falla. El error que recibo es ERROR_PRIVILEGE_NOT_HELD
. El usuario que inició sesión en la máquina está en el grupo Administradores. Solo puedo hacer que funcione si ejecuto la aplicación como "Ejecutar como administrador" desde el menú contextual del archivo en el Explorador, pero el usuario que ha iniciado sesión ES un Administrador.No se puede establecer el reloj usando SetSystemTime en Windows 8
Entonces ... ¿qué debo hacer de manera diferente en Windows 8 para obtener SetSysytemTime()
para trabajar? ¿Necesito aún más privilegios elevados que los derechos de administrador de los usuarios actuales? Si es así, ¿qué tiene privilegios más altos que el Administrador? ¿O debo configurar la cuenta de usuario de manera diferente para permitir que este tipo de llamadas funcionen en Windows 8?
EDITAR: Como se señala en los comentarios, el intento de habilitar manualmente el privilegio SE_SYSTEMTIME_NAME
no funciona. Tampoco trata de agregar el privilegio utilizando el método MSDN sugerido de LsaAddAccountRights
.
El ángulo "UAC deshabilitado" es muy turbio, no se puede deshabilitar afaik. Casi definitivamente no está en Win8, la tubería subyacente se utiliza para proporcionar la caja de arena en la que se ejecutan las aplicaciones Metro. Necesitará un manifiesto para pedir elevación o iniciar su aplicación desde un proceso que ya está elevado. –
Le da la opción de desactivar el UAC aún ... ¿entonces no está desactivado? ¡Que molesto! –
"El proceso de llamada debe tener el privilegio SE_SYSTEMTIME_NAME. Este privilegio está deshabilitado de manera predeterminada. La función SetSystemTime habilita el privilegio SE_SYSTEMTIME_NAME antes de cambiar la hora del sistema y deshabilita el privilegio antes de regresar. Para obtener más información, vea Ejecutar con privilegios especiales." - tal vez en Windows 8, el privilegio no se habilita automáticamente y tienes que hacerlo tú mismo con AdjustTokenPrivileges()? Podría valer la pena intentarlo. –