From: Peng Ji <[email protected]> When a volume has more than one disk, all disks cannot be returned correctly because there is not enough malloced memory for disk extents, so before executing DeviceIoControl for the second time, get the correct size of the required memory space to store all disk extents.
Details: https://learn.microsoft.com/en-us/windows/win32/api/winioctl/ns-winioctl-volume_disk_extents Signed-off-by: Peng Ji <[email protected]> Reviewed-by: Konstantin Kostiuk <[email protected]> Signed-off-by: Konstantin Kostiuk <[email protected]> --- qga/commands-win32.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/qga/commands-win32.c b/qga/commands-win32.c index 697c65507c..a1015757d8 100644 --- a/qga/commands-win32.c +++ b/qga/commands-win32.c @@ -935,6 +935,8 @@ static GuestDiskAddressList *build_guest_disk_info(char *guid, Error **errp) DWORD last_err = GetLastError(); if (last_err == ERROR_MORE_DATA) { /* Try once more with big enough buffer */ + size = sizeof(VOLUME_DISK_EXTENTS) + + (sizeof(DISK_EXTENT) * (extents->NumberOfDiskExtents - 1)); g_free(extents); extents = g_malloc0(size); if (!DeviceIoControl( -- 2.42.0
