diff --git a/SabreTools.Serialization.Test/SabreTools.Serialization.Test.csproj b/SabreTools.Serialization.Test/SabreTools.Serialization.Test.csproj index 5747edc0..62f4cc84 100644 --- a/SabreTools.Serialization.Test/SabreTools.Serialization.Test.csproj +++ b/SabreTools.Serialization.Test/SabreTools.Serialization.Test.csproj @@ -27,7 +27,7 @@ all - + runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/SabreTools.Serialization/Deserializers/InstallShieldCabinet.cs b/SabreTools.Serialization/Deserializers/InstallShieldCabinet.cs index 5b051c60..e6d5cb0b 100644 --- a/SabreTools.Serialization/Deserializers/InstallShieldCabinet.cs +++ b/SabreTools.Serialization/Deserializers/InstallShieldCabinet.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.IO; using SabreTools.IO.Extensions; @@ -446,19 +447,10 @@ namespace SabreTools.Serialization.Deserializers { var fileGroup = new FileGroup(); - // Reserved0 has been determined to be invalid. - // This change needs to be made at the model level - // and then propigated up to here for proper support - fileGroup.NameOffset = data.ReadUInt32(); - fileGroup.ExpandedSize = data.ReadUInt32(); - //fileGroup.Reserved0 = data.ReadBytes(4); fileGroup.CompressedSize = data.ReadUInt32(); - fileGroup.Reserved1 = data.ReadBytes(4); - fileGroup.Reserved2 = data.ReadBytes(2); - fileGroup.Attribute1 = data.ReadUInt16(); - fileGroup.Attribute2 = data.ReadUInt16(); + fileGroup.Attributes = (FileGroupAttributes)data.ReadUInt16(); // TODO: Figure out what data lives in this area for V5 and below if (majorVersion <= 5) @@ -466,19 +458,19 @@ namespace SabreTools.Serialization.Deserializers fileGroup.FirstFile = data.ReadUInt32(); fileGroup.LastFile = data.ReadUInt32(); - fileGroup.UnknownOffset = data.ReadUInt32(); - fileGroup.Var4Offset = data.ReadUInt32(); - fileGroup.Var1Offset = data.ReadUInt32(); + fileGroup.UnknownStringOffset = data.ReadUInt32(); + fileGroup.OperatingSystemOffset = data.ReadUInt32(); + fileGroup.LanguageOffset = data.ReadUInt32(); fileGroup.HTTPLocationOffset = data.ReadUInt32(); fileGroup.FTPLocationOffset = data.ReadUInt32(); fileGroup.MiscOffset = data.ReadUInt32(); - fileGroup.Var2Offset = data.ReadUInt32(); fileGroup.TargetDirectoryOffset = data.ReadUInt32(); - fileGroup.Reserved3 = data.ReadBytes(2); - fileGroup.Reserved4 = data.ReadBytes(2); - fileGroup.Reserved5 = data.ReadBytes(2); - fileGroup.Reserved6 = data.ReadBytes(2); - fileGroup.Reserved7 = data.ReadBytes(2); + fileGroup.OverwriteFlags = (FileGroupFlags)data.ReadUInt32(); + fileGroup.Reserved = new uint[4]; + for (int i = 0; i < fileGroup.Reserved.Length; i++) + { + fileGroup.Reserved[i] = data.ReadUInt32(); + } // Cache the current position long currentPosition = data.Position; @@ -516,15 +508,19 @@ namespace SabreTools.Serialization.Deserializers component.IdentifierOffset = data.ReadUInt32(); component.DescriptorOffset = data.ReadUInt32(); component.DisplayNameOffset = data.ReadUInt32(); - component.Reserved0 = data.ReadUInt16(); - component.ReservedOffset0 = data.ReadUInt32(); - component.ReservedOffset1 = data.ReadUInt32(); + component.Status = (ComponentStatus)data.ReadUInt16(); + component.PasswordOffset = data.ReadUInt32(); + component.MiscOffset = data.ReadUInt32(); component.ComponentIndex = data.ReadUInt16(); component.NameOffset = data.ReadUInt32(); - component.ReservedOffset2 = data.ReadUInt32(); - component.ReservedOffset3 = data.ReadUInt32(); - component.ReservedOffset4 = data.ReadUInt32(); - component.Reserved1 = data.ReadBytes(32); + component.CDRomFolderOffset = data.ReadUInt32(); + component.HTTPLocationOffset = data.ReadUInt32(); + component.FTPLocationOffset = data.ReadUInt32(); + component.Guid = new Guid[2]; + for (int i = 0; i < component.Guid.Length; i++) + { + component.Guid[i] = data.ReadGuid(); + } component.CLSIDOffset = data.ReadUInt32(); component.Reserved2 = data.ReadBytes(28); component.Reserved3 = data.ReadBytes(majorVersion <= 5 ? 2 : 1); @@ -537,10 +533,10 @@ namespace SabreTools.Serialization.Deserializers component.SubComponentsCount = data.ReadUInt16(); component.SubComponentsOffset = data.ReadUInt32(); component.NextComponentOffset = data.ReadUInt32(); - component.ReservedOffset5 = data.ReadUInt32(); - component.ReservedOffset6 = data.ReadUInt32(); - component.ReservedOffset7 = data.ReadUInt32(); - component.ReservedOffset8 = data.ReadUInt32(); + component.OnInstallingOffset = data.ReadUInt32(); + component.OnInstalledOffset = data.ReadUInt32(); + component.OnUninstallingOffset = data.ReadUInt32(); + component.OnUninstalledOffset = data.ReadUInt32(); // Cache the current position long currentPosition = data.Position; diff --git a/SabreTools.Serialization/Printers/InstallShieldCabinet.cs b/SabreTools.Serialization/Printers/InstallShieldCabinet.cs index ac133590..86b16886 100644 --- a/SabreTools.Serialization/Printers/InstallShieldCabinet.cs +++ b/SabreTools.Serialization/Printers/InstallShieldCabinet.cs @@ -315,27 +315,19 @@ namespace SabreTools.Serialization.Printers builder.AppendLine(fileGroup.NameOffset, " Name offset"); builder.AppendLine(fileGroup.Name, " Name"); builder.AppendLine(fileGroup.ExpandedSize, " Expanded size"); - builder.AppendLine(fileGroup.Reserved0, " Reserved 0"); builder.AppendLine(fileGroup.CompressedSize, " Compressed size"); - builder.AppendLine(fileGroup.Reserved1, " Reserved 1"); - builder.AppendLine(fileGroup.Reserved2, " Reserved 2"); - builder.AppendLine(fileGroup.Attribute1, " Attribute 1"); - builder.AppendLine(fileGroup.Attribute2, " Attribute 2"); + builder.AppendLine($" Attributes: {fileGroup.Attributes} (0x{fileGroup.Attributes:X})"); builder.AppendLine(fileGroup.FirstFile, " First file"); builder.AppendLine(fileGroup.LastFile, " Last file"); - builder.AppendLine(fileGroup.UnknownOffset, " Unknown offset"); - builder.AppendLine(fileGroup.Var4Offset, " Var 4 offset"); - builder.AppendLine(fileGroup.Var1Offset, " Var 1 offset"); + builder.AppendLine(fileGroup.UnknownStringOffset, " Unknown string offset"); + builder.AppendLine(fileGroup.OperatingSystemOffset, " Operating system offset"); + builder.AppendLine(fileGroup.LanguageOffset, " Language offset"); builder.AppendLine(fileGroup.HTTPLocationOffset, " HTTP location offset"); builder.AppendLine(fileGroup.FTPLocationOffset, " FTP location offset"); builder.AppendLine(fileGroup.MiscOffset, " Misc. offset"); - builder.AppendLine(fileGroup.Var2Offset, " Var 2 offset"); builder.AppendLine(fileGroup.TargetDirectoryOffset, " Target directory offset"); - builder.AppendLine(fileGroup.Reserved3, " Reserved 3"); - builder.AppendLine(fileGroup.Reserved4, " Reserved 4"); - builder.AppendLine(fileGroup.Reserved5, " Reserved 5"); - builder.AppendLine(fileGroup.Reserved6, " Reserved 6"); - builder.AppendLine(fileGroup.Reserved7, " Reserved 7"); + builder.AppendLine($" Overwrite flags: {fileGroup.OverwriteFlags} (0x{fileGroup.OverwriteFlags:X})"); + builder.AppendLine(fileGroup.Reserved, " Reserved"); } builder.AppendLine(); } @@ -366,16 +358,16 @@ namespace SabreTools.Serialization.Printers builder.AppendLine(component.DescriptorOffset, " Descriptor offset"); builder.AppendLine(component.DisplayNameOffset, " Display name offset"); builder.AppendLine(component.DisplayName, " Display name"); - builder.AppendLine(component.Reserved0, " Reserved 0"); - builder.AppendLine(component.ReservedOffset0, " Reserved offset 0"); - builder.AppendLine(component.ReservedOffset1, " Reserved offset 1"); + builder.AppendLine($" Status: {component.Status} (0x{component.Status:X})"); + builder.AppendLine(component.PasswordOffset, " Password offset"); + builder.AppendLine(component.MiscOffset, " Misc. offset"); builder.AppendLine(component.ComponentIndex, " Component index"); builder.AppendLine(component.NameOffset, " Name offset"); builder.AppendLine(component.Name, " Name"); - builder.AppendLine(component.ReservedOffset2, " Reserved offset 2"); - builder.AppendLine(component.ReservedOffset3, " Reserved offset 3"); - builder.AppendLine(component.ReservedOffset4, " Reserved offset 4"); - builder.AppendLine(component.Reserved1, " Reserved 1"); + builder.AppendLine(component.CDRomFolderOffset, " CD-ROM folder offset"); + builder.AppendLine(component.HTTPLocationOffset, " HTTP location offset"); + builder.AppendLine(component.FTPLocationOffset, " FTP location offset"); + builder.AppendLine(component.Guid, " GUIDs"); builder.AppendLine(component.CLSIDOffset, " CLSID offset"); builder.AppendLine(component.CLSID, " CLSID"); builder.AppendLine(component.Reserved2, " Reserved 2"); @@ -406,10 +398,10 @@ namespace SabreTools.Serialization.Printers builder.AppendLine(component.SubComponentsCount, " Sub-components count"); builder.AppendLine(component.SubComponentsOffset, " Sub-components offset"); builder.AppendLine(component.NextComponentOffset, " Next component offset"); - builder.AppendLine(component.ReservedOffset5, " Reserved offset 5"); - builder.AppendLine(component.ReservedOffset6, " Reserved offset 6"); - builder.AppendLine(component.ReservedOffset7, " Reserved offset 7"); - builder.AppendLine(component.ReservedOffset8, " Reserved offset 8"); + builder.AppendLine(component.OnInstallingOffset, " On installing offset"); + builder.AppendLine(component.OnInstalledOffset, " On installed offset"); + builder.AppendLine(component.OnUninstallingOffset, " On uninstalling offset"); + builder.AppendLine(component.OnUninstalledOffset, " On uninstalled offset"); } builder.AppendLine(); } diff --git a/SabreTools.Serialization/SabreTools.Serialization.csproj b/SabreTools.Serialization/SabreTools.Serialization.csproj index 8b2de6dc..484ffa7f 100644 --- a/SabreTools.Serialization/SabreTools.Serialization.csproj +++ b/SabreTools.Serialization/SabreTools.Serialization.csproj @@ -47,7 +47,7 @@ - + diff --git a/SabreTools.Serialization/StringBuilderExtensions.cs b/SabreTools.Serialization/StringBuilderExtensions.cs index 094d14aa..77c93a9f 100644 --- a/SabreTools.Serialization/StringBuilderExtensions.cs +++ b/SabreTools.Serialization/StringBuilderExtensions.cs @@ -204,5 +204,14 @@ namespace SabreTools.Serialization string valueString = (value == null ? "[NULL]" : string.Join(", ", value.Select(u => u.ToString()).ToArray())); return sb.AppendLine($"{prefixString}: {valueString}"); } + + /// + /// Append a line containing a UInt64[] value to a StringBuilder + /// + public static StringBuilder AppendLine(this StringBuilder sb, Guid[]? value, string prefixString) + { + string valueString = (value == null ? "[NULL]" : string.Join(", ", value.Select(g => g.ToString()).ToArray())); + return sb.AppendLine($"{prefixString}: {valueString}"); + } } } \ No newline at end of file