[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL v2 12/24] qga-win: report disk serial number
From: |
Michael Roth |
Subject: |
[Qemu-devel] [PULL v2 12/24] qga-win: report disk serial number |
Date: |
Tue, 30 Oct 2018 20:38:09 -0500 |
From: Tomáš Golembiovský <address@hidden>
Signed-off-by: Tomáš Golembiovský <address@hidden>
*coding style fix-ups (declarations at beginning of block)
*improve readability for user-visible errors
*cover additional edge-cases with debug statements
Signed-off-by: Michael Roth <address@hidden>
---
qga/commands-win32.c | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/qga/commands-win32.c b/qga/commands-win32.c
index 1e91aa2343..2d7b56d538 100644
--- a/qga/commands-win32.c
+++ b/qga/commands-win32.c
@@ -634,6 +634,36 @@ static void get_disk_properties(HANDLE vol_h,
GuestDiskAddress *disk,
disk->bus_type = find_bus_type(dev_desc->BusType);
g_debug("bus type %d", disk->bus_type);
+ /* Query once more. Now with long enough buffer. */
+ size = dev_desc->Size;
+ dev_desc = g_malloc0(size);
+ if (!DeviceIoControl(vol_h, IOCTL_STORAGE_QUERY_PROPERTY, &query,
+ sizeof(STORAGE_PROPERTY_QUERY), dev_desc,
+ size, &received, NULL)) {
+ error_setg_win32(errp, GetLastError(), "failed to get serial number");
+ g_debug("failed to get serial number");
+ goto out_free;
+ }
+ if (dev_desc->SerialNumberOffset > 0) {
+ const char *serial;
+ size_t len;
+
+ if (dev_desc->SerialNumberOffset >= received) {
+ error_setg(errp, "failed to get serial number: offset outside the
buffer");
+ g_debug("serial number offset outside the buffer");
+ goto out_free;
+ }
+ serial = (char *)dev_desc + dev_desc->SerialNumberOffset;
+ len = received - dev_desc->SerialNumberOffset;
+ g_debug("serial number \"%s\"", serial);
+ if (*serial != 0) {
+ disk->serial = g_strndup(serial, len);
+ disk->has_serial = true;
+ }
+ }
+out_free:
+ g_free(dev_desc);
+
return;
}
--
2.17.1
- [Qemu-devel] [PULL v2 00/24] qemu-ga patch queue for soft-freeze, Michael Roth, 2018/10/30
- [Qemu-devel] [PULL v2 09/24] build: rename CONFIG_QGA_NTDDDISK to CONFIG_QGA_NTDDSCSI, Michael Roth, 2018/10/30
- [Qemu-devel] [PULL v2 11/24] qga-win: refactor disk properties (bus), Michael Roth, 2018/10/30
- [Qemu-devel] [PULL v2 13/24] qga-win: refactor disk info, Michael Roth, 2018/10/30
- [Qemu-devel] [PULL v2 12/24] qga-win: report disk serial number,
Michael Roth <=
- [Qemu-devel] [PULL v2 15/24] qga-win: return disk device in guest-get-fsinfo, Michael Roth, 2018/10/30
- [Qemu-devel] [PULL v2 10/24] qga-win: add debugging information, Michael Roth, 2018/10/30
- [Qemu-devel] [PULL v2 14/24] qga-win: handle multi-disk volumes, Michael Roth, 2018/10/30
- [Qemu-devel] [PULL v2 20/24] qga: move w32 service handling out of run_agent(), Michael Roth, 2018/10/30
- [Qemu-devel] [PULL v2 19/24] qga: hang GAConfig/socket_activation off of GAState global, Michael Roth, 2018/10/30
- [Qemu-devel] [PULL v2 17/24] qga: fix an off-by-one issue, Michael Roth, 2018/10/30
- [Qemu-devel] [PULL v2 01/24] qga: Support Unicode paths in guest-file-open on win32, Michael Roth, 2018/10/30
- [Qemu-devel] [PULL v2 21/24] qga: add --retry-path option for re-initializing channel on failure, Michael Roth, 2018/10/30
- [Qemu-devel] [PULL v2 18/24] qga: group agent init/cleanup init separate routines, Michael Roth, 2018/10/30
- [Qemu-devel] [PULL v2 16/24] qga-win: demystify namespace stripping, Michael Roth, 2018/10/30