diff --git a/Ventoy2Disk/Ventoy2Disk/Ventoy2Disk.c b/Ventoy2Disk/Ventoy2Disk/Ventoy2Disk.c index 91352d67..43c4ea0c 100644 --- a/Ventoy2Disk/Ventoy2Disk/Ventoy2Disk.c +++ b/Ventoy2Disk/Ventoy2Disk/Ventoy2Disk.c @@ -316,21 +316,40 @@ PHY_DRIVE_INFO * GetPhyDriveInfoById(int Id) int SortPhysicalDrive(PHY_DRIVE_INFO *pDriveList, DWORD DriveCount) { DWORD i, j; + BOOL flag; PHY_DRIVE_INFO TmpDriveInfo; for (i = 0; i < DriveCount; i++) { for (j = i + 1; j < DriveCount; j++) { + flag = FALSE; + if (pDriveList[i].BusType == BusTypeUsb && pDriveList[j].BusType == BusTypeUsb) { if (pDriveList[i].RemovableMedia == FALSE && pDriveList[j].RemovableMedia == TRUE) { - memcpy(&TmpDriveInfo, pDriveList + i, sizeof(PHY_DRIVE_INFO)); - memcpy(pDriveList + i, pDriveList + j, sizeof(PHY_DRIVE_INFO)); - memcpy(pDriveList + j, &TmpDriveInfo, sizeof(PHY_DRIVE_INFO)); + flag = TRUE; + } + } + else if (pDriveList[j].BusType == BusTypeUsb) + { + flag = TRUE; + } + else + { + if (pDriveList[j].PhyDrive < pDriveList[i].PhyDrive) + { + flag = TRUE; } } + + if (flag) + { + memcpy(&TmpDriveInfo, pDriveList + i, sizeof(PHY_DRIVE_INFO)); + memcpy(pDriveList + i, pDriveList + j, sizeof(PHY_DRIVE_INFO)); + memcpy(pDriveList + j, &TmpDriveInfo, sizeof(PHY_DRIVE_INFO)); + } } }