]> 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 d99e5ac10eb260407b7937ec1a8c11876eb58e00..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
@@ -255,3 +249,51 @@ BOOL PSHELL_ShrinkVolume(int DriveIndex, const char* VolumeGuid, CHAR DriveLette
        Log("PSHELL_ShrinkVolume<%d> %C: ret:%d (%s)", DriveIndex, DriveLetter, ret, ret ? "SUCCESS" : "FAIL");\r
        return ret;\r
 }\r
+\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 (ClusterSize > 0)\r
+       {\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
+               sprintf_s(CmdBuf, sizeof(CmdBuf),\r
+                       "format-volume -DriveLetter %C -FileSystem %s -Force -NewFileSystemLabel Ventoy",\r
+                       DriveLetter, fsname);\r
+       }\r
+\r
+       ret = PSHELL_CommProc(CmdBuf);\r
+       Log("PSHELL_FormatVolume %C: ret:%d (%s)", DriveLetter, ret, ret ? "SUCCESS" : "FAIL");\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