return 0;\r
}\r
\r
-static BOOL IsVentoyPhyDrive(int PhyDrive, UINT64 SizeBytes, MBR_HEAD *pMBR, UINT64 *Part2StartSector, UINT64 *GptPart2Attr)\r
+BOOL IsVentoyPhyDrive(int PhyDrive, UINT64 SizeBytes, MBR_HEAD *pMBR, UINT64 *Part2StartSector, UINT64 *GptPart2Attr)\r
{\r
int i;\r
BOOL bRet;\r
return TRUE;\r
}\r
\r
+int GetVolumeClusterSize(char Drive)\r
+{\r
+ CHAR Volume[32] = { 0 };\r
+ DWORD SectorsPerCluster = 0;\r
+ DWORD BytesPerSector = 0;\r
+ DWORD NumberOfFreeClusters = 0;\r
+ DWORD TotalNumberOfClusters = 0;\r
+\r
+ sprintf_s(Volume, sizeof(Volume), "%C:\\", Drive);\r
+\r
+ if (GetDiskFreeSpaceA(Volume, &SectorsPerCluster, &BytesPerSector, &NumberOfFreeClusters, &TotalNumberOfClusters))\r
+ {\r
+ Log("GetVolumeClusterSize %s SUCCESS %u %u %u", Volume, SectorsPerCluster, BytesPerSector, SectorsPerCluster * BytesPerSector);\r
+ return (int)(SectorsPerCluster * BytesPerSector); \r
+ }\r
+ else\r
+ {\r
+ Log("GetVolumeClusterSize %s failed err:%u", Volume, LASTERR);\r
+ }\r
+\r
+ return 0;\r
+}\r
+\r
+int GetVentoyFsNameInPhyDrive(PHY_DRIVE_INFO* CurDrive)\r
+{\r
+ int i = 0;\r
+ UINT64 Offset;\r
+\r
+ CHAR Volume[128] = { 0 };\r
+ CHAR FsName[MAX_PATH] = { 0 };\r
+\r
+ while (CurDrive->DriveLetters[i])\r
+ {\r
+ if (GetPhyDriveByLogicalDrive(CurDrive->DriveLetters[i], &Offset) >= 0)\r
+ {\r
+ if (Offset == SIZE_1MB)\r
+ {\r
+ sprintf_s(Volume, sizeof(Volume), "%C:\\", CurDrive->DriveLetters[i]);\r
+ Log("Find the partition 1 logical drive is %s", Volume);\r
+ break;\r
+ }\r
+ }\r
+ i++;\r
+ }\r
+\r
+ sprintf_s(CurDrive->VentoyFsType, sizeof(CurDrive->VentoyFsType), "??");\r
+\r
+ if (Volume[0])\r
+ {\r
+ CurDrive->VentoyFsClusterSize = GetVolumeClusterSize(Volume[0]);\r
+\r
+ if (GetVolumeInformationA(Volume, NULL, 0, NULL, NULL, NULL, FsName, MAX_PATH))\r
+ {\r
+ if (_stricmp(FsName, "exFAT") == 0)\r
+ {\r
+ sprintf_s(CurDrive->VentoyFsType, sizeof(CurDrive->VentoyFsType), "exFAT");\r
+ }\r
+ else if (_stricmp(FsName, "NTFS") == 0)\r
+ {\r
+ sprintf_s(CurDrive->VentoyFsType, sizeof(CurDrive->VentoyFsType), "NTFS");\r
+ }\r
+ else if (_stricmp(FsName, "FAT") == 0 || _stricmp(FsName, "FAT32") == 0)\r
+ {\r
+ sprintf_s(CurDrive->VentoyFsType, sizeof(CurDrive->VentoyFsType), "FAT32");\r
+ }\r
+ else\r
+ {\r
+ sprintf_s(CurDrive->VentoyFsType, sizeof(CurDrive->VentoyFsType), "%s", FsName);\r
+ }\r
+\r
+ Log("GetVentoyFsNameInPhyDrive %d %s <%s> <%s>", CurDrive->PhyDrive, Volume, FsName, CurDrive->VentoyFsType);\r
+ }\r
+ else\r
+ {\r
+ Log("GetVolumeInformationA %s failed %u", Volume, LASTERR);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ Log("GetVentoyFsNameInPhyDrive %s not found", Volume);\r
+ }\r
+\r
+ return 0;\r
+}\r
\r
static int FilterPhysicalDrive(PHY_DRIVE_INFO *pDriveList, DWORD DriveCount)\r
{\r
GetVentoyVerInPhyDrive(CurDrive, Part2StartSector, CurDrive->VentoyVersion, sizeof(CurDrive->VentoyVersion), &(CurDrive->SecureBootSupport));\r
Log("PhyDrive %d is Ventoy Disk ver:%s SecureBoot:%u", CurDrive->PhyDrive, CurDrive->VentoyVersion, CurDrive->SecureBootSupport);\r
\r
+ GetVentoyFsNameInPhyDrive(CurDrive);\r
+\r
if (CurDrive->VentoyVersion[0] == 0)\r
{\r
CurDrive->VentoyVersion[0] = '?';\r