mirror of
https://github.com/SabreTools/SabreTools.Serialization.git
synced 2026-04-21 21:59:47 +00:00
Do the same for assembly manifest
This commit is contained in:
@@ -1,10 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Xml.Serialization;
|
||||
using SabreTools.Data.Models.COFF;
|
||||
using SabreTools.Data.Models.PortableExecutable;
|
||||
using SabreTools.Data.Models.PortableExecutable.Resource.Entries;
|
||||
using SabreTools.IO.Extensions;
|
||||
|
||||
#pragma warning disable IDE0017 // Simplify object initialization
|
||||
@@ -151,28 +148,6 @@ namespace SabreTools.Data.Extensions
|
||||
// TODO: Implement other resource types from https://learn.microsoft.com/en-us/windows/win32/menurc/resource-file-formats
|
||||
#region Resources
|
||||
|
||||
/// <summary>
|
||||
/// Read resource data as a side-by-side assembly manifest
|
||||
/// </summary>
|
||||
/// <param name="entry">Resource data entry to parse into a side-by-side assembly manifest</param>
|
||||
/// <returns>A filled side-by-side assembly manifest on success, null on error</returns>
|
||||
public static AssemblyManifest? AsAssemblyManifest(this Models.PortableExecutable.Resource.DataEntry? entry)
|
||||
{
|
||||
// If we have an invalid entry, just skip
|
||||
if (entry?.Data is null)
|
||||
return null;
|
||||
|
||||
try
|
||||
{
|
||||
var serializer = new XmlSerializer(typeof(AssemblyManifest));
|
||||
return serializer.Deserialize(new MemoryStream(entry.Data)) as AssemblyManifest;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Read resource data as a string table resource
|
||||
/// </summary>
|
||||
|
||||
@@ -2,6 +2,7 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Xml.Serialization;
|
||||
using SabreTools.Data.Extensions;
|
||||
using SabreTools.Data.Models.COFF;
|
||||
using SabreTools.Data.Models.COFF.SymbolTableEntries;
|
||||
@@ -521,6 +522,25 @@ namespace SabreTools.Serialization.Readers
|
||||
return obj;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parse a byte array into an AssemblyManifest
|
||||
/// </summary>
|
||||
/// <param name="data">Byte array to parse</param>
|
||||
/// <param name="offset">Offset into the byte array</param>
|
||||
/// <returns>Filled AssemblyManifest on success, null on error</returns>
|
||||
public static Data.Models.PortableExecutable.Resource.Entries.AssemblyManifest? ParseAssemblyManifest(byte[] data)
|
||||
{
|
||||
try
|
||||
{
|
||||
var serializer = new XmlSerializer(typeof(Data.Models.PortableExecutable.Resource.Entries.AssemblyManifest));
|
||||
return serializer.Deserialize(new MemoryStream(data)) as Data.Models.PortableExecutable.Resource.Entries.AssemblyManifest;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Parse a byte array into an attribute certificate table
|
||||
/// </summary>
|
||||
|
||||
@@ -1645,7 +1645,7 @@ namespace SabreTools.Serialization.Wrappers
|
||||
string padding = new(' ', (level + 1) * 2);
|
||||
|
||||
AssemblyManifest? assemblyManifest = null;
|
||||
try { assemblyManifest = entry.AsAssemblyManifest(); } catch { }
|
||||
try { assemblyManifest = Readers.PortableExecutable.ParseAssemblyManifest(entry.Data); } catch { }
|
||||
|
||||
if (assemblyManifest is null)
|
||||
{
|
||||
|
||||
@@ -1940,7 +1940,7 @@ namespace SabreTools.Serialization.Wrappers
|
||||
value = entry.Data;
|
||||
break;
|
||||
case ResourceType.RT_MANIFEST:
|
||||
_assemblyManifest = entry.AsAssemblyManifest();
|
||||
_assemblyManifest = Readers.PortableExecutable.ParseAssemblyManifest(entry.Data);
|
||||
value = _assemblyManifest;
|
||||
break;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user