]> glassweightruler.freedombox.rocks Git - Ventoy.git/blob - vtoyjump/vtoyjump/vtoyjump.h
768d7cc29f012e09c32e148e463868cff862cdbc
[Ventoy.git] / vtoyjump / vtoyjump / vtoyjump.h
1 /******************************************************************************
2 * vtoyjump.h
3 *
4 * Copyright (c) 2020, longpanda <admin@ventoy.net>
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; either version 3 of the
9 * License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, see <http://www.gnu.org/licenses/>.
18 *
19 */
20 #ifndef __VTOYJUMP_H__
21 #define __VTOYJUMP_H__
22
23 #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
24
25 #define SIZE_1MB (1024 * 1024)
26 #define VENTOY_EFI_PART_SIZE (32 * SIZE_1MB)
27
28 #define VENTOY_GUID { 0x77772020, 0x2e77, 0x6576, { 0x6e, 0x74, 0x6f, 0x79, 0x2e, 0x6e, 0x65, 0x74 }}
29
30 #pragma pack(1)
31
32 typedef struct ventoy_guid
33 {
34 UINT32 data1;
35 UINT16 data2;
36 UINT16 data3;
37 UINT8 data4[8];
38 }ventoy_guid;
39
40
41 typedef struct ventoy_os_param
42 {
43 ventoy_guid guid; // VENTOY_GUID
44 UINT8 chksum; // checksum
45
46 UINT8 vtoy_disk_guid[16];
47 UINT64 vtoy_disk_size; // disk size in bytes
48 UINT16 vtoy_disk_part_id; // begin with 1
49 UINT16 vtoy_disk_part_type; // 0:exfat 1:ntfs other: reserved
50 char vtoy_img_path[384]; // It seems to be enough, utf-8 format
51 UINT64 vtoy_img_size; // image file size in bytes
52
53 /*
54 * Ventoy will write a copy of ventoy_image_location data into runtime memory
55 * this is the physically address and length of that memory.
56 * Address 0 means no such data exist.
57 * Address will be aligned by 4KB.
58 *
59 */
60 UINT64 vtoy_img_location_addr;
61 UINT32 vtoy_img_location_len;
62
63 UINT64 vtoy_reserved[4]; // Internal use by ventoy
64
65 UINT8 vtoy_disk_signature[4];
66
67 UINT8 reserved[27];
68 }ventoy_os_param;
69
70 typedef struct ventoy_windows_data
71 {
72 char auto_install_script[384];
73 char injection_archive[384];
74 UINT8 windows11_bypass_check;
75
76 UINT32 auto_install_len;
77
78 UINT8 reserved[255 - 4];
79
80 /* auto install script file data ... + auto_install_len */
81 /* ...... */
82
83
84 }ventoy_windows_data;
85
86
87
88 typedef struct PART_TABLE
89 {
90 UINT8 Active; // 0x00 0x80
91
92 UINT8 StartHead;
93 UINT16 StartSector : 6;
94 UINT16 StartCylinder : 10;
95
96 UINT8 FsFlag;
97
98 UINT8 EndHead;
99 UINT16 EndSector : 6;
100 UINT16 EndCylinder : 10;
101
102 UINT32 StartSectorId;
103 UINT32 SectorCount;
104 }PART_TABLE;
105
106 typedef struct MBR_HEAD
107 {
108 UINT8 BootCode[446];
109 PART_TABLE PartTbl[4];
110 UINT8 Byte55;
111 UINT8 ByteAA;
112 }MBR_HEAD;
113
114 typedef struct VTOY_GPT_HDR
115 {
116 CHAR Signature[8]; /* EFI PART */
117 UINT8 Version[4];
118 UINT32 Length;
119 UINT32 Crc;
120 UINT8 Reserved1[4];
121 UINT64 EfiStartLBA;
122 UINT64 EfiBackupLBA;
123 UINT64 PartAreaStartLBA;
124 UINT64 PartAreaEndLBA;
125 GUID DiskGuid;
126 UINT64 PartTblStartLBA;
127 UINT32 PartTblTotNum;
128 UINT32 PartTblEntryLen;
129 UINT32 PartTblCrc;
130 UINT8 Reserved2[420];
131 }VTOY_GPT_HDR;
132
133 typedef struct VTOY_GPT_PART_TBL
134 {
135 GUID PartType;
136 GUID PartGuid;
137 UINT64 StartLBA;
138 UINT64 LastLBA;
139 UINT64 Attr;
140 UINT16 Name[36];
141 }VTOY_GPT_PART_TBL;
142
143 typedef struct VTOY_GPT_INFO
144 {
145 MBR_HEAD MBR;
146 VTOY_GPT_HDR Head;
147 VTOY_GPT_PART_TBL PartTbl[128];
148 }VTOY_GPT_INFO;
149
150
151
152 #pragma pack()
153
154
155 typedef struct VarDiskInfo
156 {
157 UINT64 Capacity;
158 int BusType;
159 BOOL RemovableMedia;
160 BYTE DeviceType;
161 CHAR VendorId[128];
162 CHAR ProductId[128];
163 CHAR ProductRev[128];
164 CHAR SerialNumber[128];
165 }VarDiskInfo;
166
167 typedef struct IsoId
168 {
169 CHAR SystemId[64];
170 CHAR VolumeId[64];
171 CHAR PulisherId[256];
172 CHAR PreparerId[256];
173 }IsoId;
174
175 #define SAFE_CLOSE_HANDLE(handle) \
176 {\
177 if (handle != INVALID_HANDLE_VALUE) \
178 {\
179 CloseHandle(handle); \
180 (handle) = INVALID_HANDLE_VALUE; \
181 }\
182 }
183
184 #define safe_sprintf(dst, fmt, ...) sprintf_s(dst, sizeof(dst), fmt, __VA_ARGS__)
185 #define safe_strcpy(dst, src) strcpy_s(dst, sizeof(dst), src)
186
187
188 #define LASTERR GetLastError()
189
190 int unxz(unsigned char *in, int in_size,
191 int(*fill)(void *dest, unsigned int size),
192 int(*flush)(void *src, unsigned int size),
193 unsigned char *out, int *in_used,
194 void(*error)(char *x));
195
196
197 #endif