X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/Ventoy.git/blobdiff_plain/d8433985e72462bd5c64c698e5252038eb2f6ce4..ee04af5243582c91442097c481e47ae47c05a03e:/Ventoy2Disk/Ventoy2Disk/Ventoy2Disk.h diff --git a/Ventoy2Disk/Ventoy2Disk/Ventoy2Disk.h b/Ventoy2Disk/Ventoy2Disk/Ventoy2Disk.h index 72c9a36..8ba3d49 100644 --- a/Ventoy2Disk/Ventoy2Disk/Ventoy2Disk.h +++ b/Ventoy2Disk/Ventoy2Disk/Ventoy2Disk.h @@ -23,6 +23,20 @@ #include +typedef enum VTOY_FS +{ + VTOY_FS_EXFAT = 0, + VTOY_FS_NTFS, + VTOY_FS_FAT32, + VTOY_FS_UDF, + VTOY_FS_BUTT +}VTOY_FS; + +#define FAT32_MAX_LIMIT (32 * 1073741824ULL) + +#define SIZE_1KB (1024) +#define SIZE_1GB (1024 * 1024 * 1024) +#define SIZE_1TB (1024ULL * 1024ULL * 1024ULL * 1024ULL) #define SIZE_1MB (1024 * 1024) #define SIZE_2MB (2048 * 1024) #define VENTOY_EFI_PART_SIZE (32 * SIZE_1MB) @@ -43,6 +57,15 @@ #define safe_sprintf(dst, fmt, ...) sprintf_s(dst, sizeof(dst), fmt, __VA_ARGS__) #define safe_strcpy(dst, src) strcpy_s(dst, sizeof(dst), src) +#define CHECK_FREE(p) \ +{\ + if (p)\ + {\ + free(p); \ + (p) = NULL; \ + }\ +} + #define CHECK_CLOSE_HANDLE(Handle) \ {\ if (Handle != INVALID_HANDLE_VALUE) \ @@ -53,6 +76,7 @@ } #define LASTERR GetLastError() +#define RET_LASTERR (ret ? 0 : LASTERR) #pragma pack(1) typedef struct PART_TABLE @@ -148,17 +172,29 @@ typedef struct PHY_DRIVE_INFO STORAGE_BUS_TYPE BusType; CHAR DriveLetters[64]; - + + int VentoyFsClusterSize; + CHAR VentoyFsType[16]; CHAR VentoyVersion[32]; BOOL SecureBootSupport; MBR_HEAD MBR; + UINT64 Part2GPTAttr; + + BOOL ResizeNoShrink; + UINT64 ResizeOldPart1Size; + CHAR Part1DriveLetter; + CHAR ResizeVolumeGuid[64]; + CHAR FsName[64]; + UINT64 ResizePart2StartSector; + VTOY_GPT_INFO Gpt; + }PHY_DRIVE_INFO; typedef enum PROGRESS_POINT { PT_START = 0, - PT_LOCK_FOR_CLEAN, + PT_LOCK_FOR_CLEAN = 8, PT_DEL_ALL_PART, PT_LOCK_FOR_WRITE, PT_FORMAT_PART1, @@ -172,6 +208,9 @@ typedef enum PROGRESS_POINT PT_WRITE_PART_TABLE, PT_MOUNT_VOLUME, + PT_REFORMAT_START, + PT_REFORMAT_FINISH = PT_REFORMAT_START + 2, + PT_FINISH }PROGRESS_POINT; @@ -180,11 +219,15 @@ typedef enum PROGRESS_POINT extern PHY_DRIVE_INFO *g_PhyDriveList; extern DWORD g_PhyDriveCount; extern int g_ForceOperation; +extern int g_NoNeedInputYes; extern HWND g_ProgressBarHwnd; extern HFONT g_language_normal_font; extern HFONT g_language_bold_font; extern int g_FilterUSB; + + +void TraceOut(const char *Fmt, ...); void Log(const char *Fmt, ...); BOOL IsPathExist(BOOL Dir, const char *Fmt, ...); void DumpWindowsVersion(void); @@ -201,17 +244,20 @@ BOOL IsVentoyLogicalDrive(CHAR DriveLetter); int GetRegDwordValue(HKEY Key, LPCSTR SubKey, LPCSTR ValueName, DWORD *pValue); int GetPhysicalDriveCount(void); int GetAllPhysicalDriveInfo(PHY_DRIVE_INFO *pDriveList, DWORD *pDriveCount); -int GetPhyDriveByLogicalDrive(int DriveLetter); +int GetPhyDriveByLogicalDrive(int DriveLetter, UINT64*Offset); int GetVentoyVerInPhyDrive(const PHY_DRIVE_INFO *pDriveInfo, UINT64 Part2StartSector, CHAR *VerBuf, size_t BufLen, BOOL *pSecureBoot); int Ventoy2DiskInit(void); int Ventoy2DiskDestroy(void); PHY_DRIVE_INFO * GetPhyDriveInfoById(int Id); +PHY_DRIVE_INFO * GetPhyDriveInfoByPhyDrive(int PhyDrive); int ParseCmdLineOption(LPSTR lpCmdLine); -int InstallVentoy2PhyDrive(PHY_DRIVE_INFO *pPhyDrive, int PartStyle); -int UpdateVentoy2PhyDrive(PHY_DRIVE_INFO *pPhyDrive); +int InstallVentoy2PhyDrive(PHY_DRIVE_INFO *pPhyDrive, int PartStyle, int TryId); +int PartitionResizeForVentoy(PHY_DRIVE_INFO *pPhyDrive); +int UpdateVentoy2PhyDrive(PHY_DRIVE_INFO *pPhyDrive, int TryId); int VentoyFillBackupGptHead(VTOY_GPT_INFO *pInfo, VTOY_GPT_HDR *pHead); int VentoyFillWholeGpt(UINT64 DiskSizeBytes, VTOY_GPT_INFO *pInfo); void SetProgressBarPos(int Pos); +int SaveBufToFile(const CHAR *FileName, const void *Buffer, int BufLen); int ReadWholeFileToBuf(const CHAR *FileName, int ExtLen, void **Bufer, int *BufLen); int INIT unxz(unsigned char *in, int in_size, int(*fill)(void *dest, unsigned int size), @@ -219,20 +265,33 @@ int INIT unxz(unsigned char *in, int in_size, unsigned char *out, int *in_used, void(*error)(char *x)); void disk_io_set_param(HANDLE Handle, UINT64 SectorCount); +int GetVolumeClusterSize(char Drive); + +extern BOOL g_InputYes; +INT_PTR CALLBACK YesDialogProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam); INT_PTR CALLBACK PartDialogProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam); int GetReservedSpaceInMB(void); int IsPartNeed4KBAlign(void); +int GetVentoyFsType(void); +void SetVentoyFsType(int fs); +int GetClusterSize(void); +void SetClusterSize(int ClusterSize); +WCHAR* GetClusterSizeTip(void); +void FormatClusterSizeTip(int Size, WCHAR* pBuf, size_t len); +const char* GetVentoyFsName(void); +const char* GetVentoyFsNameByType(int fs); +CHAR* GetVentoyFsFmtNameByTypeA(int fs); +WCHAR* GetVentoyFsFmtNameByTypeW(int fs); int FindProcessOccupyDisk(HANDLE hDrive, PHY_DRIVE_INFO *pPhyDrive); int VentoyFillMBRLocation(UINT64 DiskSizeInBytes, UINT32 StartSectorId, UINT32 SectorCount, PART_TABLE *Table); int ClearVentoyFromPhyDrive(HWND hWnd, PHY_DRIVE_INFO *pPhyDrive, char *pDrvLetter); UINT32 VentoyCrc32(void *Buffer, UINT32 Length); +BOOL PartResizePreCheck(PHY_DRIVE_INFO** ppPhyDrive); #define SET_FILE_POS(pos) \ liCurrentPosition.QuadPart = pos; \ SetFilePointerEx(hDrive, liCurrentPosition, &liCurrentPosition, FILE_BEGIN)\ -#define SECURE_ICON_STRING _UICON(UNICODE_LOCK) - extern int g_WriteImage; #define VTSI_IMG_MAGIC 0x0000594F544E4556ULL // "VENTOY\0\0" @@ -284,12 +343,18 @@ typedef struct { #pragma pack() extern int __static_assert__[sizeof(VTSI_FOOTER) == 512 ? 1 : -1]; +extern HWND g_DialogHwnd; #define SAFE_FREE(ptr) if (ptr) { free(ptr); (ptr) = NULL; } int InstallVentoy2FileImage(PHY_DRIVE_INFO *pPhyDrive, int PartStyle); void disk_io_set_imghook(FILE *fp, VTSI_SEGMENT *segment, int maxseg, UINT64 data_offset); void disk_io_reset_imghook(int *psegnum, UINT64 *pDataOffset); +HANDLE GetPhysicalHandle(int Drive, BOOLEAN bLockDrive, BOOLEAN bWriteAccess, BOOLEAN bWriteShare); +void InitComboxCtrl(HWND hWnd, int PhyDrive); +int disk_io_is_write_error(void); +void disk_io_reset_write_error(void); +const char* GUID2String(void* guid, char* buf, int len); #define VTSI_SUPPORT 1