namespace BinaryObjectScanner.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; /// /// A string that gives the Type, Name, or Language ID entry, depending on /// level of table. /// public ResourceDirectoryString Name; /// /// A 32-bit integer that identifies the Type, Name, or Language ID entry. /// public uint IntegerID; #endregion #region Offset 0x04 /// /// High bit 0. Address of a Resource Data entry (a leaf). /// public uint DataEntryOffset; /// /// Resource data entry (a leaf). /// public ResourceDataEntry DataEntry; /// /// High bit 1. The lower 31 bits are the address of another resource /// directory table (the next level down). /// public uint SubdirectoryOffset; /// /// Another resource directory table (the next level down). /// public ResourceDirectoryTable Subdirectory; #endregion } }