// Token: 0x0600047D RID: 1149 RVA: 0x001D8D74 File Offset: 0x001D7174
        public static void InjectIcon(string exeFileName, string iconFileName, uint iconGroupID, uint iconBaseID)
        {
            IconN.IconFile iconFile = IconN.IconFile.FromFile(iconFileName);
            IntPtr         intPtr   = IconN.NativeMethods.BeginUpdateResource(exeFileName, false);

            byte[] array   = iconFile.CreateIconGroupData(iconBaseID);
            IntPtr hUpdate = intPtr;
            IntPtr intPtr2 = new IntPtr(14L);
            IntPtr type    = intPtr2;
            IntPtr intPtr3 = new IntPtr((long)((ulong)iconGroupID));

            IconN.NativeMethods.UpdateResource(hUpdate, type, intPtr3, 0, array, array.Length);
            int num  = 0;
            int num2 = iconFile.ImageCount - 1;
            int num3 = num;

            for (;;)
            {
                int num4 = num3;
                int num5 = num2;
                if (num4 > num5)
                {
                    break;
                }
                byte[] array2   = iconFile.get_ImageData(num3);
                IntPtr hUpdate2 = intPtr;
                intPtr3 = new IntPtr(3L);
                IntPtr type2 = intPtr3;
                intPtr2 = new IntPtr((long)((ulong)iconBaseID + (ulong)((long)num3)));
                IconN.NativeMethods.UpdateResource(hUpdate2, type2, intPtr2, 0, array2, array2.Length);
                num3++;
            }
            IconN.NativeMethods.EndUpdateResource(intPtr, false);
        }
            // Token: 0x06000485 RID: 1157 RVA: 0x001D8E78 File Offset: 0x001D7278
            public static IconN.IconFile FromFile(string filename)
            {
                IconN.IconFile iconFile = new IconN.IconFile();
                byte[]         array    = File.ReadAllBytes(filename);
                GCHandle       gchandle = GCHandle.Alloc(array, GCHandleType.Pinned);

                iconFile.iconDir   = (IconN.ICONDIR)Marshal.PtrToStructure(gchandle.AddrOfPinnedObject(), typeof(IconN.ICONDIR));
                iconFile.iconEntry = new IconN.ICONDIRENTRY[(int)(iconFile.iconDir.Count - 1 + 1)];
                iconFile.iconImage = new byte[(int)(iconFile.iconDir.Count - 1 + 1)][];
                int  num            = Marshal.SizeOf(iconFile.iconDir);
                Type typeFromHandle = typeof(IconN.ICONDIRENTRY);
                int  num2           = Marshal.SizeOf(typeFromHandle);
                int  num3           = 0;
                int  num4           = (int)(iconFile.iconDir.Count - 1);
                int  num5           = num3;

                for (;;)
                {
                    int num6 = num5;
                    int num7 = num4;
                    if (num6 > num7)
                    {
                        break;
                    }
                    IntPtr             ptr          = new IntPtr(gchandle.AddrOfPinnedObject().ToInt64() + (long)num);
                    IconN.ICONDIRENTRY icondirentry = (IconN.ICONDIRENTRY)Marshal.PtrToStructure(ptr, typeFromHandle);
                    iconFile.iconEntry[num5] = icondirentry;
                    iconFile.iconImage[num5] = new byte[icondirentry.BytesInRes - 1 + 1];
                    Buffer.BlockCopy(array, icondirentry.ImageOffset, iconFile.iconImage[num5], 0, icondirentry.BytesInRes);
                    num += num2;
                    num5++;
                }
                gchandle.Free();
                return(iconFile);
            }