Minor cleanup and additions

This commit is contained in:
Matt Nadareski
2025-10-23 16:05:12 -04:00
parent d5ab37a5a6
commit 5df1af9c17
5 changed files with 168 additions and 58 deletions

View File

@@ -1,20 +1,23 @@
namespace SabreTools.Data.Models.InstallShieldExecutable
{
public class ExtractableFile
public class FileEntry
{
/// <summary>
/// Name of the file, only ASCII characters(?)
/// Name of the file
/// </summary>
/// <remarks>May only contain ASCII (7-bit) characters</remarks>
public string? Name { get; set; }
/// <summary>
/// Path of the file, only ASCII characters(?), seems to usually use \ filepaths
/// Path of the file, seems to usually use \ filepaths
/// </summary>
public string? Path { get; set; }
/// <remarks>May only contain ASCII (7-bit) characters</remarks>
public string? Path { get; set; }
/// <summary>
/// Version of the file
/// </summary>
/// <remarks>May only contain ASCII (7-bit) characters</remarks>
public string? Version { get; set; }
/// <summary>
@@ -22,4 +25,4 @@ namespace SabreTools.Data.Models.InstallShieldExecutable
/// </summary>
public ulong Length { get; set; }
}
}
}

View File

@@ -0,0 +1,42 @@
namespace SabreTools.Data.Models.InstallShieldExecutable
{
/// <summary>
/// Represents the layout of of the overlay area of an
/// InstallShield executable.
///
/// The layout of this is derived from the layout in the
/// physical file.
/// </summary>
/// <remarks>
/// According to ISx source, there are two categories of installshield executables,
/// plain and encrypted. Encrypted has two different "types" it can be, specified by
/// a header. "InstallShield" and a newer format from 2015?-onwards called "ISSetupStream".
/// Plain executables have no central header, and each file is unencrypted. Files
/// in "InstallShield" encrypted executables have encryption applied over block sizes
/// of 1024 bytes, and files in "ISSetupStream" encrypted executables are encrypted
/// per-file. There's also something about leading data that isn't explained
/// (at least not clearly), and these encrypted executables can also additionally have
/// their files compressed with inflate.
///
/// While not stated in ISx; from experience, executables with "InstallShield" often
/// (if not always?) mainly consist of a singular, large MSI installer along with some
/// helper files, whereas plain executables often (if not always?) mainly consist of
/// regular installshield cabinets within. At the moment, this code only supports and
/// documents the plain variant. Clearer naming and separation between the types is yet
/// to come.
/// </remarks>
/// TODO: Look into making the array a dictionary
/// There is no unified header or footer that indicates a file
/// table, so having either each file entry cache the data
/// or be associated with an offset may make it more useful.
///
/// It will need to be made very apparent that the dictionary
/// does not directly represent the structure.
public class SFX
{
/// <summary>
/// Set of file entries
/// </summary>
public FileEntry[]? Entries { get; set; }
}
}