/// <summary> /// Exports a streams' content to a file. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void exportStreamToFileToolStripMenuItem_Click(object sender, EventArgs e) { DataRowView drv = dataGridResult.SelectedRows[0].DataBoundItem as DataRowView; FileInfoData.FileInfoRow fir = drv.Row as FileInfoData.FileInfoRow; NTFS.FileStreams FS = new NTFS.FileStreams(fir.File_Name); foreach (NTFS.StreamInfo s in FS) { if (s.Name == fir.Stream_Name) { if (saveFileDialogExport.ShowDialog() == DialogResult.OK) { using (FileStream input = s.Open(FileMode.Open)) { using (FileStream output = new FileStream(saveFileDialogExport.FileName, FileMode.Create)) { int bufferSize = 4096; byte[] buffer = new byte[bufferSize]; while (true) { int read = input.Read(buffer, 0, buffer.Length); if (read <= 0) { return; } output.Write(buffer, 0, read); } } } } } } }
/// <summary> /// Opens the containing folder of the file's location. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void openContainingFolderToolStripMenuItem_Click(object sender, EventArgs e) { DataRowView drv = dataGridResult.SelectedRows[0].DataBoundItem as DataRowView; FileInfoData.FileInfoRow fir = drv.Row as FileInfoData.FileInfoRow; try { Process.Start(fir.Location); } catch (System.ComponentModel.Win32Exception) { } }
/// <summary> /// If the user deletes one or more rows, delete the streams on the file system. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dataGridResult_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e) { DataRowView drv = e.Row.DataBoundItem as DataRowView; FileInfoData.FileInfoRow fir = drv.Row as FileInfoData.FileInfoRow; NTFS.FileStreams FS = new NTFS.FileStreams(fir.File_Name); foreach (NTFS.StreamInfo s in FS) { if (s.Name == fir.Stream_Name) { s.Delete(); } } }
/// <summary> /// Updates the data grid with the found streams. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void timerGrid_Tick(object sender, System.EventArgs e) { this.timerGrid.Enabled = false; int cnt = ArrayFileInfo.Count; for (int i = lastIndexAdded; i < cnt; i++) { FileInfoStruct fis = (FileInfoStruct)ArrayFileInfo[i]; FileInfoData.FileInfoRow r = this.fileInfoDataStreams.FileInfo.NewFileInfoRow(); r.BeginEdit(); r.File_Name = fis.File_Name; r.Stream_Name = fis.Stream_Name; r.Stream_Size = fis.Stream_Size; r.Location = fis.Location; r.Creation_Date = fis.Creation_Date; r.EndEdit(); this.fileInfoDataStreams.FileInfo.AddFileInfoRow(r); } lastIndexAdded = cnt; this.timerGrid.Enabled = true; }
/// <summary> /// Opens hex editor on row double click. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dataGridResult_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { DataGridView dgv = sender as DataGridView; DataRowView drv = dgv.Rows[e.RowIndex].DataBoundItem as DataRowView; FileInfoData.FileInfoRow fir = drv.Row as FileInfoData.FileInfoRow; HexEditor he = new HexEditor(); NTFS.FileStreams FS = new NTFS.FileStreams(fir.File_Name); foreach (NTFS.StreamInfo s in FS) { if (s.Name == fir.Stream_Name) { using (FileStream fs = s.Open(FileMode.Open)) { if (fs == null) { MessageBox.Show("Accessing acquired file failed, " + "maybe you have insufficient rights or the file is in use.", "Access failed", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } he.labelFileName.Text = fir.File_Name; he.labelStreamName.Text = fir.Stream_Name; he.fileStream = fs; he.hexBoxFileContent.ByteProvider = new DynamicFileByteProvider(fs); he.ShowDialog(); } } } he.Dispose(); he = null; }