// Token: 0x06000120 RID: 288 RVA: 0x000038B4 File Offset: 0x00001AB4 private void AddPasswdInfo(string strRess) { CIEPasswords.StringIndexEntry stringIndexEntry; int num = Strings.Len(stringIndexEntry); CIEPasswords.StringIndexHeader stringIndexHeader; int num2 = Strings.Len(stringIndexHeader); byte[] value = this.m_PStore.ReadItem(this.guidIE, this.guidIE, strRess + ":StringData"); byte[] value2 = this.m_PStore.ReadItem(this.guidIE, this.guidIE, strRess + ":StringIndex"); GCHandle gchandle = GCHandle.Alloc(value2, GCHandleType.Pinned); IntPtr intPtr = gchandle.AddrOfPinnedObject(); object obj = Marshal.PtrToStructure(intPtr, stringIndexHeader.GetType()); CIEPasswords.StringIndexHeader stringIndexHeader2; stringIndexHeader = ((obj != null) ? ((CIEPasswords.StringIndexHeader)obj) : stringIndexHeader2); gchandle.Free(); gchandle = GCHandle.Alloc(value, GCHandleType.Pinned); GCHandle gchandle2 = GCHandle.Alloc(value2, GCHandleType.Pinned); IntPtr value3 = gchandle.AddrOfPinnedObject(); IntPtr ptr = gchandle2.AddrOfPinnedObject(); checked { intPtr = new IntPtr(ptr.ToInt32() + stringIndexHeader.dwStructSize); if (stringIndexHeader.dwType == 1) { if (stringIndexHeader.dwEntriesCount >= 2) { int num3 = 0; int num4 = stringIndexHeader.dwEntriesCount - 1; for (int i = num3; i <= num4; i += 2) { if (value3 == IntPtr.Zero | intPtr == IntPtr.Zero) { return; } object obj2 = Marshal.PtrToStructure(intPtr, stringIndexEntry.GetType()); CIEPasswords.StringIndexEntry stringIndexEntry2; stringIndexEntry = ((obj2 != null) ? ((CIEPasswords.StringIndexEntry)obj2) : stringIndexEntry2); IntPtr intPtr2 = new IntPtr(value3.ToInt32() + stringIndexEntry.dwDataOffset); string szUserName; if (CIEPasswords.lstrlenA(intPtr2) != stringIndexEntry.dwDataSize) { ptr = new IntPtr(value3.ToInt32() + stringIndexEntry.dwDataOffset); szUserName = Marshal.PtrToStringUni(ptr); } else { intPtr2 = new IntPtr(value3.ToInt32() + stringIndexEntry.dwDataOffset); szUserName = Marshal.PtrToStringAnsi(intPtr2); } intPtr = new IntPtr(intPtr.ToInt32() + num); object obj3 = Marshal.PtrToStructure(intPtr, stringIndexEntry.GetType()); stringIndexEntry = ((obj3 != null) ? ((CIEPasswords.StringIndexEntry)obj3) : stringIndexEntry2); intPtr2 = new IntPtr(value3.ToInt32() + stringIndexEntry.dwDataOffset); string szPasswd; if (CIEPasswords.lstrlenA(intPtr2) != stringIndexEntry.dwDataSize) { ptr = new IntPtr(value3.ToInt32() + stringIndexEntry.dwDataOffset); szPasswd = Marshal.PtrToStringUni(ptr); } else { intPtr2 = new IntPtr(value3.ToInt32() + stringIndexEntry.dwDataOffset); szPasswd = Marshal.PtrToStringAnsi(intPtr2); } intPtr = new IntPtr(intPtr.ToInt32() + num); this.m_IEPass.Add(new CIEPassword(this.m_PStore, strRess, szUserName, szPasswd, this.FileTimeToDate(ref stringIndexEntry.ftInsertDateTime), 1)); } } } else if (stringIndexHeader.dwType == 0) { if (value3 == IntPtr.Zero | intPtr == IntPtr.Zero) { return; } int num5 = 0; int num6 = stringIndexHeader.dwEntriesCount - 1; for (int j = num5; j <= num6; j++) { object obj4 = Marshal.PtrToStructure(intPtr, stringIndexEntry.GetType()); CIEPasswords.StringIndexEntry stringIndexEntry2; stringIndexEntry = ((obj4 != null) ? ((CIEPasswords.StringIndexEntry)obj4) : stringIndexEntry2); string szUserName = Strings.Space(stringIndexEntry.dwDataSize); IntPtr intPtr2 = new IntPtr(value3.ToInt32() + stringIndexEntry.dwDataOffset); if (CIEPasswords.lstrlenA(intPtr2) != stringIndexEntry.dwDataSize) { ptr = new IntPtr(value3.ToInt32() + stringIndexEntry.dwDataOffset); szUserName = Marshal.PtrToStringUni(ptr); } else { intPtr2 = new IntPtr(value3.ToInt32() + stringIndexEntry.dwDataOffset); szUserName = Marshal.PtrToStringAnsi(intPtr2); } intPtr = new IntPtr(intPtr.ToInt32() + num); this.m_IEPass.Add(new CIEPassword(this.m_PStore, strRess, szUserName, string.Empty, this.FileTimeToDate(ref stringIndexEntry.ftInsertDateTime), 0)); } } gchandle.Free(); gchandle2.Free(); } }
// Token: 0x06000123 RID: 291 RVA: 0x00003CC8 File Offset: 0x00001EC8 public void DeletePart(string szResourceName, string szWord) { CIEPasswords.StringIndexEntry stringIndexEntry; int num = Strings.Len(stringIndexEntry); CIEPasswords.StringIndexHeader stringIndexHeader; int num2 = Strings.Len(stringIndexHeader); byte[] array = this.m_PStore.ReadItem(this.guidIE, this.guidIE, szResourceName + ":StringData"); byte[] array2 = this.m_PStore.ReadItem(this.guidIE, this.guidIE, szResourceName + ":StringIndex"); GCHandle gchandle = GCHandle.Alloc(array2, GCHandleType.Pinned); IntPtr ptr = gchandle.AddrOfPinnedObject(); object obj = Marshal.PtrToStructure(ptr, stringIndexHeader.GetType()); CIEPasswords.StringIndexHeader stringIndexHeader2; stringIndexHeader = ((obj != null) ? ((CIEPasswords.StringIndexHeader)obj) : stringIndexHeader2); gchandle.Free(); gchandle = GCHandle.Alloc(array, GCHandleType.Pinned); GCHandle gchandle2 = GCHandle.Alloc(array2, GCHandleType.Pinned); IntPtr intPtr = gchandle.AddrOfPinnedObject(); IntPtr intPtr2 = gchandle2.AddrOfPinnedObject(); checked { ptr = new IntPtr(intPtr2.ToInt32() + stringIndexHeader.dwStructSize); if (stringIndexHeader.dwType == 1 | stringIndexHeader.dwEntriesCount == 1) { this.Delete(szResourceName); } else if (stringIndexHeader.dwType == 0) { byte[] value = new byte[Information.UBound(array, 1) + 1]; byte[] value2 = new byte[Information.UBound(array2, 1) + 1]; GCHandle gchandle3 = GCHandle.Alloc(value, GCHandleType.Pinned); GCHandle gchandle4 = GCHandle.Alloc(value2, GCHandleType.Pinned); intPtr = gchandle.AddrOfPinnedObject(); ptr = new IntPtr(gchandle2.AddrOfPinnedObject().ToInt32() + stringIndexHeader.dwStructSize); IntPtr intPtr3 = gchandle3.AddrOfPinnedObject(); IntPtr intPtr4 = gchandle4.AddrOfPinnedObject(); IntPtr ptr2 = new IntPtr(intPtr4.ToInt32() + stringIndexHeader.dwStructSize); int num3 = 0; int num4 = stringIndexHeader.dwEntriesCount - 1; int num5; for (int i = num3; i <= num4; i++) { object obj2 = Marshal.PtrToStructure(ptr, stringIndexEntry.GetType()); CIEPasswords.StringIndexEntry stringIndexEntry2; stringIndexEntry = ((obj2 != null) ? ((CIEPasswords.StringIndexEntry)obj2) : stringIndexEntry2); string left = Strings.Space(stringIndexEntry.dwDataSize); intPtr4 = new IntPtr(intPtr.ToInt32() + stringIndexEntry.dwDataOffset); if (CIEPasswords.lstrlenA(intPtr4) != stringIndexEntry.dwDataSize) { intPtr2 = new IntPtr(intPtr.ToInt32() + stringIndexEntry.dwDataOffset); left = Marshal.PtrToStringUni(intPtr2, stringIndexEntry.dwDataSize * 2); if (Operators.CompareString(left, szWord, false) != 0) { intPtr4 = new IntPtr(intPtr3.ToInt32() + num5); IntPtr destination = intPtr4; intPtr2 = new IntPtr(intPtr.ToInt32() + stringIndexEntry.dwDataOffset); CIEPasswords.CopyMemory(destination, intPtr2, stringIndexEntry.dwDataSize * 2); stringIndexEntry.dwDataOffset = num5; Marshal.StructureToPtr(stringIndexEntry, ptr2, false); num5 = num5 + stringIndexEntry.dwDataSize * 2 + 2; ptr2 = new IntPtr(ptr2.ToInt32() + num); } } else { intPtr4 = new IntPtr(intPtr.ToInt32() + stringIndexEntry.dwDataOffset); left = Marshal.PtrToStringAnsi(intPtr4, stringIndexEntry.dwDataSize * 2); if (Operators.CompareString(left, szWord, false) != 0) { intPtr4 = new IntPtr(intPtr3.ToInt32() + num5); IntPtr destination2 = intPtr4; intPtr2 = new IntPtr(intPtr.ToInt32() + stringIndexEntry.dwDataOffset); CIEPasswords.CopyMemory(destination2, intPtr2, stringIndexEntry.dwDataSize); stringIndexEntry.dwDataOffset = num5; Marshal.StructureToPtr(stringIndexEntry, ptr2, false); num5 = num5 + stringIndexEntry.dwDataSize + 1; ptr2 = new IntPtr(ptr2.ToInt32() + num); } } ptr = new IntPtr(ptr.ToInt32() + num); } stringIndexHeader.dwEntriesCount--; Marshal.StructureToPtr(stringIndexHeader, ptr2, false); this.m_PStore.WriteItem(this.guidIE, this.guidIE, szResourceName + ":StringData", intPtr3.ToInt32(), num5); this.m_PStore.WriteItem(this.guidIE, this.guidIE, szResourceName + ":StringIndex", ptr2.ToInt32(), num2 + stringIndexHeader.dwEntriesCount * num); gchandle3.Free(); gchandle4.Free(); } gchandle.Free(); gchandle2.Free(); } }