]> glassweightruler.freedombox.rocks Git - Ventoy.git/blobdiff - Ventoy2Disk/Ventoy2Disk/DiskService_wmsa.c
The gpt pointer is not initialized, and when offset < 0, it may result in freeing...
[Ventoy.git] / Ventoy2Disk / Ventoy2Disk / DiskService_wmsa.c
index ac9bd9613e5ef82f41e66871bedc32b8b9a603d4..346370c8f77a8da24698ee068d0b8002253f5a6f 100644 (file)
 \r
 STATIC BOOL IsPowershellExist(void)\r
 {\r
-       BOOL ret;\r
-\r
-       if (!IsWindows8OrGreater())\r
-       {\r
-               Log("This is before Windows8 powershell disk not supported.");\r
-               return FALSE;\r
-       }\r
+       BOOL ret; \r
 \r
-       ret = IsFileExist("C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\powershell.exe");\r
+       ret = IsFileExist("%s\\system32\\WindowsPowerShell\\v1.0\\powershell.exe", DISK_GetWindowsDir());\r
        if (!ret)\r
        {\r
                Log("powershell.exe not exist");\r
@@ -256,26 +250,50 @@ BOOL PSHELL_ShrinkVolume(int DriveIndex, const char* VolumeGuid, CHAR DriveLette
        return ret;\r
 }\r
 \r
-BOOL PSHELL_FormatVolume(char DriveLetter, int fs)\r
+BOOL PSHELL_FormatVolume(char DriveLetter, int fs, DWORD ClusterSize)\r
 {\r
        BOOL ret;\r
        const char* fsname = NULL;\r
        CHAR CmdBuf[512];\r
+       CHAR FsName[128];\r
+\r
+       fsname = GetVentoyFsFmtNameByTypeA(fs);\r
 \r
-       if (fs == 1)\r
+       if (ClusterSize > 0)\r
        {\r
-               fsname = "NTFS";\r
+               sprintf_s(CmdBuf, sizeof(CmdBuf),\r
+                       "format-volume -DriveLetter %C -FileSystem %s -AllocationUnitSize %u -Force -NewFileSystemLabel Ventoy",\r
+                       DriveLetter, fsname, ClusterSize);\r
        }\r
        else\r
        {\r
-               fsname = "FAT32";\r
+               sprintf_s(CmdBuf, sizeof(CmdBuf),\r
+                       "format-volume -DriveLetter %C -FileSystem %s -Force -NewFileSystemLabel Ventoy",\r
+                       DriveLetter, fsname);\r
        }\r
 \r
-       sprintf_s(CmdBuf, sizeof(CmdBuf),\r
-               "format-volume -DriveLetter %C -FileSystem %s -Force -NewFileSystemLabel Ventoy",\r
-               DriveLetter, fsname);\r
-\r
        ret = PSHELL_CommProc(CmdBuf);\r
        Log("PSHELL_FormatVolume %C: ret:%d (%s)", DriveLetter, ret, ret ? "SUCCESS" : "FAIL");\r
-       return ret;\r
+       if (!ret)\r
+       {\r
+               return FALSE;\r
+       }\r
+\r
+\r
+       sprintf_s(CmdBuf, sizeof(CmdBuf), "%C:\\", DriveLetter);\r
+       GetVolumeInformationA(CmdBuf, NULL, 0, NULL, NULL, NULL, FsName, sizeof(FsName));\r
+       VentoyStringToUpper(FsName);\r
+\r
+       Log("New fs name after run PSHELL:<%s>", FsName);\r
+\r
+       if (strcmp(FsName, fsname) == 0)\r
+       {\r
+               Log("PSHELL_FormatVolume <%C:> SUCCESS", DriveLetter);\r
+               return TRUE;\r
+       }\r
+       else\r
+       {\r
+               Log("PSHELL_FormatVolume <%C:> FAILED", DriveLetter);\r
+               return FALSE;\r
+       }\r
 }\r