mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
qga: add windows implementation for guest-set-time
Signed-off-by: Lei Li <lilei@linux.vnet.ibm.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Michael Roth <mdroth@linux.vnet.ibm.com> Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
This commit is contained in:
parent
3f2a6087de
commit
b8f954fea0
1 changed files with 28 additions and 1 deletions
|
@ -309,7 +309,34 @@ int64_t qmp_guest_get_time(Error **errp)
|
|||
|
||||
void qmp_guest_set_time(int64_t time_ns, Error **errp)
|
||||
{
|
||||
error_set(errp, QERR_UNSUPPORTED);
|
||||
SYSTEMTIME ts;
|
||||
FILETIME tf;
|
||||
LONGLONG time;
|
||||
|
||||
if (time_ns < 0 || time_ns / 100 > INT64_MAX - W32_FT_OFFSET) {
|
||||
error_setg(errp, "Time %" PRId64 "is invalid", time_ns);
|
||||
return;
|
||||
}
|
||||
|
||||
time = time_ns / 100 + W32_FT_OFFSET;
|
||||
|
||||
tf.dwLowDateTime = (DWORD) time;
|
||||
tf.dwHighDateTime = (DWORD) (time >> 32);
|
||||
|
||||
if (!FileTimeToSystemTime(&tf, &ts)) {
|
||||
error_setg(errp, "Failed to convert system time %d", (int)GetLastError());
|
||||
return;
|
||||
}
|
||||
|
||||
acquire_privilege(SE_SYSTEMTIME_NAME, errp);
|
||||
if (error_is_set(errp)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!SetSystemTime(&ts)) {
|
||||
error_setg(errp, "Failed to set time to guest: %d", (int)GetLastError());
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
GuestLogicalProcessorList *qmp_guest_get_vcpus(Error **errp)
|
||||
|
|
Loading…
Reference in a new issue