private static ExtractedResourceInfo ReadResource(IReader reader, byte version) { if (version != 1) throw new InvalidOperationException("Unrecognized \"rsrc\" block version"); var originalIndex = new DatumIndex(reader.ReadUInt32()); var resource = new ExtractedResourceInfo(originalIndex); resource.Flags = reader.ReadUInt32(); resource.Type = reader.ReadAscii(); if (string.IsNullOrEmpty(resource.Type)) resource.Type = null; resource.Info = ReadByteArray(reader); resource.OriginalParentTagIndex = new DatumIndex(reader.ReadUInt32()); byte hasLocation = reader.ReadByte(); if (hasLocation != 0) { resource.Location = new ExtractedResourcePointer(); resource.Location.OriginalPrimaryPageIndex = reader.ReadInt32(); resource.Location.PrimaryOffset = reader.ReadInt32(); resource.Location.PrimaryUnknown = reader.ReadInt32(); resource.Location.OriginalSecondaryPageIndex = reader.ReadInt32(); resource.Location.SecondaryOffset = reader.ReadInt32(); resource.Location.SecondaryUnknown = reader.ReadInt32(); } resource.Unknown1 = reader.ReadInt32(); resource.Unknown2 = reader.ReadInt32(); resource.Unknown3 = reader.ReadInt32(); int numResourceFixups = reader.ReadInt32(); for (int i = 0; i < numResourceFixups; i++) { var fixup = new ResourceFixup(); fixup.Offset = reader.ReadInt32(); fixup.Address = reader.ReadUInt32(); resource.ResourceFixups.Add(fixup); } int numDefinitionFixups = reader.ReadInt32(); for (int i = 0; i < numDefinitionFixups; i++) { var fixup = new ResourceDefinitionFixup(); fixup.Offset = reader.ReadInt32(); fixup.Type = reader.ReadInt32(); resource.DefinitionFixups.Add(fixup); } return resource; }
private StructureValueCollection SerializeResourceFixup(ResourceFixup fixup) { var result = new StructureValueCollection(); result.SetInteger("offset", (uint) fixup.Offset); result.SetInteger("address", fixup.Address); return result; }