From 5c3e8c35c41af0f5501ee72f56ca70ace51359be Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Wed, 9 Nov 2022 12:05:30 -0800 Subject: [PATCH] Add PE accelerator table --- BurnOutSharp.Builder/Extensions.cs | 6 +++--- ...ryResource.cs => AcceleratorTableEntry.cs} | 2 +- .../AcceleratorTableResource.cs | 20 +++++++++++++++++++ 3 files changed, 24 insertions(+), 4 deletions(-) rename BurnOutSharp.Models/PortableExecutable/{AcceleratorTableEntryResource.cs => AcceleratorTableEntry.cs} (96%) create mode 100644 BurnOutSharp.Models/PortableExecutable/AcceleratorTableResource.cs diff --git a/BurnOutSharp.Builder/Extensions.cs b/BurnOutSharp.Builder/Extensions.cs index 374666b0..0e87f1b4 100644 --- a/BurnOutSharp.Builder/Extensions.cs +++ b/BurnOutSharp.Builder/Extensions.cs @@ -394,7 +394,7 @@ namespace BurnOutSharp.Builder /// Data to parse into an accelerator table resource /// Offset into the byte array /// A filled accelerator table resource on success, null on error - public static Models.PortableExecutable.AcceleratorTableEntryResource[] AsAcceleratorTableResource(this byte[] data, ref int offset) + public static Models.PortableExecutable.AcceleratorTableEntry[] AsAcceleratorTableResource(this byte[] data, ref int offset) { // If we have data that's invalid for this resource type, we can't do anything if (data == null || data.Length % 8 != 0) @@ -404,10 +404,10 @@ namespace BurnOutSharp.Builder int count = data.Length / 8; // Read in the table - var table = new Models.PortableExecutable.AcceleratorTableEntryResource[count]; + var table = new Models.PortableExecutable.AcceleratorTableEntry[count]; for (int i = 0; i < count; i++) { - var entry = new Models.PortableExecutable.AcceleratorTableEntryResource(); + var entry = new Models.PortableExecutable.AcceleratorTableEntry(); entry.Flags = (Models.PortableExecutable.AcceleratorTableFlags)data.ReadUInt16(ref offset); entry.Ansi = data.ReadUInt16(ref offset); entry.Id = data.ReadUInt16(ref offset); diff --git a/BurnOutSharp.Models/PortableExecutable/AcceleratorTableEntryResource.cs b/BurnOutSharp.Models/PortableExecutable/AcceleratorTableEntry.cs similarity index 96% rename from BurnOutSharp.Models/PortableExecutable/AcceleratorTableEntryResource.cs rename to BurnOutSharp.Models/PortableExecutable/AcceleratorTableEntry.cs index 0ec69ef4..0563ffdf 100644 --- a/BurnOutSharp.Models/PortableExecutable/AcceleratorTableEntryResource.cs +++ b/BurnOutSharp.Models/PortableExecutable/AcceleratorTableEntry.cs @@ -8,7 +8,7 @@ namespace BurnOutSharp.Models.PortableExecutable /// /// [StructLayout(LayoutKind.Sequential)] - public class AcceleratorTableEntryResource + public class AcceleratorTableEntry { /// /// Describes keyboard accelerator characteristics. diff --git a/BurnOutSharp.Models/PortableExecutable/AcceleratorTableResource.cs b/BurnOutSharp.Models/PortableExecutable/AcceleratorTableResource.cs new file mode 100644 index 00000000..1033cc45 --- /dev/null +++ b/BurnOutSharp.Models/PortableExecutable/AcceleratorTableResource.cs @@ -0,0 +1,20 @@ +namespace BurnOutSharp.Models.PortableExecutable +{ + /// + /// An accelerator table is one resource entry in a resource file. The structure definition + /// provided here is for explanation only; it is not present in any standard header file. + /// + /// + public class AcceleratorTableResource + { + /// + /// Each entry consists of a resource header and the data for that resource. + /// + public ResourceHeader ResourceHeader; + + /// + /// Accelerator table data + /// + public AcceleratorTableEntry[] AcceleratorTable; + } +}