Hola Joxean:Para cambiar la hora del sistema puedes usar por ejemplo:
SYSTEMTIME t;
GetSystemTime(&t);
t.wHour = 21;
t.wMinute = 0;
t.wSecond = 0;
SetSystemTime(&t);
y en caso de estar usando Windows NT o 2000, tienes que anteponer el código siguiente para obtener el "permiso" necesario:
HANDLE ProcessHandle, TokenHandle;
LUID tmpLuid;
TOKEN_PRIVILEGES tkp, tkpNew;
DWORD dwBufferNeeded;
ProcessHandle = GetCurrentProcess();
OpenProcessToken(ProcessHandle, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &TokenHandle);
LookupPrivilegeValue(NULL, SE_SYSTEMTIME_NAME, &tmpLuid);
tkp.PrivilegeCount = 1;
tkp.Privileges->Luid = tmpLuid;
tkp.Privileges->Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(TokenHandle, false, &tkp,
sizeof(tkpNew), &tkpNew, &dwBufferNeeded);
Saludos.