Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
dadigang
Ventoy
Commits
d063dbb7
Commit
d063dbb7
authored
Jul 24, 2020
by
longpanda
Browse files
fix a bug about injection plugin in GPT partition style.
parent
89938e3c
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
119 additions
and
3 deletions
+119
-3
INSTALL/ventoy/vtoyjump32.exe
INSTALL/ventoy/vtoyjump32.exe
+0
-0
INSTALL/ventoy/vtoyjump64.exe
INSTALL/ventoy/vtoyjump64.exe
+0
-0
vtoygpt/vtoygpt.c
vtoygpt/vtoygpt.c
+1
-1
vtoyjump/vtoyjump/vtoyjump.c
vtoyjump/vtoyjump/vtoyjump.c
+51
-2
vtoyjump/vtoyjump/vtoyjump.h
vtoyjump/vtoyjump/vtoyjump.h
+67
-0
No files found.
INSTALL/ventoy/vtoyjump32.exe
View file @
d063dbb7
No preview for this file type
INSTALL/ventoy/vtoyjump64.exe
View file @
d063dbb7
No preview for this file type
vtoygpt/vtoygpt.c
View file @
d063dbb7
...
@@ -244,7 +244,7 @@ int DumpGptInfo(VTOY_GPT_INFO *pGptInfo)
...
@@ -244,7 +244,7 @@ int DumpGptInfo(VTOY_GPT_INFO *pGptInfo)
return
0
;
return
0
;
}
}
#define VENTOY_EFI_PART_ATTR 0x
C
000000000000001ULL
#define VENTOY_EFI_PART_ATTR 0x
8
000000000000001ULL
int
main
(
int
argc
,
const
char
**
argv
)
int
main
(
int
argc
,
const
char
**
argv
)
{
{
...
...
vtoyjump/vtoyjump/vtoyjump.c
View file @
d063dbb7
...
@@ -513,6 +513,55 @@ static CHAR GetMountLogicalDrive(void)
...
@@ -513,6 +513,55 @@ static CHAR GetMountLogicalDrive(void)
return
Letter
;
return
Letter
;
}
}
UINT64
GetVentoyEfiPartStartSector
(
HANDLE
hDrive
)
{
BOOL
bRet
;
DWORD
dwSize
;
MBR_HEAD
MBR
;
VTOY_GPT_INFO
*
pGpt
=
NULL
;
UINT64
StartSector
=
0
;
SetFilePointer
(
hDrive
,
0
,
NULL
,
FILE_BEGIN
);
bRet
=
ReadFile
(
hDrive
,
&
MBR
,
sizeof
(
MBR
),
&
dwSize
,
NULL
);
Log
(
"Read MBR Ret:%u Size:%u code:%u"
,
bRet
,
dwSize
,
LASTERR
);
if
((
!
bRet
)
||
(
dwSize
!=
sizeof
(
MBR
)))
{
0
;
}
if
(
MBR
.
PartTbl
[
0
].
FsFlag
==
0xEE
)
{
Log
(
"GPT partition style"
);
pGpt
=
malloc
(
sizeof
(
VTOY_GPT_INFO
));
if
(
!
pGpt
)
{
return
0
;
}
SetFilePointer
(
hDrive
,
0
,
NULL
,
FILE_BEGIN
);
bRet
=
ReadFile
(
hDrive
,
pGpt
,
sizeof
(
VTOY_GPT_INFO
),
&
dwSize
,
NULL
);
if
((
!
bRet
)
||
(
dwSize
!=
sizeof
(
VTOY_GPT_INFO
)))
{
Log
(
"Failed to read gpt info %d %u %d"
,
bRet
,
dwSize
,
LASTERR
);
return
0
;
}
StartSector
=
pGpt
->
PartTbl
[
1
].
StartLBA
;
free
(
pGpt
);
}
else
{
Log
(
"MBR partition style"
);
StartSector
=
MBR
.
PartTbl
[
1
].
StartSectorId
;
}
Log
(
"GetVentoyEfiPart StartSector: %llu"
,
StartSector
);
return
StartSector
;
}
int
VentoyMountISOByImdisk
(
const
char
*
IsoPath
,
DWORD
PhyDrive
)
int
VentoyMountISOByImdisk
(
const
char
*
IsoPath
,
DWORD
PhyDrive
)
{
{
int
rc
=
1
;
int
rc
=
1
;
...
@@ -543,7 +592,7 @@ int VentoyMountISOByImdisk(const char *IsoPath, DWORD PhyDrive)
...
@@ -543,7 +592,7 @@ int VentoyMountISOByImdisk(const char *IsoPath, DWORD PhyDrive)
}
}
g_FatPhyDrive
=
hDrive
;
g_FatPhyDrive
=
hDrive
;
g_Part2StartSec
=
(
LengthInfo
.
Length
.
QuadPart
-
VENTOY_EFI_PART_SIZE
)
/
512
;
g_Part2StartSec
=
GetVentoyEfiPartStartSector
(
hDrive
)
;
Log
(
"Parse FAT fs..."
);
Log
(
"Parse FAT fs..."
);
...
@@ -778,7 +827,7 @@ static int DecompressInjectionArchive(const char *archive, DWORD PhyDrive)
...
@@ -778,7 +827,7 @@ static int DecompressInjectionArchive(const char *archive, DWORD PhyDrive)
}
}
g_FatPhyDrive
=
hDrive
;
g_FatPhyDrive
=
hDrive
;
g_Part2StartSec
=
(
LengthInfo
.
Length
.
QuadPart
-
VENTOY_EFI_PART_SIZE
)
/
512
;
g_Part2StartSec
=
GetVentoyEfiPartStartSector
(
hDrive
)
;
Log
(
"Parse FAT fs..."
);
Log
(
"Parse FAT fs..."
);
...
...
vtoyjump/vtoyjump/vtoyjump.h
View file @
d063dbb7
...
@@ -72,6 +72,72 @@ typedef struct ventoy_windows_data
...
@@ -72,6 +72,72 @@ typedef struct ventoy_windows_data
UINT8
reserved
[
256
];
UINT8
reserved
[
256
];
}
ventoy_windows_data
;
}
ventoy_windows_data
;
typedef
struct
PART_TABLE
{
UINT8
Active
;
// 0x00 0x80
UINT8
StartHead
;
UINT16
StartSector
:
6
;
UINT16
StartCylinder
:
10
;
UINT8
FsFlag
;
UINT8
EndHead
;
UINT16
EndSector
:
6
;
UINT16
EndCylinder
:
10
;
UINT32
StartSectorId
;
UINT32
SectorCount
;
}
PART_TABLE
;
typedef
struct
MBR_HEAD
{
UINT8
BootCode
[
446
];
PART_TABLE
PartTbl
[
4
];
UINT8
Byte55
;
UINT8
ByteAA
;
}
MBR_HEAD
;
typedef
struct
VTOY_GPT_HDR
{
CHAR
Signature
[
8
];
/* EFI PART */
UINT8
Version
[
4
];
UINT32
Length
;
UINT32
Crc
;
UINT8
Reserved1
[
4
];
UINT64
EfiStartLBA
;
UINT64
EfiBackupLBA
;
UINT64
PartAreaStartLBA
;
UINT64
PartAreaEndLBA
;
GUID
DiskGuid
;
UINT64
PartTblStartLBA
;
UINT32
PartTblTotNum
;
UINT32
PartTblEntryLen
;
UINT32
PartTblCrc
;
UINT8
Reserved2
[
420
];
}
VTOY_GPT_HDR
;
typedef
struct
VTOY_GPT_PART_TBL
{
GUID
PartType
;
GUID
PartGuid
;
UINT64
StartLBA
;
UINT64
LastLBA
;
UINT64
Attr
;
UINT16
Name
[
36
];
}
VTOY_GPT_PART_TBL
;
typedef
struct
VTOY_GPT_INFO
{
MBR_HEAD
MBR
;
VTOY_GPT_HDR
Head
;
VTOY_GPT_PART_TBL
PartTbl
[
128
];
}
VTOY_GPT_INFO
;
#pragma pack()
#pragma pack()
...
@@ -84,5 +150,6 @@ typedef struct ventoy_windows_data
...
@@ -84,5 +150,6 @@ typedef struct ventoy_windows_data
}\
}\
}
}
#define LASTERR GetLastError()
#endif
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment