+static BOOL VentoyIsLenovoRecovery(CHAR *IsoPath, CHAR *VTLRIPath)\r
+{\r
+ int n;\r
+ int UTF8 = 0;\r
+ HANDLE hFile;\r
+ DWORD Attr;\r
+ WCHAR FilePathW[MAX_PATH];\r
+\r
+ UTF8 = IsUTF8Encode(IsoPath);\r
+\r
+ if (UTF8)\r
+ {\r
+ Utf8ToUtf16(IsoPath, FilePathW);\r
+\r
+ n = (int)wcslen(FilePathW);\r
+ if (n > 4 && _wcsicmp(FilePathW + n - 4, L".iso") == 0)\r
+ {\r
+ FilePathW[n - 3] = L'V';\r
+ FilePathW[n - 2] = L'T';\r
+ FilePathW[n - 1] = L'L';\r
+ FilePathW[n - 0] = L'R';\r
+ FilePathW[n + 1] = L'I';\r
+ FilePathW[n + 2] = 0;\r
+\r
+ hFile = CreateFileW(FilePathW, FILE_READ_EA, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);\r
+ if (hFile != INVALID_HANDLE_VALUE)\r
+ {\r
+ CloseHandle(hFile);\r
+ Attr = GetFileAttributesW(FilePathW);\r
+\r
+ if ((Attr & FILE_ATTRIBUTE_DIRECTORY) == 0)\r
+ {\r
+ Utf16ToUtf8(FilePathW, VTLRIPath);\r
+ return TRUE;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ n = (int)strlen(IsoPath);\r
+ if (n > 4 && _stricmp(IsoPath + n - 4, ".iso") == 0)\r
+ {\r
+ IsoPath[n - 4] = 0;\r
+ sprintf_s(VTLRIPath, MAX_PATH, "%s.VTLRI", IsoPath);\r
+ IsoPath[n - 4] = '.';\r
+\r
+ if (IsFileExist(VTLRIPath))\r
+ {\r
+ return TRUE;\r
+ }\r
+ }\r
+ }\r
+ \r
+ return FALSE;\r
+}\r
+\r
+static int MountVTLRI(CHAR *ImgPath, DWORD PhyDrive)\r
+{\r
+ CHAR ImDiskPath[256];\r
+ \r
+ Log("MountVTLRI <%s> %u", ImgPath, PhyDrive);\r
+\r
+ VentoyCopyImdisk(PhyDrive, ImDiskPath);\r
+\r
+ VentoyRunImdisk(ImgPath, ImDiskPath, "rem");\r
+\r
+ return 0;\r
+}\r