internal static ImageResourceDirectoryEntry FromReadingContext(ReadingContext context)
{
var reader = context.Reader;
var resourceDirectory =
context.Assembly.NtHeaders.OptionalHeader.DataDirectories[ImageDataDirectory.ResourceDirectoryIndex];
var entry = new ImageResourceDirectoryEntry
{
StartOffset = reader.Position,
NameId = reader.ReadUInt32(),
OffsetToData = reader.ReadUInt32(),
};
entry.HasData = (entry.OffsetToData >> 31) == 0;
uint actualDataOffset = entry.OffsetToData & ~(1 << 31);
entry.HasName = (entry.NameId >> 31) == 1;
if (entry.HasName)
{
entry._nameReadingContext =
context.CreateSubContext(context.Assembly.RvaToFileOffset(resourceDirectory.VirtualAddress) +
(entry.NameId & ~(1 << 31)));
}
entry._dataReadingContext =
context.CreateSubContext(context.Assembly.RvaToFileOffset(resourceDirectory.VirtualAddress) +
actualDataOffset);
return(entry);
}