Lines Matching +full:en +full:- +full:us
2 * QEMU Guest Agent win32-specific command implementations
11 * See the COPYING file in the top-level directory.
32 #include "guest-agent-core.h"
33 #include "vss-win32.h"
34 #include "qga-qapi-commands.h"
38 #include "qemu/host-utils.h"
40 #include "commands-common.h"
62 #pragma GCC diagnostic ignored "-Wredundant-decls"
82 (365 * (1970 - 1601) + \
83 (1970 - 1601) / 4 - 3))
85 #define INVALID_SET_FILE_POINTER ((DWORD)-1)
125 * https://en.wikipedia.org/wiki/Load_(computing)#Unix-style_load_calculation
131 …/torvalds/linux/blob/345671ea0f9258f410eb057b9ced9cefbbe5dc78/include/linux/sched/loadavg.h#L20-L23
159 if (strcmp(flags->forms, mode_str) == 0) { in find_open_flag()
175 return -1; in guest_file_handle_add()
178 gfh->id = handle; in guest_file_handle_add()
179 gfh->fh = fh; in guest_file_handle_add()
189 if (gfh->id == id) { in guest_file_handle_find()
221 int64_t fd = -1; in qmp_guest_file_open()
234 slog("guest-file-open called, filepath: %s, mode: %s", path, mode); in qmp_guest_file_open()
241 w_path = g_utf8_to_utf16(path, -1, NULL, NULL, &gerr); in qmp_guest_file_open()
243 error_setg(errp, "can't convert 'path' to UTF-16: %s", in qmp_guest_file_open()
244 gerr->message); in qmp_guest_file_open()
249 fh = CreateFileW(w_path, guest_flags->desired_access, share_mode, sa_attr, in qmp_guest_file_open()
250 guest_flags->creation_disposition, flags_and_attr, in qmp_guest_file_open()
258 /* set fd non-blocking to avoid common use cases (like reading from a in qmp_guest_file_open()
270 slog("guest-file-open, handle: % " PRId64, fd); in qmp_guest_file_open()
281 slog("guest-file-close called, handle: %" PRId64, handle); in qmp_guest_file_close()
285 ret = CloseHandle(gfh->fh); in qmp_guest_file_close()
340 slog("guest-shutdown called, mode: %s", mode); in qmp_guest_shutdown()
364 slog("guest-shutdown failed: %s", emsg); in qmp_guest_shutdown()
365 error_setg_win32(errp, GetLastError(), "guest-shutdown failed"); in qmp_guest_shutdown()
374 HANDLE fh = gfh->fh; in guest_file_read_unsafe()
385 read_data->count = (size_t)read_count; in guest_file_read_unsafe()
386 read_data->eof = read_count == 0; in guest_file_read_unsafe()
389 read_data->buf_b64 = g_base64_encode(buf, read_count); in guest_file_read_unsafe()
412 fh = gfh->fh; in qmp_guest_file_write()
413 buf = qbase64_decode(buf_b64, -1, &buf_len, errp); in qmp_guest_file_write()
429 slog("guest-file-write-failed, handle: %" PRId64, handle); in qmp_guest_file_write()
432 write_data->count = (size_t) write_count; in qmp_guest_file_write()
465 fh = gfh->fh; in qmp_guest_file_seek()
472 seek_data->position = new_pos.QuadPart; in qmp_guest_file_seek()
484 fh = gfh->fh; in qmp_guest_file_flush()
542 * https://msdn.microsoft.com/en-us/library/windows/hardware/ff543095(v=vs.85).aspx in get_pci_address_for_device()
548 bus = -1; in get_pci_address_for_device()
560 addr = -1; in get_pci_address_for_device()
566 * This number is typically a user-perceived slot number. in get_pci_address_for_device()
572 ui_slot = -1; in get_pci_address_for_device()
577 * SetupApi gives us the same information as driver with in get_pci_address_for_device()
584 …* https://docs.microsoft.com/en-us/windows/desktop/api/setupapi/nf-setupapi-setupdigetdeviceregist… in get_pci_address_for_device()
587 pci->domain = -1; in get_pci_address_for_device()
588 pci->slot = -1; in get_pci_address_for_device()
589 pci->function = -1; in get_pci_address_for_device()
590 pci->bus = -1; in get_pci_address_for_device()
593 func = ((int)addr == -1) ? -1 : addr & 0x0000FFFF; in get_pci_address_for_device()
594 slot = ((int)addr == -1) ? -1 : (addr >> 16) & 0x0000FFFF; in get_pci_address_for_device()
599 pci->domain = 0; in get_pci_address_for_device()
600 pci->slot = (int)ui_slot; in get_pci_address_for_device()
601 pci->function = func; in get_pci_address_for_device()
602 pci->bus = (int)bus; in get_pci_address_for_device()
613 pci->domain = -1; in get_empty_pci_address()
614 pci->slot = -1; in get_empty_pci_address()
615 pci->function = -1; in get_empty_pci_address()
616 pci->bus = -1; in get_empty_pci_address()
658 pdev_iface_detail_data->cbSize = in get_pci_info()
677 dev_file = CreateFile(pdev_iface_detail_data->DevicePath, 0, in get_pci_info()
728 * which exports are only available in mingw-w64 6+ in get_pci_info()
821 disk->bus_type = find_bus_type(dev_desc->BusType); in get_disk_properties()
822 g_debug("bus type %d", disk->bus_type); in get_disk_properties()
825 size = dev_desc->Size; in get_disk_properties()
834 if (dev_desc->SerialNumberOffset > 0) { in get_disk_properties()
838 if (dev_desc->SerialNumberOffset >= received) { in get_disk_properties()
843 serial = (char *)dev_desc + dev_desc->SerialNumberOffset; in get_disk_properties()
844 len = received - dev_desc->SerialNumberOffset; in get_disk_properties()
847 disk->serial = g_strndup(serial, len); in get_disk_properties()
864 g_debug("getting disk info for: %s", disk->dev); in get_single_disk_info()
865 disk_h = CreateFile(disk->dev, 0, FILE_SHARE_READ, NULL, OPEN_EXISTING, in get_single_disk_info()
878 g_debug("bus type %d", disk->bus_type); in get_single_disk_info()
880 * report -1 values for non-PCI buses rather than fail. fail the command in get_single_disk_info()
884 if (disk->bus_type == GUEST_DISK_BUS_TYPE_USB) { in get_single_disk_info()
885 disk->pci_controller = get_empty_pci_address(); in get_single_disk_info()
887 disk->pci_controller = get_pci_info(disk_number, &local_err); in get_single_disk_info()
893 if (disk->bus_type == GUEST_DISK_BUS_TYPE_SCSI in get_single_disk_info()
894 || disk->bus_type == GUEST_DISK_BUS_TYPE_IDE in get_single_disk_info()
895 || disk->bus_type == GUEST_DISK_BUS_TYPE_RAID in get_single_disk_info()
897 || disk->bus_type == GUEST_DISK_BUS_TYPE_SAS in get_single_disk_info()
901 * https://technet.microsoft.com/en-us/library/ee851589(v=ws.10).aspx */ in get_single_disk_info()
905 disk->unit = addr.Lun; in get_single_disk_info()
906 disk->target = addr.TargetId; in get_single_disk_info()
907 disk->bus = addr.PathId; in get_single_disk_info()
933 name[strlen(name) - 1] = 0; in build_guest_disk_info()
954 (sizeof(DISK_EXTENT) * (extents->NumberOfDiskExtents - 1)); in build_guest_disk_info()
965 /* Possibly CD-ROM or a shared drive. Try to pass the volume */ in build_guest_disk_info()
968 disk->dev = g_strdup(name); in build_guest_disk_info()
985 g_debug("Number of extents: %lu", extents->NumberOfDiskExtents); in build_guest_disk_info()
988 for (i = 0; i < extents->NumberOfDiskExtents; i++) { in build_guest_disk_info()
994 * https://docs.microsoft.com/en-us/windows/desktop/api/winioctl/ns-winioctl-_disk_extent in build_guest_disk_info()
997 … * https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file#win32-device-namespaces in build_guest_disk_info()
999 disk->dev = g_strdup_printf("\\\\.\\PhysicalDrive%lu", in build_guest_disk_info()
1000 extents->Extents[i].DiskNumber); in build_guest_disk_info()
1002 get_single_disk_info(extents->Extents[i].DiskNumber, disk, &local_err); in build_guest_disk_info()
1064 pdev_iface_detail_data->cbSize = in qmp_guest_get_disks()
1076 g_debug(" device: %s", pdev_iface_detail_data->DevicePath); in qmp_guest_get_disks()
1077 dev_file = CreateFile(pdev_iface_detail_data->DevicePath, 0, in qmp_guest_get_disks()
1088 disk->name = g_strdup_printf("\\\\.\\PhysicalDrive%lu", in qmp_guest_get_disks()
1093 address->dev = g_strdup(disk->name); in qmp_guest_get_disks()
1102 disk->address = address; in qmp_guest_get_disks()
1159 fs->name = g_strdup(guid); in build_guest_fsinfo()
1160 fs->has_total_bytes = false; in build_guest_fsinfo()
1161 fs->has_total_bytes_privileged = false; in build_guest_fsinfo()
1162 fs->has_used_bytes = false; in build_guest_fsinfo()
1164 fs->mountpoint = g_strdup("System Reserved"); in build_guest_fsinfo()
1166 fs->mountpoint = g_strndup(mnt_point, len); in build_guest_fsinfo()
1167 if (GetDiskFreeSpaceEx(fs->mountpoint, in build_guest_fsinfo()
1171 fs->used_bytes = i64TotalBytes - i64FreeBytes; in build_guest_fsinfo()
1172 fs->total_bytes = i64TotalBytes; in build_guest_fsinfo()
1173 fs->has_total_bytes = true; in build_guest_fsinfo()
1174 fs->has_used_bytes = true; in build_guest_fsinfo()
1178 fs->type = g_strdup(fs_name); in build_guest_fsinfo()
1179 fs->disk = build_guest_disk_info(guid, errp); in build_guest_fsinfo()
1238 * Freeze local file systems using Volume Shadow-copy Service.
1258 slog("guest-fsfreeze called"); in qmp_guest_fsfreeze_freeze_list()
1282 * Thaw local file systems using Volume Shadow-copy Service.
1297 slog("guest-fsthaw called"); in qmp_guest_fsfreeze_thaw()
1386 res->error = g_strdup(gerr->message); in qmp_guest_fstrim()
1391 res->path = path; in qmp_guest_fstrim()
1393 QAPI_LIST_PREPEND(resp->paths, res); in qmp_guest_fstrim()
1403 res->error = g_strdup(gerr->message); in qmp_guest_fstrim()
1415 if (g_strstr_len(lines[i], -1, "(0x") == NULL) { in qmp_guest_fstrim()
1418 res->error = g_strdup(lines[i]); in qmp_guest_fstrim()
1447 error_setg(errp, "suspend-to-disk not supported by OS"); in check_suspend_mode()
1452 error_setg(errp, "suspend-to-ram not supported by OS"); in check_suspend_mode()
1468 ret = -1; in do_suspend()
1546 str_size = WideCharToMultiByte(CP_UTF8, 0, wstr, -1, NULL, 0, NULL, NULL); in guest_wctomb_dup()
1549 WideCharToMultiByte(CP_UTF8, 0, wstr, -1, str, str_size, NULL, NULL); in guest_wctomb_dup()
1560 if (ip_addr->Address.lpSockaddr->sa_family == AF_INET || in guest_addr_to_str()
1561 ip_addr->Address.lpSockaddr->sa_family == AF_INET6) { in guest_addr_to_str()
1563 ret = WSAAddressToString(ip_addr->Address.lpSockaddr, in guest_addr_to_str()
1564 ip_addr->Address.iSockaddrLength, in guest_addr_to_str()
1583 return ip_addr->OnLinkPrefixLength; in guest_ip_prefix()
1594 wbuf[INTERFACE_PATH_BUF_SZ - 1] = 0; in get_interface_index()
1620 return -1; in guest_get_network_stats()
1626 return -1; in guest_get_network_stats()
1632 stats->rx_bytes = a_mid_ifrow.InOctets; in guest_get_network_stats()
1633 stats->rx_packets = a_mid_ifrow.InUcastPkts; in guest_get_network_stats()
1634 stats->rx_errs = a_mid_ifrow.InErrors; in guest_get_network_stats()
1635 stats->rx_dropped = a_mid_ifrow.InDiscards; in guest_get_network_stats()
1636 stats->tx_bytes = a_mid_ifrow.OutOctets; in guest_get_network_stats()
1637 stats->tx_packets = a_mid_ifrow.OutUcastPkts; in guest_get_network_stats()
1638 stats->tx_errs = a_mid_ifrow.OutErrors; in guest_get_network_stats()
1639 stats->tx_dropped = a_mid_ifrow.OutDiscards; in guest_get_network_stats()
1643 return -1; in guest_get_network_stats()
1674 for (addr = adptr_addrs; addr; addr = addr->Next) { in qmp_guest_network_get_interfaces()
1679 info->name = guest_wctomb_dup(addr->FriendlyName); in qmp_guest_network_get_interfaces()
1681 if (addr->PhysicalAddressLength != 0) { in qmp_guest_network_get_interfaces()
1682 mac_addr = addr->PhysicalAddress; in qmp_guest_network_get_interfaces()
1684 info->hardware_address = in qmp_guest_network_get_interfaces()
1693 for (ip_addr = addr->FirstUnicastAddress; in qmp_guest_network_get_interfaces()
1695 ip_addr = ip_addr->Next) { in qmp_guest_network_get_interfaces()
1705 address_item->ip_address = addr_str; in qmp_guest_network_get_interfaces()
1706 address_item->prefix = guest_ip_prefix(ip_addr); in qmp_guest_network_get_interfaces()
1707 if (ip_addr->Address.lpSockaddr->sa_family == AF_INET) { in qmp_guest_network_get_interfaces()
1708 address_item->ip_address_type = GUEST_IP_ADDRESS_TYPE_IPV4; in qmp_guest_network_get_interfaces()
1709 } else if (ip_addr->Address.lpSockaddr->sa_family == AF_INET6) { in qmp_guest_network_get_interfaces()
1710 address_item->ip_address_type = GUEST_IP_ADDRESS_TYPE_IPV6; in qmp_guest_network_get_interfaces()
1714 info->has_ip_addresses = true; in qmp_guest_network_get_interfaces()
1715 info->ip_addresses = head_addr; in qmp_guest_network_get_interfaces()
1717 if (!info->statistics) { in qmp_guest_network_get_interfaces()
1719 if (guest_get_network_stats(addr->AdapterName, interface_stat) in qmp_guest_network_get_interfaces()
1720 == -1) { in qmp_guest_network_get_interfaces()
1723 info->statistics = interface_stat; in qmp_guest_network_get_interfaces()
1735 return ((((int64_t)tf->dwHighDateTime << 32) | tf->dwLowDateTime) in filetime_to_ns()
1736 - W32_FT_OFFSET) * 100; in filetime_to_ns()
1750 * https://msdn.microsoft.com/en-us/library/aa908981.aspx in qmp_guest_set_time()
1790 if (time_ns < 0 || time_ns / 100 > INT64_MAX - W32_FT_OFFSET) { in qmp_guest_set_time()
1847 if (pslpi->Relationship == RelationProcessorCore) { in qmp_guest_get_vcpus()
1848 ULONG_PTR cpu_bits = pslpi->ProcessorMask; in qmp_guest_get_vcpus()
1855 vcpu->logical_id = current++; in qmp_guest_get_vcpus()
1856 vcpu->online = true; in qmp_guest_get_vcpus()
1857 vcpu->has_can_offline = true; in qmp_guest_get_vcpus()
1864 length -= sizeof(SYSTEM_LOGICAL_PROCESSOR_INFORMATION); in qmp_guest_get_vcpus()
1910 msg[nchars - 1] == L'\n' && in get_net_error_message()
1911 msg[nchars - 2] == L'\r') { in get_net_error_message()
1912 msg[nchars - 2] = L'\0'; in get_net_error_message()
1915 retval = g_utf16_to_utf8(msg, -1, NULL, NULL, NULL); in get_net_error_message()
1944 rawpasswddata = (char *)qbase64_decode(password, -1, &rawpasswdlen, errp); in qmp_guest_set_user_password()
1951 user = g_utf8_to_utf16(username, -1, NULL, NULL, &gerr); in qmp_guest_set_user_password()
1953 error_setg(errp, "can't convert 'username' to UTF-16: %s", in qmp_guest_set_user_password()
1954 gerr->message); in qmp_guest_set_user_password()
1959 wpass = g_utf8_to_utf16(rawpasswddata, -1, NULL, NULL, &gerr); in qmp_guest_set_user_password()
1961 error_setg(errp, "can't convert 'password' to UTF-16: %s", in qmp_guest_set_user_password()
1962 gerr->message); in qmp_guest_set_user_password()
2042 if (strlen(info->UserName) == 0) { in qmp_guest_get_users()
2047 login = info->LogonTime.QuadPart; in qmp_guest_get_users()
2048 login -= W32_FT_OFFSET; in qmp_guest_get_users()
2051 if (g_hash_table_contains(cache, info->UserName)) { in qmp_guest_get_users()
2052 value = g_hash_table_lookup(cache, info->UserName); in qmp_guest_get_users()
2054 if (user->login_time > login_time) { in qmp_guest_get_users()
2055 user->login_time = login_time; in qmp_guest_get_users()
2060 user->user = g_strdup(info->UserName); in qmp_guest_get_users()
2061 user->domain = g_strdup(info->Domain); in qmp_guest_get_users()
2063 user->login_time = login_time; in qmp_guest_get_users()
2065 g_hash_table_add(cache, user->user); in qmp_guest_get_users()
2129 info->dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOEXW); in ga_get_win_version()
2144 DWORD major = os_version->dwMajorVersion; in ga_get_win_name()
2145 DWORD minor = os_version->dwMinorVersion; in ga_get_win_name()
2146 DWORD build = os_version->dwBuildNumber; in ga_get_win_name()
2147 int tbl_idx = (os_version->wProductType != VER_NT_WORKSTATION); in ga_get_win_name()
2153 while (table->version != NULL) { in ga_get_win_name()
2155 while (win_10_0_table->version != NULL) { in ga_get_win_name()
2156 if (build >= win_10_0_table->first_build) { in ga_get_win_name()
2163 return g_strdup(win_10_0_version->version_id); in ga_get_win_name()
2165 return g_strdup(win_10_0_version->version); in ga_get_win_name()
2168 } else if (major == table->major && minor == table->minor) { in ga_get_win_name()
2170 return g_strdup(table->version_id); in ga_get_win_name()
2172 return g_strdup(table->version); in ga_get_win_name()
2277 info->kernel_version = g_strdup_printf("%lu.%lu", in qmp_guest_get_osinfo()
2280 info->kernel_release = g_strdup_printf("%lu", in qmp_guest_get_osinfo()
2282 info->machine = ga_get_current_arch(); in qmp_guest_get_osinfo()
2284 info->id = g_strdup("mswindows"); in qmp_guest_get_osinfo()
2285 info->name = g_strdup("Microsoft Windows"); in qmp_guest_get_osinfo()
2286 info->pretty_name = product_name; in qmp_guest_get_osinfo()
2287 info->version = ga_get_win_name(&os_version, false); in qmp_guest_get_osinfo()
2288 info->version_id = ga_get_win_name(&os_version, true); in qmp_guest_get_osinfo()
2289 info->variant = g_strdup(server ? "server" : "client"); in qmp_guest_get_osinfo()
2290 info->variant_id = g_strdup(server ? "server" : "client"); in qmp_guest_get_osinfo()
2341 gchar *id8 = g_utf16_to_utf8(id, -1, NULL, NULL, NULL); in ga_get_hardware_ids()
2348 * https://docs.microsoft.com/en-us/windows-hardware/drivers/install/identifiers-for-pci-devices
2350 #define DEVICE_PCI_RE "PCI\\\\VEN_(1AF4|1B36)&DEV_([0-9A-B]{4})(&|$)"
2391 device->driver_name = g_utf16_to_utf8(name, -1, NULL, NULL, NULL); in qmp_guest_get_devices()
2392 if (device->driver_name == NULL) { in qmp_guest_get_devices()
2396 slog("querying device: %s", device->driver_name); in qmp_guest_get_devices()
2412 device->id = g_new0(GuestDeviceId, 1); in qmp_guest_get_devices()
2413 device->id->type = GUEST_DEVICE_TYPE_PCI; in qmp_guest_get_devices()
2414 id = &device->id->u.pci; in qmp_guest_get_devices()
2415 id->vendor_id = g_ascii_strtoull(vendor_id, NULL, 16); in qmp_guest_get_devices()
2416 id->device_id = g_ascii_strtoull(device_id, NULL, 16); in qmp_guest_get_devices()
2430 device->driver_version = g_utf16_to_utf8(version, -1, NULL, in qmp_guest_get_devices()
2432 if (device->driver_version == NULL) { in qmp_guest_get_devices()
2443 device->driver_date = filetime_to_ns(date); in qmp_guest_get_devices()
2444 device->has_driver_date = true; in qmp_guest_get_devices()
2447 device->driver_name, device->driver_date, in qmp_guest_get_devices()
2448 device->driver_version); in qmp_guest_get_devices()
2489 (1.0 - LOADAVG_FACTOR_1F); in load_avg_callback()
2491 (1.0 - LOADAVG_FACTOR_5F); in load_avg_callback()
2493 (1.0 - LOADAVG_FACTOR_15F); in load_avg_callback()
2590 ret->load1m = load_avg_1m; in qmp_guest_get_load()
2591 ret->load5m = load_avg_5m; in qmp_guest_get_load()
2592 ret->load15m = load_avg_15m; in qmp_guest_get_load()