mirror of
https://github.com/QL-Win/QuickLook.git
synced 2025-09-12 18:39:45 +00:00
Improve PE parsing with extended buffer size
This commit is contained in:
@@ -81,15 +81,35 @@ public partial class PEInfoPanel : UserControl
|
|||||||
var size = new FileInfo(path).Length;
|
var size = new FileInfo(path).Length;
|
||||||
var arch = default(string);
|
var arch = default(string);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
int maxAttempts = 3;
|
||||||
|
int bufferSize = 1024;
|
||||||
|
|
||||||
|
for (int attempt = 0; attempt < maxAttempts; attempt++)
|
||||||
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
using var stream = new FileStream(path, FileMode.Open, FileAccess.Read);
|
using var stream = new FileStream(path, FileMode.Open, FileAccess.Read);
|
||||||
using var binaryReader = new BinaryReader(stream);
|
using var binaryReader = new BinaryReader(stream);
|
||||||
var byteArray = binaryReader.ReadBytes(1024); // Fast reading
|
var byteArray = binaryReader.ReadBytes(bufferSize);
|
||||||
var peImage = PEImage.FromBinary(byteArray);
|
var peImage = PEImage.FromBinary(byteArray);
|
||||||
var machine = peImage.CoffHeader.Machine;
|
var machine = peImage.CoffHeader.Machine;
|
||||||
|
|
||||||
arch = machine.ToImageMachineName();
|
arch = machine.ToImageMachineName();
|
||||||
|
break; // Successfully parsed, jumped out of the loop
|
||||||
|
}
|
||||||
|
catch (Exception e) when (e.Message == "Section headers incomplete.")
|
||||||
|
{
|
||||||
|
// Extended buffer size
|
||||||
|
bufferSize *= 2;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// Non-Section headers errors will not be retryed
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user