void EntryAction_HandleCreated(object sender, EventArgs e) { if (Aero) { td = new TaskDialog(); } System.Threading.ThreadStart ts = delegate { #if TRACE try { #endif //while (true)//(!this.IsHandleCreated || !progressBar1.IsHandleCreated || !label1.IsHandleCreated || !lPercent.IsHandleCreated || !button1.IsHandleCreated) //{ // try // { // this.Invoke((MethodInvoker)delegate { }); // progressBar1.Invoke((MethodInvoker)delegate { }); // label1.Invoke((MethodInvoker)delegate { }); // lPercent.Invoke((MethodInvoker)delegate { }); // button1.Invoke((MethodInvoker)delegate { }); // break; // } // catch(Exception E) { Application.DoEvents(); } //} if (xDrive != null && m == Method.Backup || m == Method.ExtractJ || m == Method.ExtractSS || m == Method.Restore) { switch (m) { case Method.Backup: this.Invoke((MethodInvoker) delegate { this.Icon = Properties.Resources.Add; }); CLKsFATXLib.Streams.Reader r = xDrive.Reader(); CLKsFATXLib.Streams.Writer w = new CLKsFATXLib.Streams.Writer(new System.IO.FileStream(OutPath, System.IO.FileMode.Create)); int ReadLength = 0x200; if (xDrive.Length % 0x100000 == 0) { ReadLength = 0x100000; } else if (xDrive.Length % 0x40000 == 0) { ReadLength = 0x40000; } else if (xDrive.Length % 0x10000 == 0) { ReadLength = 0x10000; } else if (xDrive.Length % 0x5000 == 0) { ReadLength = 0x5000; } for (int i = 0; i < xDrive.Length / ReadLength; i++) { if (Cancel) { break; } w.Write(r.ReadBytes(ReadLength)); progressBar1.Invoke((MethodInvoker) delegate { try { progressBar1.Maximum = (int)(xDrive.Length / ReadLength); progressBar1.Value = (i + 1); if (Windows7) { tm.SetProgressValue(progressBar1.Value, progressBar1.Maximum); } } catch { } }); this.Invoke((MethodInvoker) delegate { this.Text = "Backing Up Drive"; }); label1.Invoke((MethodInvoker) delegate { label1.Text = (((decimal)(i + 1) / (decimal)(xDrive.Length / ReadLength)) * 100).ToString("#") + "%"; }); } w.Close(); break; case Method.ExtractSS: this.Invoke((MethodInvoker) delegate { this.Icon = Properties.Resources.Add; }); //Create our io for the drive CLKsFATXLib.Streams.Reader io = xDrive.Reader(); //Go to the location of the security sector io.BaseStream.Position = 0x2000; //Create our ref io for the file CLKsFATXLib.Streams.Writer bw = new CLKsFATXLib.Streams.Writer(new System.IO.FileStream(OutPath, System.IO.FileMode.Create)); //Read the sector. The size is an estimation, since I have no idea how big it really is bw.Write(io.ReadBytes(0xE00)); //Close our io bw.Close(); break; case Method.ExtractJ: this.Invoke((MethodInvoker) delegate { this.Icon = Properties.Resources.Add; }); //Create our io for the drive CLKsFATXLib.Streams.Reader io2 = xDrive.Reader(); //Go to the location of the security sector io2.BaseStream.Position = 0x800; //Create our ref io for the file CLKsFATXLib.Streams.Writer bw2 = new CLKsFATXLib.Streams.Writer(new System.IO.FileStream(OutPath, System.IO.FileMode.Create)); //Read the sector. The size is an estimation, since I have no idea how big it really is bw2.Write(io2.ReadBytes(0x400)); //Close our io bw2.Close(); break; case Method.Restore: this.Invoke((MethodInvoker) delegate { this.Icon = Properties.Resources.Remove; }); if (MessageBox.Show("WARNING: Restoring a drive that does not match your current one can cause for data to not be read correctly by the Xbox 360, or for other unforseen problems! Please make sure you know what you're doing before continuing. Are you sure you want to continue?", "WARNING AND STUFF", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) { if (MessageBox.Show("This is your last chance to stop! Are you POSITIVE you want to continue?", "Last Chance!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) { CLKsFATXLib.Streams.Reader r2 = new CLKsFATXLib.Streams.Reader(new System.IO.FileStream(OutPath, System.IO.FileMode.Open)); CLKsFATXLib.Streams.Writer w2 = xDrive.Writer(); int ReadLength2 = 0x200; if (xDrive.Length % 0x4000 != 0) { ReadLength2 = 0x4000; } else { for (int i = 0x300000; i > 0x200; i -= 0x1000) { if (xDrive.Length % i == 0) { ReadLength2 = i; break; } } } for (int i = 0; i < xDrive.Length / ReadLength2; i++) { if (Cancel) { break; } w2.Write(r2.ReadBytes(ReadLength2)); progressBar1.Invoke((MethodInvoker) delegate { try { progressBar1.Maximum = (int)(xDrive.Length / ReadLength2); progressBar1.Value = (i + 1); if (Windows7) { tm.SetProgressValue(progressBar1.Value, progressBar1.Maximum); } } catch { } }); this.Invoke((MethodInvoker) delegate { this.Text = "Restoring Drive"; }); label1.Invoke((MethodInvoker) delegate { label1.Text = (((decimal)(i + 1) / (decimal)(xDrive.Length / ReadLength2)) * 100).ToString("#") + "%"; }); } r2.Close(); } } break; } } else { Folder ParentFolder = null; this.Invoke((MethodInvoker) delegate { ParentFolder = Parent; }); switch (m) { case Method.Extract: #if DEBUG System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch(); if (Timer) { sw.Start(); } #endif this.Invoke((MethodInvoker) delegate { this.Icon = Properties.Resources.Add; }); foreach (Entry entry in Entries) { if (!entry.IsFolder) { ((File)entry).FileAction += new CLKsFATXLib.Structs.FileActionChanged(EntryAction_FileAction); this.Invoke((MethodInvoker) delegate { this.Text = entry.FullPath; }); label1.Invoke((MethodInvoker) delegate { label1.Text = entry.Name; }); // Check to see if we're batch-extracting... if (Entries.Length == 1) { ((File)entry).Extract(OutPath); } else { ((File)entry).Extract(OutPath + "\\" + entry.Name); } } else { ((Folder)entry).FolderAction += new CLKsFATXLib.Structs.FolderActionChanged(EntryAction_FolderAction); ((Folder)entry).Extract(OutPath, EntriesToSkip); } if (Cancel) { break; } } #if DEBUG if (Timer) { sw.Stop(); MessageBox.Show(string.Format("{0}:{1}:{2}", sw.Elapsed.Minutes, sw.Elapsed.Seconds, sw.Elapsed.Milliseconds)); } #endif break; case Method.Delete: this.Invoke((MethodInvoker) delegate { this.Icon = Properties.Resources.Remove; }); foreach (Entry entry in Entries) { if (Cancel) { break; } if (entry.IsFolder) { Folder current = ((Folder)entry); current.ResetFolderAction(); current.FolderAction += new CLKsFATXLib.Structs.FolderActionChanged(EntryAction_FolderAction); current.Delete(); } else { this.Invoke((MethodInvoker) delegate { this.Text = entry.FullPath; }); label1.Invoke((MethodInvoker) delegate { label1.Text = entry.Name; }); File current = ((File)entry); current.FileAction += new CLKsFATXLib.Structs.FileActionChanged(EntryAction_FileAction); current.Delete(); } } break; case Method.Inject: #if DEBUG System.Diagnostics.Stopwatch sw2 = new System.Diagnostics.Stopwatch(); if (Timer) { sw2.Start(); } #endif this.Invoke((MethodInvoker) delegate { this.Icon = Properties.Resources.Add; }); if (ParentFolder != null) { ParentFolder.ResetFolderAction(); ParentFolder.FolderAction += new CLKsFATXLib.Structs.FolderActionChanged(EntryAction_FolderAction); List <CLKsFATXLib.Structs.ExistingEntry> Existing = new List <CLKsFATXLib.Structs.ExistingEntry>(); foreach (string s in Paths) { if (Cancel) { break; } if (VariousFunctions.IsFolder(s)) { Existing.AddRange(ParentFolder.InjectFolder(s, false, false)); } else { ParentFolder.FolderAction += new CLKsFATXLib.Structs.FolderActionChanged(EntryAction_FolderAction); CLKsFATXLib.Structs.WriteResult wr = ParentFolder.CreateNewFile(s); if (wr.CouldNotWrite) { CLKsFATXLib.Structs.ExistingEntry ex = new CLKsFATXLib.Structs.ExistingEntry(); ex.Existing = wr.Entry; ex.NewPath = s; Existing.Add(ex); } } } DoExisting(Existing); } else { List <CLKsFATXLib.Structs.ExistingEntry> Existing = new List <CLKsFATXLib.Structs.ExistingEntry>(); foreach (string s in Paths) { string Path = ""; try { Path = VariousFunctions.GetFATXPath(s); } catch (Exception x) { ExceptionHandler(x); continue; } Folder thisFolder = xDrive.CreateDirectory("Data\\" + Path); thisFolder.ResetFolderAction(); thisFolder.FolderAction += new CLKsFATXLib.Structs.FolderActionChanged(EntryAction_FolderAction); if (Cancel) { break; } if (VariousFunctions.IsFolder(s)) { ExceptionHandler(new Exception("Can not write folder as STFS package (silly error wording)")); continue; } else { thisFolder.FolderAction += new CLKsFATXLib.Structs.FolderActionChanged(EntryAction_FolderAction); CLKsFATXLib.Structs.WriteResult wr = thisFolder.CreateNewFile(s); if (wr.CouldNotWrite) { CLKsFATXLib.Structs.ExistingEntry ex = new CLKsFATXLib.Structs.ExistingEntry(); ex.Existing = wr.Entry; ex.NewPath = s; Existing.Add(ex); } } } DoExisting(Existing); } #if DEBUG if (Timer) { sw2.Stop(); MessageBox.Show(string.Format("{0}:{1}:{2}", sw2.Elapsed.Minutes, sw2.Elapsed.Seconds, sw2.Elapsed.Milliseconds)); } #endif break; case Method.Move: List <CLKsFATXLib.Structs.WriteResult> Results = new List <CLKsFATXLib.Structs.WriteResult>(); foreach (Entry Entry in Entries) { CLKsFATXLib.Structs.WriteResult wr = Entry.Move(OutPath); if (wr.CouldNotWrite) { Results.Add(wr); } } break; } } this.Invoke((MethodInvoker) delegate { this.Close(); }); #if TRACE } catch (Exception x) { ExceptionHandler(x); this.Invoke((MethodInvoker) delegate { this.Close(); }); } #endif }; t = new System.Threading.Thread(ts); t.Start(); }