namespace SabreTools.Models.PortableExecutable { /// /// A leaf's Type, Name, and Language IDs are determined by the path that is /// taken through directory tables to reach the leaf. The first table /// determines Type ID, the second table (pointed to by the directory entry /// in the first table) determines Name ID, and the third table determines /// Language ID. /// /// The directory entries make up the rows of a table. Each resource directory /// entry has the following format. Whether the entry is a Name or ID entry /// is indicated by the resource directory table, which indicates how many /// Name and ID entries follow it (remember that all the Name entries precede /// all the ID entries for the table). All entries for the table are sorted /// in ascending order: the Name entries by case-sensitive string and the ID /// entries by numeric value. Offsets are relative to the address in the /// IMAGE_DIRECTORY_ENTRY_RESOURCE DataDirectory. /// /// public sealed class ResourceDirectoryEntry { #region Offset 0x00 /// /// The offset of a string that gives the Type, Name, or Language ID entry, /// depending on level of table. /// public uint NameOffset { get; set; } /// /// A string that gives the Type, Name, or Language ID entry, depending on /// level of table. /// #if NET48 public ResourceDirectoryString Name { get; set; } #else public ResourceDirectoryString? Name { get; set; } #endif /// /// A 32-bit integer that identifies the Type, Name, or Language ID entry. /// public uint IntegerID { get; set; } #endregion #region Offset 0x04 /// /// High bit 0. Address of a Resource Data entry (a leaf). /// public uint DataEntryOffset { get; set; } /// /// Resource data entry (a leaf). /// #if NET48 public ResourceDataEntry DataEntry { get; set; } #else public ResourceDataEntry? DataEntry { get; set; } #endif /// /// High bit 1. The lower 31 bits are the address of another resource /// directory table (the next level down). /// public uint SubdirectoryOffset { get; set; } /// /// Another resource directory table (the next level down). /// #if NET48 public ResourceDirectoryTable Subdirectory { get; set; } #else public ResourceDirectoryTable? Subdirectory { get; set; } #endif #endregion } }