\r
#include <stdio.h>\r
\r
+#define SIZE_1GB (1024 * 1024 * 1024)\r
#define SIZE_1MB (1024 * 1024)\r
#define SIZE_2MB (2048 * 1024)\r
#define VENTOY_EFI_PART_SIZE (32 * SIZE_1MB)\r
#define safe_sprintf(dst, fmt, ...) sprintf_s(dst, sizeof(dst), fmt, __VA_ARGS__)\r
#define safe_strcpy(dst, src) strcpy_s(dst, sizeof(dst), src)\r
\r
+#define CHECK_FREE(p) \\r
+{\\r
+ if (p)\\r
+ {\\r
+ free(p); \\r
+ (p) = NULL; \\r
+ }\\r
+}\r
+\r
#define CHECK_CLOSE_HANDLE(Handle) \\r
{\\r
if (Handle != INVALID_HANDLE_VALUE) \\r
}\r
\r
#define LASTERR GetLastError()\r
+#define RET_LASTERR (ret ? 0 : LASTERR)\r
\r
#pragma pack(1)\r
typedef struct PART_TABLE\r
\r
BOOL SecureBootSupport;\r
MBR_HEAD MBR;\r
+ UINT64 Part2GPTAttr;\r
+\r
+ BOOL ResizeNoShrink;\r
+ UINT64 ResizeOldPart1Size;\r
+ CHAR Part1DriveLetter;\r
+ CHAR ResizeVolumeGuid[64];\r
+ CHAR FsName[64];\r
+ UINT64 ResizePart2StartSector;\r
+ VTOY_GPT_INFO Gpt;\r
+\r
}PHY_DRIVE_INFO;\r
\r
typedef enum PROGRESS_POINT\r
{\r
PT_START = 0,\r
- PT_LOCK_FOR_CLEAN,\r
+ PT_LOCK_FOR_CLEAN = 8,\r
PT_DEL_ALL_PART,\r
PT_LOCK_FOR_WRITE,\r
PT_FORMAT_PART1,\r
extern HFONT g_language_bold_font;\r
extern int g_FilterUSB;\r
\r
+\r
+\r
+void TraceOut(const char *Fmt, ...);\r
void Log(const char *Fmt, ...);\r
BOOL IsPathExist(BOOL Dir, const char *Fmt, ...);\r
void DumpWindowsVersion(void);\r
int GetRegDwordValue(HKEY Key, LPCSTR SubKey, LPCSTR ValueName, DWORD *pValue);\r
int GetPhysicalDriveCount(void);\r
int GetAllPhysicalDriveInfo(PHY_DRIVE_INFO *pDriveList, DWORD *pDriveCount);\r
-int GetPhyDriveByLogicalDrive(int DriveLetter);\r
+int GetPhyDriveByLogicalDrive(int DriveLetter, UINT64*Offset);\r
int GetVentoyVerInPhyDrive(const PHY_DRIVE_INFO *pDriveInfo, UINT64 Part2StartSector, CHAR *VerBuf, size_t BufLen, BOOL *pSecureBoot);\r
int Ventoy2DiskInit(void);\r
int Ventoy2DiskDestroy(void);\r
PHY_DRIVE_INFO * GetPhyDriveInfoById(int Id);\r
+PHY_DRIVE_INFO * GetPhyDriveInfoByPhyDrive(int PhyDrive);\r
int ParseCmdLineOption(LPSTR lpCmdLine);\r
-int InstallVentoy2PhyDrive(PHY_DRIVE_INFO *pPhyDrive, int PartStyle);\r
-int UpdateVentoy2PhyDrive(PHY_DRIVE_INFO *pPhyDrive);\r
+int InstallVentoy2PhyDrive(PHY_DRIVE_INFO *pPhyDrive, int PartStyle, int TryId);\r
+int PartitionResizeForVentoy(PHY_DRIVE_INFO *pPhyDrive);\r
+int UpdateVentoy2PhyDrive(PHY_DRIVE_INFO *pPhyDrive, int TryId);\r
int VentoyFillBackupGptHead(VTOY_GPT_INFO *pInfo, VTOY_GPT_HDR *pHead);\r
int VentoyFillWholeGpt(UINT64 DiskSizeBytes, VTOY_GPT_INFO *pInfo);\r
void SetProgressBarPos(int Pos);\r
+int SaveBufToFile(const CHAR *FileName, const void *Buffer, int BufLen);\r
int ReadWholeFileToBuf(const CHAR *FileName, int ExtLen, void **Bufer, int *BufLen);\r
int INIT unxz(unsigned char *in, int in_size,\r
int(*fill)(void *dest, unsigned int size),\r
int VentoyFillMBRLocation(UINT64 DiskSizeInBytes, UINT32 StartSectorId, UINT32 SectorCount, PART_TABLE *Table);\r
int ClearVentoyFromPhyDrive(HWND hWnd, PHY_DRIVE_INFO *pPhyDrive, char *pDrvLetter);\r
UINT32 VentoyCrc32(void *Buffer, UINT32 Length);\r
+BOOL PartResizePreCheck(PHY_DRIVE_INFO** ppPhyDrive);\r
\r
#define SET_FILE_POS(pos) \\r
liCurrentPosition.QuadPart = pos; \\r
\r
#define SECURE_ICON_STRING _UICON(UNICODE_LOCK)\r
\r
+extern int g_WriteImage;\r
+\r
+#define VTSI_IMG_MAGIC 0x0000594F544E4556ULL // "VENTOY\0\0"\r
+\r
+#pragma pack(1)\r
+\r
+/*\r
+ +---------------------------------\r
+ + sector 0 ~ sector N-1\r
+ + data area\r
+ +---------------------------------\r
+ + sector N ~ \r
+ + segment[0]\r
+ + segment[1]\r
+ + segment[2]\r
+ + ......\r
+ + segment[M-1]\r
+ + align data (aligned with 512)\r
+ +---------------------------------\r
+ + footer\r
+ +---------------------------------\r
+ *\r
+ * All the integers are in little endian\r
+ * The sector size is fixed 512 for ventoy image file.\r
+ *\r
+ */\r
+\r
+#define VTSI_IMG_MAX_SEG 128\r
+\r
+typedef struct {\r
+ UINT64 disk_start_sector;\r
+ UINT64 sector_num;\r
+ UINT64 data_offset;\r
+}VTSI_SEGMENT;\r
+\r
+typedef struct {\r
+ UINT64 magic;\r
+ UINT32 version;\r
+ UINT64 disk_size;\r
+ UINT32 disk_signature;\r
+ UINT32 foot_chksum;\r
+\r
+ UINT32 segment_num;\r
+ UINT32 segment_chksum;\r
+ UINT64 segment_offset;\r
+\r
+ UINT8 reserved[512 - 44];\r
+}VTSI_FOOTER;\r
+#pragma pack()\r
+extern int __static_assert__[sizeof(VTSI_FOOTER) == 512 ? 1 : -1];\r
+\r
+extern HWND g_DialogHwnd;\r
+\r
+#define SAFE_FREE(ptr) if (ptr) { free(ptr); (ptr) = NULL; }\r
+int InstallVentoy2FileImage(PHY_DRIVE_INFO *pPhyDrive, int PartStyle);\r
+void disk_io_set_imghook(FILE *fp, VTSI_SEGMENT *segment, int maxseg, UINT64 data_offset);\r
+void disk_io_reset_imghook(int *psegnum, UINT64 *pDataOffset);\r
+\r
+HANDLE GetPhysicalHandle(int Drive, BOOLEAN bLockDrive, BOOLEAN bWriteAccess, BOOLEAN bWriteShare);\r
+void InitComboxCtrl(HWND hWnd, int PhyDrive);\r
+int disk_io_is_write_error(void);\r
+void disk_io_reset_write_error(void);\r
+const char* GUID2String(void* guid, char* buf, int len);\r
+\r
+#define VTSI_SUPPORT 1\r
+\r
+\r
#endif\r