internal Win32ResourceList ReadWin32Resources() { Win32ResourceList rs = new Win32ResourceList(); int startPos = this.win32ResourcesOffset; if (startPos < 0) return rs; MemoryCursor c = this.cursor; c.Position = startPos; int sizeOfTypeDirectory = ReadWin32ResourceDirectoryHeader(c); for (int i = 0; i < sizeOfTypeDirectory; i++) { string TypeName = null; int TypeID = c.ReadInt32(); if (TypeID < 0) { MemoryCursor nac = new MemoryCursor(c); nac.Position = startPos + (TypeID & 0x7FFFFFFF); int strLength = nac.ReadUInt16(); TypeName = nac.ReadUTF16(strLength); } int offset = c.ReadInt32(); if (offset >= 0) rs.Add(this.ReadWin32ResourceDataEntry(c, startPos + offset, TypeName, TypeID, null, 0, 0)); else { MemoryCursor nc = new MemoryCursor(c); nc.Position = startPos + (offset & 0x7FFFFFFF); int sizeOfNameDirectory = ReadWin32ResourceDirectoryHeader(nc); for (int j = 0; j < sizeOfNameDirectory; j++) { string Name = null; int ID = nc.ReadInt32(); if (ID < 0) { MemoryCursor nac = new MemoryCursor(c); int strLength = nac.ReadUInt16(); Name = nac.ReadUTF16(strLength); } offset = nc.ReadInt32(); if (offset >= 0) rs.Add(this.ReadWin32ResourceDataEntry(c, startPos + offset, TypeName, TypeID, Name, ID, 0)); else { MemoryCursor lc = new MemoryCursor(c); lc.Position = startPos + (offset & 0x7FFFFFFF); int sizeOfLanguageDirectory = ReadWin32ResourceDirectoryHeader(lc); for (int k = 0; k < sizeOfLanguageDirectory; k++) { int LanguageID = lc.ReadInt32(); offset = lc.ReadInt32(); rs.Add(this.ReadWin32ResourceDataEntry(c, startPos + offset, TypeName, TypeID, Name, ID, LanguageID)); } } } } } return rs; }