From bf48c640251cfe8d9ed7744bc88f5a858b694275 Mon Sep 17 00:00:00 2001 From: qihao Date: Wed, 7 Feb 2024 17:26:58 +0800 Subject: [PATCH] qga-win: Fix guest-get-fsinfo multi-disks collection cheery-pick from 7c4486350a79532580a37d42abdeb1dc7e4fa6c9 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 Reviewed-by: Konstantin Kostiuk Signed-off-by: Konstantin Kostiuk Signed-off-by: qihao_yewu --- qga/commands-win32.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/qga/commands-win32.c b/qga/commands-win32.c index 4e84afd83b..30e50f1769 100644 --- a/qga/commands-win32.c +++ b/qga/commands-win32.c @@ -904,6 +904,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.27.0