コード例 #1
0
        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;
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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();
            }
        }
コード例 #4
0
        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;
            }
        }
コード例 #5
0
        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;
                }
            }
        }
コード例 #8
0
        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;
                }
            }
        }