private void prevBlock_Click(object sender, EventArgs e) { dc.fileDataBlock--; showCurrentBlock.Text = dc.fileDataBlock.ToString(); forkStream.forkType type = new forkStream.forkType(); switch ((string)comboBox1.SelectedItem) { case "Resource fork": type = forkStream.forkType.resource; dc.showForkData(dc.selectedFile, dc.fileDataBlock - 1, forkStream.forkType.resource); if (dc.selectedFile.resourceFork.forkDataValues.totalBlocks == dc.fileDataBlock) { nextBlock.Enabled = false; } break; default: type = forkStream.forkType.data; dc.showForkData(dc.selectedFile, dc.fileDataBlock - 1, forkStream.forkType.data); break; } nextBlock.Enabled = true; if (dc.fileDataBlock == 1) { prevBlock.Enabled = false; } hexText.Text = dc.contentDisplay; }
public void showForkData(HFSPlusCatalogFile entry, uint block, forkStream.forkType type) { GPTScheme gpts = new GPTScheme(i); HFSPlus hfsp = new HFSPlus(i, gpts.entries[entry.partitionAssoc]); volumeStream vs = new volumeStream(hfsp); extentsOverflowFile eof = new extentsOverflowFile(new HFSPlusFile(hfsp.volHead.extentsFile, forkStream.forkType.data), vs); HFSPlusFile hfsp_file = new HFSPlusFile(entry, eof); forkStream fs; if (type == forkStream.forkType.data) { fs = new forkStream(vs, hfsp_file, forkStream.forkType.data); } else { fs = new forkStream(vs, hfsp_file, forkStream.forkType.resource); } contentDisplay = hexHeadLine + "\r\n"; if (fs.Length > 0) { byte[] showBlock = new byte[hfsp.blockSize]; fs.Seek(hfsp.blockSize * block, SeekOrigin.Begin); fs.Read(showBlock, 0, (int)hfsp.blockSize); rawDataDisplay(showBlock); } }
public void exportFile(HFSPlusCatalogFile entry, forkStream.forkType type, string path) { if (entry.dataFork.forkDataValues.logicalSize > 0 || entry.resourceFork.forkDataValues.logicalSize > 0) { GPTScheme gpts = new GPTScheme(i); HFSPlus hfsp = new HFSPlus(i, gpts.entries[entry.partitionAssoc]); volumeStream vs = new volumeStream(hfsp); extentsOverflowFile eof = new extentsOverflowFile(new HFSPlusFile(hfsp.volHead.extentsFile, forkStream.forkType.data), vs); HFSPlusFile hfsp_file = new HFSPlusFile(entry, eof); forkStream fs; long dataSize = 0; if (type == forkStream.forkType.data) { fs = new forkStream(vs, hfsp_file, forkStream.forkType.data); dataSize = (long)entry.dataFork.forkDataValues.logicalSize; } else { fs = new forkStream(vs, hfsp_file, forkStream.forkType.resource); dataSize = (long)entry.resourceFork.forkDataValues.logicalSize; } fs.Position = 0; FileStream writeStream = new FileStream(path, FileMode.Create); BinaryWriter bw = new BinaryWriter(writeStream); long bytesWritten = 0; byte[] buffer; while (bytesWritten < dataSize) { if (bytesWritten + 8192 <= dataSize) { buffer = new byte[8192]; fs.Read(buffer, 0, 8192); bw.Write(buffer, 0, 8192); bytesWritten += 8192; } else { buffer = new byte[dataSize - bytesWritten]; fs.Read(buffer, 0, buffer.Length); bw.Write(buffer, 0, buffer.Length); bytesWritten += buffer.Length; } } bw.Close(); writeStream.Close(); } }
public HFSPlusFile(hfsPlusForkData forkEntry, forkStream.forkType type) { fileContent.dataExtents = new List <hfsPlusForkData.HFSPlusExtentRecord>(); fileContent.resourceExtents = new List <hfsPlusForkData.HFSPlusExtentRecord>(); switch (type) { case forkStream.forkType.data: addDataFork(forkEntry); break; case forkStream.forkType.resource: addResourceFork(forkEntry); break; } }
public void showForkData(HFSPlusCatalogFile entry, forkStream.forkType type) { GPTScheme gpts = new GPTScheme(i); HFSPlus hfsp = new HFSPlus(i, gpts.entries[entry.partitionAssoc]); volumeStream vs = new volumeStream(hfsp); extentsOverflowFile eof = new extentsOverflowFile(new HFSPlusFile(hfsp.volHead.extentsFile, forkStream.forkType.data), vs); HFSPlusFile hfsp_file = new HFSPlusFile(entry, eof); forkStream fs; if (type == forkStream.forkType.data) { fs = new forkStream(vs, hfsp_file, forkStream.forkType.data); } else { fs = new forkStream(vs, hfsp_file, forkStream.forkType.resource); } throw new NotImplementedException(); }
private void prevBlock_Click(object sender, EventArgs e) { dc.fileDataBlock--; showCurrentBlock.Text = dc.fileDataBlock.ToString(); forkStream.forkType type = new forkStream.forkType(); switch ((string)comboBox1.SelectedItem) { case "Resource fork": type = forkStream.forkType.resource; dc.showForkData(dc.selectedFile, dc.fileDataBlock - 1, forkStream.forkType.resource); if (dc.selectedFile.resourceFork.forkDataValues.totalBlocks == dc.fileDataBlock) { nextBlock.Enabled = false; } break; default: type = forkStream.forkType.data; dc.showForkData(dc.selectedFile, dc.fileDataBlock - 1, forkStream.forkType.data); break; } nextBlock.Enabled = true; if (dc.fileDataBlock == 1) { prevBlock.Enabled = false; } hexText.Text = dc.contentDisplay; }
private void goToBlock_Click(object sender, EventArgs e) { try { dc.fileDataBlock = Convert.ToUInt32(blockNumBox.Text); } catch (FormatException f) { MessageBox.Show("Input string is not a sequence of digits.\r\n" + f.Message); } catch (OverflowException f) { MessageBox.Show("The number cannot fit in a UInt32.\r\n" + f.Message); } finally { forkStream.forkType type = new forkStream.forkType(); switch (comboBox1.SelectedText) { case "Resource fork": if (dc.fileDataBlock > dc.selectedFile.resourceFork.forkDataValues.totalBlocks) { MessageBox.Show("This block does not exist within the file"); } else { showCurrentBlock.Text = blockNumBox.Text; showTotalBlocks.Text = dc.selectedFile.resourceFork.forkDataValues.totalBlocks.ToString(); dc.showForkData(dc.selectedFile, dc.fileDataBlock - 1, forkStream.forkType.resource); hexText.Text = dc.contentDisplay; if (dc.fileDataBlock < dc.selectedFile.resourceFork.forkDataValues.totalBlocks) { nextBlock.Enabled = true; } else { nextBlock.Enabled = false; } if (dc.fileDataBlock > 1) { prevBlock.Enabled = true; } else { prevBlock.Enabled = false; } blockNumBox.Enabled = true; goToBlock.Enabled = true; } break; default: if (dc.fileDataBlock > dc.selectedFile.dataFork.forkDataValues.totalBlocks) { MessageBox.Show("This block does not exist within the file"); } else { showCurrentBlock.Text = blockNumBox.Text; showTotalBlocks.Text = dc.selectedFile.dataFork.forkDataValues.totalBlocks.ToString(); dc.showForkData(dc.selectedFile, dc.fileDataBlock - 1, forkStream.forkType.data); hexText.Text = dc.contentDisplay; if (dc.fileDataBlock < dc.selectedFile.dataFork.forkDataValues.totalBlocks) { nextBlock.Enabled = true; } else { nextBlock.Enabled = false; } if (dc.fileDataBlock > 1) { prevBlock.Enabled = true; } else { prevBlock.Enabled = false; } blockNumBox.Enabled = true; goToBlock.Enabled = true; } break; } } }
private void goToBlock_Click(object sender, EventArgs e) { try { dc.fileDataBlock = Convert.ToUInt32(blockNumBox.Text); } catch (FormatException f) { MessageBox.Show("Input string is not a sequence of digits.\r\n" + f.Message); } catch (OverflowException f) { MessageBox.Show("The number cannot fit in a UInt32.\r\n" + f.Message); } finally { forkStream.forkType type = new forkStream.forkType(); switch (comboBox1.SelectedText) { case "Resource fork": if (dc.fileDataBlock > dc.selectedFile.resourceFork.forkDataValues.totalBlocks) { MessageBox.Show("This block does not exist within the file"); } else { showCurrentBlock.Text = blockNumBox.Text; showTotalBlocks.Text = dc.selectedFile.resourceFork.forkDataValues.totalBlocks.ToString(); dc.showForkData(dc.selectedFile, dc.fileDataBlock - 1, forkStream.forkType.resource); hexText.Text = dc.contentDisplay; if (dc.fileDataBlock < dc.selectedFile.resourceFork.forkDataValues.totalBlocks) { nextBlock.Enabled = true; } else { nextBlock.Enabled = false; } if (dc.fileDataBlock > 1) { prevBlock.Enabled = true; } else { prevBlock.Enabled = false; } blockNumBox.Enabled = true; goToBlock.Enabled = true; } break; default: if (dc.fileDataBlock > dc.selectedFile.dataFork.forkDataValues.totalBlocks) { MessageBox.Show("This block does not exist within the file"); } else { showCurrentBlock.Text = blockNumBox.Text; showTotalBlocks.Text = dc.selectedFile.dataFork.forkDataValues.totalBlocks.ToString(); dc.showForkData(dc.selectedFile, dc.fileDataBlock - 1, forkStream.forkType.data); hexText.Text = dc.contentDisplay; if (dc.fileDataBlock < dc.selectedFile.dataFork.forkDataValues.totalBlocks) { nextBlock.Enabled = true; } else { nextBlock.Enabled = false; } if (dc.fileDataBlock > 1) { prevBlock.Enabled = true; } else { prevBlock.Enabled = false; } blockNumBox.Enabled = true; goToBlock.Enabled = true; } break; } } }