示例#1
0
 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;
 }