Пример #1
0
        public void Properties_Work()
        {
            using (Stream stream = File.OpenRead("TestAssets/ipod-fat32.dmg"))
                using (DiskImageFile file = new DiskImageFile(stream, Ownership.None))
                {
                    var buffer = file.Buffer;

                    Assert.Equal(2, buffer.Blocks.Count);
                    Assert.True(buffer.CanRead);
                    Assert.False(buffer.CanWrite);
                    Assert.Equal(0x2107e00, buffer.Capacity);
                }
        }
Пример #2
0
        public void ConstructorFromFiles()
        {
            MemoryStream  baseStream = new MemoryStream();
            DiskImageFile baseFile   = DiskImageFile.InitializeDynamic(baseStream, Ownership.Dispose, 16 * 1024L * 1024 * 1024);

            MemoryStream  childStream = new MemoryStream();
            DiskImageFile childFile   = DiskImageFile.InitializeDifferencing(childStream, Ownership.Dispose, baseFile, @"C:\temp\foo.vhd", @".\foo.vhd", DateTime.Now);

            MemoryStream  grandChildStream = new MemoryStream();
            DiskImageFile grandChildFile   = DiskImageFile.InitializeDifferencing(grandChildStream, Ownership.Dispose, childFile, @"C:\temp\child1.vhd", @".\child1.vhd", DateTime.Now);

            using (Disk disk = new Disk(new DiskImageFile[] { grandChildFile, childFile, baseFile }, Ownership.Dispose))
            {
                Assert.NotNull(disk.Content);
            }
        }
Пример #3
0
        public void InitializeDifferencing()
        {
            MemoryStream  baseStream = new MemoryStream();
            MemoryStream  diffStream = new MemoryStream();
            DiskImageFile baseFile   = DiskImageFile.InitializeDynamic(baseStream, Ownership.Dispose, 16 * 1024L * 1024 * 1024);

            using (Disk disk = Disk.InitializeDifferencing(diffStream, Ownership.None, baseFile, Ownership.Dispose, @"C:\TEMP\Base.vhd", @".\Base.vhd", DateTime.UtcNow))
            {
                Assert.NotNull(disk);
                Assert.True(disk.Geometry.Capacity > 15.8 * 1024L * 1024 * 1024 && disk.Geometry.Capacity <= 16 * 1024L * 1024 * 1024);
                Assert.True(disk.Geometry.Capacity == baseFile.Geometry.Capacity);
                Assert.Equal(2, new List <VirtualDiskLayer>(disk.Layers).Count);
            }
            Assert.True(1 * 1024 * 1024 > diffStream.Length);
            diffStream.Dispose();
        }
Пример #4
0
        public void InitializeDifferencingRelPath()
        {
            DiscFileSystem fs = new InMemoryFileSystem();

            DiskImageFile baseFile = DiskImageFile.Initialize(fs, @"\dir\subdir\base.vmdk", 16 * 1024L * 1024 * 1024, DiskCreateType.MonolithicSparse);

            using (Disk disk = Disk.InitializeDifferencing(fs, @"\dir\diff.vmdk", DiskCreateType.MonolithicSparse, @"subdir\base.vmdk"))
            {
                Assert.NotNull(disk);
                Assert.True(disk.Geometry.Capacity > 15.8 * 1024L * 1024 * 1024 && disk.Geometry.Capacity < 16 * 1024L * 1024 * 1024);
                Assert.True(disk.Content.Length == 16 * 1024L * 1024 * 1024);
                Assert.Equal(2, new List <VirtualDiskLayer>(disk.Layers).Count);
            }
            Assert.True(fs.GetFileLength(@"\dir\diff.vmdk") > 2 * 1024 * 1024);
            Assert.True(fs.GetFileLength(@"\dir\diff.vmdk") < 4 * 1024 * 1024);
        }
Пример #5
0
        public void InitializeDifferencing()
        {
            MemoryStream baseStream = new MemoryStream();
            MemoryStream diffStream = new MemoryStream();

            using (DiskImageFile baseFile = DiskImageFile.InitializeDynamic(baseStream, Ownership.Dispose, 16 * 1024L * 1024 * 1024))
            {
                using (DiskImageFile diffFile = DiskImageFile.InitializeDifferencing(diffStream, Ownership.None, baseFile, @"C:\TEMP\Base.vhd", @".\Base.vhd", new DateTime(2007, 12, 31)))
                {
                    Assert.NotNull(diffFile);
                    Assert.True(diffFile.Geometry.Capacity > 15.8 * 1024L * 1024 * 1024 && diffFile.Geometry.Capacity < 16 * 1024L * 1024 * 1024);
                    Assert.True(diffFile.IsSparse);
                    Assert.NotEqual(diffFile.CreationTimestamp, new DateTime(2007, 12, 31));
                }
            }
            Assert.True(1 * 1024 * 1024 > diffStream.Length);
        }
Пример #6
0
        static void Main(string[] args)
        {
            string cvtPathFilename;
            string outPathFilename;
            bool   ignoreFileSignature;

            try
            {
                ParseCommandLineArgs(args, out cvtPathFilename, out outPathFilename, out ignoreFileSignature);
                byte[] imageData = DiskImageFile.ReadCvtFile(cvtPathFilename);
                CleanCvt(imageData, outPathFilename, ignoreFileSignature);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message.ToString());
                ShowUsageMsg();
            }
            //Console.ReadKey();
        }
Пример #7
0
        public void Lvm2VhdxZip()
        {
            SetupHelper.SetupComplete();
            using (FileStream fs = File.OpenRead(Path.Combine("..", "..", "..", "Lvm", "Data", "lvm2.zip")))
                using (Stream vhdx = ZipUtilities.ReadFileFromZip(fs))
                    using (var diskImage = new DiskImageFile(vhdx, Ownership.Dispose))
                        using (var disk = new Disk(new List <DiskImageFile> {
                            diskImage
                        }, Ownership.Dispose))
                        {
                            var manager        = new VolumeManager(disk);
                            var logicalVolumes = manager.GetLogicalVolumes();
                            Assert.Equal(3, logicalVolumes.Length);

                            Assert.Equal(1283457024, logicalVolumes[0].Length);
                            Assert.Equal(746586112, logicalVolumes[1].Length);
                            Assert.Equal(1178599424, logicalVolumes[2].Length);
                        }
        }
Пример #8
0
        public void FooterMissing()
        {
            //
            // Simulates a partial failure extending the file, that the file footer is corrupt - should read start of the file instead.
            //

            Geometry geometry;

            MemoryStream stream = new MemoryStream();

            using (DiskImageFile file = DiskImageFile.InitializeDynamic(stream, Ownership.None, 16 * 1024L * 1024 * 1024))
            {
                geometry = file.Geometry;
            }

            stream.SetLength(stream.Length - 512);

            using (DiskImageFile file = new DiskImageFile(stream))
            {
                Assert.Equal(geometry, file.Geometry);
            }
        }
Пример #9
0
        public void InitializeDifferencing()
        {
            DiscFileSystem fs = new InMemoryFileSystem();

            DiskImageFile baseFile = DiskImageFile.Initialize(fs, @"\base\base.vmdk", 16 * 1024L * 1024 * 1024, DiskCreateType.MonolithicSparse);

            using (Disk disk = Disk.InitializeDifferencing(fs, @"\diff\diff.vmdk", DiskCreateType.MonolithicSparse, @"\base\base.vmdk"))
            {
                Assert.NotNull(disk);
                Assert.True(disk.Geometry.Capacity > 15.8 * 1024L * 1024 * 1024 && disk.Geometry.Capacity < 16 * 1024L * 1024 * 1024);
                Assert.True(disk.Content.Length == 16 * 1024L * 1024 * 1024);
                Assert.Equal(2, new List <VirtualDiskLayer>(disk.Layers).Count);

                List <DiskImageFile> links = new List <DiskImageFile>(disk.Links);
                Assert.Equal(2, links.Count);

                List <string> paths = new List <string>(links[0].ExtentPaths);
                Assert.Equal(1, paths.Count);
                Assert.Equal("diff.vmdk", paths[0]);
            }
            Assert.True(fs.GetFileLength(@"\diff\diff.vmdk") > 2 * 1024 * 1024);
            Assert.True(fs.GetFileLength(@"\diff\diff.vmdk") < 4 * 1024 * 1024);
        }
Пример #10
0
 /// <summary>
 /// Initializes a new instance of the Disk class.
 /// </summary>
 /// <param name="file">The file containing the disk image.</param>
 public Disk(DiskImageFile file)
 {
     _diskImage = file;
 }
Пример #11
0
 static void CleanCvt(byte[] cvtData, string outPathFilename, bool ignoreFileSignature)
 {
     byte[] cleanCvt = GEOSDisk.GetCleanCvtFromCvt(cvtData, ignoreFileSignature);
     DiskImageFile.WriteFile(cleanCvt, outPathFilename);
 }
Пример #12
0
        static void ShowDir(string imagePathFilename)
        {
            byte[]    bamBlock;
            ArrayList dirEntryList = new ArrayList();

            //string imagePathFilename = @"free.d64";
            byte[] imageData     = DiskImageFile.ReadFile(imagePathFilename);
            int    imageDataType = DiskImageFile.GetImageDataType(imagePathFilename);

            bamBlock = DOSDisk.ReadBAMBlock(imageData, imageDataType);
            Console.Write("0 \"{0}\" {1} {2}"
                          , Core.ConvertPETSCII2ASCII(DOSDisk.GetDiskName(bamBlock, imageDataType))
                          , Core.ConvertPETSCII2ASCII(DOSDisk.GetDiskID(bamBlock, imageDataType))
                          , Core.ConvertPETSCII2ASCII(DOSDisk.GetDOSType(bamBlock, imageDataType)));
            Console.Write("    ");
            Console.Write("|{0}", "DirIndex");
            Console.Write("|{0}", "  GEOS  ");
            Console.Write("|{0}", "MD5");
            Console.WriteLine();
            dirEntryList = DOSDisk.GetDirEntryList(bamBlock, imageData, imageDataType);
            int dirIndex = 0;

            foreach (byte[] de in dirEntryList)
            {
                dirIndex++;
                if (!DOSDisk.IsDirEntryEmpty(de))
                {
                    string filename = Core.ConvertPETSCII2ASCII(DOSDisk.GetFilename(de));
                    Console.Write("{0,-5}\"{1}\"{2}{3}{4}{5}"
                                  , DOSDisk.GetFileSizeInBlocks(de).ToString()
                                  , filename
                                  , Core.ConvertPETSCII2ASCII(DOSDisk.GetPartAfterFilename(de))
                                  , DOSDisk.GetSplatFileSign(de)
                                  , DOSDisk.GetFileTypeExt(de)
                                  , DOSDisk.GetLockFlagSign(de)
                                  );
                    Console.Write("  ");
                    Console.Write("|{0,8}", dirIndex.ToString());
                    Console.Write("|{0} {1}"
                                  , (GEOSDisk.IsGeosFile(de) ? GEOSDisk.GetGEOSFiletypeName(de) : "   ")
                                  , (GEOSDisk.IsGeosFile(de) ? GEOSDisk.GetGEOSFileStructureName(de) : "    ")
                                  );
                    Console.Write("|{0}"
                                  , DOSDisk.GetMD5ByCBMFile(de, imageData, imageDataType)
                                  );
                    Console.WriteLine();


                    //if (GEOSDisk.IsGeosFile(de))
                    //{
                    //    DiskImageFile.WriteCVTFile(de, imagePathFilename, filename);
                    //}
                    //else
                    //{
                    //    DiskImageFile.WriteFileBlockChain(de[1], de[2], imagePathFilename, filename);
                    //}
                }
            }
            Console.WriteLine("{0} BLOCKS FREE."
                              , DOSDisk.GetFreeBlocks(bamBlock).ToString()
                              );
        }
Пример #13
0
        protected override void DoRun()
        {
            using (DiskImageFile vhdxFile = new DiskImageFile(_vhdxFile.Value, FileAccess.Read))
            {
                DiskImageFileInfo info = vhdxFile.Information;

                FileInfo fileInfo = new FileInfo(_vhdxFile.Value);

                Console.WriteLine("File Info");
                Console.WriteLine("---------");
                Console.WriteLine("           File Name: {0}", fileInfo.FullName);
                Console.WriteLine("           File Size: {0} ({1} bytes)", Utilities.ApproximateDiskSize(fileInfo.Length), fileInfo.Length);
                Console.WriteLine("  File Creation Time: {0} (UTC)", fileInfo.CreationTimeUtc);
                Console.WriteLine("     File Write Time: {0} (UTC)", fileInfo.LastWriteTimeUtc);
                Console.WriteLine();

                Console.WriteLine("VHDX File Info");
                Console.WriteLine("--------------");
                Console.WriteLine("           Signature: {0:x8}", info.Signature);
                Console.WriteLine("             Creator: {0:x8}", info.Creator);
                Console.WriteLine("          Block Size: {0} (0x{0:X8})", info.BlockSize);
                Console.WriteLine("Leave Blocks Alloced: {0}", info.LeaveBlocksAllocated);
                Console.WriteLine("          Has Parent: {0}", info.HasParent);
                Console.WriteLine("           Disk Size: {0} ({1} (0x{1:X8}))", Utilities.ApproximateDiskSize(info.DiskSize), info.DiskSize);
                Console.WriteLine(" Logical Sector Size: {0} (0x{0:X8})", info.LogicalSectorSize);
                Console.WriteLine("Physical Sector Size: {0} (0x{0:X8})", info.PhysicalSectorSize);
                Console.WriteLine(" Parent Locator Type: {0}", info.ParentLocatorType);
                WriteParentLocations(info);
                Console.WriteLine();

                WriteHeaderInfo(info.FirstHeader);
                WriteHeaderInfo(info.SecondHeader);

                if (info.ActiveHeader.LogGuid != Guid.Empty)
                {
                    Console.WriteLine("Log Info (Active Sequence)");
                    Console.WriteLine("--------------------------");

                    foreach (var entry in info.ActiveLogSequence)
                    {
                        Console.WriteLine("   Log Entry");
                        Console.WriteLine("   ---------");
                        Console.WriteLine("         Sequence Number: {0}", entry.SequenceNumber);
                        Console.WriteLine("                    Tail: {0}", entry.Tail);
                        Console.WriteLine("     Flushed File Offset: {0} (0x{0:X8})", entry.FlushedFileOffset);
                        Console.WriteLine("        Last File Offset: {0} (0x{0:X8})", entry.LastFileOffset);
                        Console.WriteLine("            File Extents: {0}", entry.IsEmpty ? "<none>" : "");
                        foreach (var extent in entry.ModifiedExtents)
                        {
                            Console.WriteLine("                          {0} +{1}  (0x{0:X8} +0x{1:X8})", extent.Offset, extent.Count);
                        }
                        Console.WriteLine();
                    }
                }

                RegionTableInfo regionTable = info.RegionTable;
                Console.WriteLine("Region Table Info");
                Console.WriteLine("-----------------");
                Console.WriteLine("           Signature: {0}", regionTable.Signature);
                Console.WriteLine("            Checksum: {0:x8}", regionTable.Checksum);
                Console.WriteLine("         Entry Count: {0}", regionTable.Count);
                Console.WriteLine();

                foreach (var entry in regionTable)
                {
                    Console.WriteLine("Region Table Entry Info");
                    Console.WriteLine("-----------------------");
                    Console.WriteLine("                Guid: {0}", entry.Guid);
                    Console.WriteLine("     Well-Known Name: {0}", entry.WellKnownName);
                    Console.WriteLine("         File Offset: {0} (0x{0:X8})", entry.FileOffset);
                    Console.WriteLine("              Length: {0} (0x{0:X8})", entry.Length);
                    Console.WriteLine("         Is Required: {0}", entry.IsRequired);
                    Console.WriteLine();
                }

                MetadataTableInfo metadataTable = info.MetadataTable;
                Console.WriteLine("Metadata Table Info");
                Console.WriteLine("-------------------");
                Console.WriteLine("           Signature: {0}", metadataTable.Signature);
                Console.WriteLine("         Entry Count: {0}", metadataTable.Count);
                Console.WriteLine();

                foreach (var entry in metadataTable)
                {
                    Console.WriteLine("Metadata Table Entry Info");
                    Console.WriteLine("-------------------------");
                    Console.WriteLine("             Item Id: {0}", entry.ItemId);
                    Console.WriteLine("     Well-Known Name: {0}", entry.WellKnownName);
                    Console.WriteLine("              Offset: {0} (0x{0:X8})", entry.Offset);
                    Console.WriteLine("              Length: {0} (0x{0:X8})", entry.Length);
                    Console.WriteLine("             Is User: {0}", entry.IsUser);
                    Console.WriteLine("         Is Required: {0}", entry.IsRequired);
                    Console.WriteLine("     Is Virtual Disk: {0}", entry.IsVirtualDisk);
                    Console.WriteLine();
                }
            }
        }
Пример #14
0
        private void doOpenFile(string fileName)
        {
            listView1.Items.Clear();
            textBoxInfoText.Text = "";
            string[] MP3FileArray =
            {
                "StartMP3_64",
                "StartMP64.1",
                "StartMP64.2",
                "StartMP64.3",
                "StartMP64.4",
                "StartMP64.5",
                "StartMP3_128",
                "StartMP128.1",
                "StartMP128.2",
                "StartMP128.3",
                "StartMP128.4",
                "StartMP128.5"
            };
            listView1.Columns[0].TextAlign = HorizontalAlignment.Right;

            string imagePathFilename = fileName;

            byte[]    bamBlock;
            ArrayList dirEntryList = new ArrayList();

            byte[] imageData = DiskImageFile.ReadFile(imagePathFilename);
            String md5       = Core.GetMD5Hash(imageData);

            textBoxFilename.Text = fileName + " MD5:" + md5;

            int imageDataType = DiskImageFile.GetImageDataType(imagePathFilename);

            bamBlock = DOSDisk.ReadBAMBlock(imageData, imageDataType);
            textBoxDiskLabel.Text = String.Format("0 \"{0}\" {1} {2}"
                                                  , Core.ConvertPETSCII2ASCII(DOSDisk.GetDiskName(bamBlock, imageDataType))
                                                  , Core.ConvertPETSCII2ASCII(DOSDisk.GetDiskID(bamBlock, imageDataType))
                                                  , Core.ConvertPETSCII2ASCII(DOSDisk.GetDOSType(bamBlock, imageDataType)));

            dirEntryList = DOSDisk.GetDirEntryList(bamBlock, imageData, imageDataType);

            textBoxInfoText.Text += "{|class=\"wikitable\"" + Environment.NewLine;
            textBoxInfoText.Text += "|" + Environment.NewLine;
            textBoxInfoText.Text += "{|" + Environment.NewLine;
            textBoxInfoText.Text += "| '''Imagedatei'''" + Environment.NewLine;
            textBoxInfoText.Text += "| ''':'''" + Environment.NewLine;
            textBoxInfoText.Text += "|" + Path.GetFileName(imagePathFilename) + Environment.NewLine;
            textBoxInfoText.Text += "|-" + Environment.NewLine;
            textBoxInfoText.Text += "|'''Imagedatei MD5'''" + Environment.NewLine;
            textBoxInfoText.Text += "|''':'''" + Environment.NewLine;
            textBoxInfoText.Text += "|" + md5 + Environment.NewLine;
            textBoxInfoText.Text += "|-" + Environment.NewLine;
            textBoxInfoText.Text += "|'''Quelle'''" + Environment.NewLine;
            textBoxInfoText.Text += "|''':'''" + Environment.NewLine;
            textBoxInfoText.Text += "|" + Environment.NewLine;
            textBoxInfoText.Text += "|}" + Environment.NewLine;
            textBoxInfoText.Text += "{| class=\"wikitable sortable\"" + Environment.NewLine;
            textBoxInfoText.Text += "!Nr." + Environment.NewLine;
            textBoxInfoText.Text += "!Datei" + Environment.NewLine;
            textBoxInfoText.Text += "!style=\"text-align:right\"|Größe" + Environment.NewLine;
            textBoxInfoText.Text += "!MD5" + Environment.NewLine;
            textBoxInfoText.Text += "!Info" + Environment.NewLine;

            int dirIndex = 0;

            foreach (byte[] de in dirEntryList)
            {
                dirIndex++;
                if (!DOSDisk.IsDirEntryEmpty(de))
                {
                    String[] colText =
                    {
                        Core.ConvertPETSCII2ASCII(DOSDisk.GetFilename(de)) + Core.ConvertPETSCII2ASCII(DOSDisk.GetPartAfterFilename(de)),
                        DOSDisk.GetFileSizeInBlocks(de).ToString(),
                        DOSDisk.GetSplatFileSign(de),
                        DOSDisk.GetFileTypeExt(de),
                        DOSDisk.GetLockFlagSign(de),
                        dirIndex.ToString(),
                        (GEOSDisk.IsGeosFile(de) ? GEOSDisk.GetGEOSFiletypeName(de) : "   "),
                        (GEOSDisk.IsGeosFile(de) ? GEOSDisk.GetGEOSFileStructureName(de) : "    "),
                        DOSDisk.GetMD5ByCBMFile(de,                                                                                      imageData,  imageDataType),
                        DOSDisk.GetInfoTextByMP3File(de,                                                                                 imageData,  imageDataType),
                    };
                    ListViewItem listViewItem = new ListViewItem(colText[0]); // first col
                    listViewItem.SubItems.Add(colText[1]);
                    listViewItem.SubItems.Add(colText[2]);
                    listViewItem.SubItems.Add(colText[3]);
                    listViewItem.SubItems.Add(colText[4]);
                    listViewItem.SubItems.Add(colText[5]);
                    listViewItem.SubItems.Add(colText[6]);
                    listViewItem.SubItems.Add(colText[7]);
                    listViewItem.SubItems.Add(colText[8]);
                    listViewItem.SubItems.Add(colText[9]);
                    listView1.Items.Add(listViewItem);
                    //textBoxInfoText.Text += String.Format("{0,-16} {1,5}  {2,-32} {3}{4}", colText[0],colText[1],colText[8], colText[9],Environment.NewLine);
                    Boolean IsBold = MP3FileArray.Contains(colText[0].TrimEnd());
                    textBoxInfoText.Text += "|-" + Environment.NewLine;
                    textBoxInfoText.Text += "|" + dirIndex + Environment.NewLine;
                    if (IsBold)
                    {
                        textBoxInfoText.Text += "|'''" + colText[0].TrimEnd() + "'''" + Environment.NewLine;
                    }
                    else
                    {
                        textBoxInfoText.Text += "|" + colText[0].TrimEnd() + Environment.NewLine;
                    }
                    textBoxInfoText.Text += "|style = \"text-align:right\" |" + colText[1] + Environment.NewLine;
                    textBoxInfoText.Text += "|" + colText[8] + Environment.NewLine;
                    textBoxInfoText.Text += "|" + colText[9] + Environment.NewLine;
                }
            }
            textBoxInfoText.Text += "|}" + Environment.NewLine;
            textBoxInfoText.Text += "|}" + Environment.NewLine;

            /*
             * {|class="wikitable"
             |
             | {|
             |'''Imagedatei'''
             |''':'''
             | MP3_64D.D81
             |-
             |'''Imagedatei MD5'''
             |''':'''
             | 93C4E05B0C50BBD6A4B6A9976FA6B35D
             |-
             |'''Quelle'''
             |''':'''
             |
             |}
             | {| class="wikitable sortable"
             | !Datei
             | !style="text-align:right"|Größe
             | !MD5
             | !Info
             |-
             |StartMP3_64
             |style="text-align:right"|56
             |9296FD29D63ED70733F943ACF7B4FD88
             |BUILD:FULL-090100.2020 Deutsch C64
             |}
             |}
             */
        }
Пример #15
0
        static void ExtraxctFile(string imagePathFilename, int dirIndex, string asciiCbmFilename, string outPathFilename)
        {
            byte[]    bamBlock;
            byte[]    dirEntry     = null;
            ArrayList dirEntryList = new ArrayList();

            byte[] imageData     = DiskImageFile.ReadFile(imagePathFilename);
            int    imageDataType = DiskImageFile.GetImageDataType(imagePathFilename);

            bamBlock     = DOSDisk.ReadBAMBlock(imageData, imageDataType);
            dirEntryList = DOSDisk.GetDirEntryList(bamBlock, imageData, imageDataType);
            // by DirIndex
            if (dirIndex > 0)
            {
                dirEntry = (byte[])dirEntryList[dirIndex - 1];
            }
            else
            {
                if (asciiCbmFilename.Length > 0)
                {
                    bool found = false;
                    foreach (byte[] de in dirEntryList)
                    {
                        if (Core.ConvertPETSCII2ASCII(DOSDisk.GetFilename(de)) == asciiCbmFilename)
                        {
                            if (!found)
                            {
                                dirEntry = de;
                                found    = true;
                            }
                            else
                            {
                                throw new Exception("Filename is not unique!");
                            }
                        }
                    }
                    if (!found)
                    {
                        throw new Exception(String.Format("Filename {0} not found!", asciiCbmFilename));
                    }
                }
                else
                {
                    throw new Exception("No file specified");
                }
            }
            string filename = (Core.ConvertPETSCII2ASCII(DOSDisk.GetFilename(dirEntry)));

            if (DOSDisk.GetFileType(dirEntry) == 0)
            {
                throw new Exception(String.Format("File {0} is deleted!", filename));
            }
            byte[] fileData = DOSDisk.getFileData(dirEntry, imageData, imageDataType);
            if (outPathFilename != "")
            {
                DiskImageFile.WriteFile(fileData, outPathFilename);
            }
            else
            {
                DiskImageFile.WriteFile(fileData, filename);
            }
        }
Пример #16
0
 /// <summary>
 /// Initializes a new instance of the Disk class.
 /// </summary>
 /// <param name="file">The contents of the disk.</param>
 private Disk(DiskImageFile file)
 {
     _file = file;
 }
Пример #17
0
 /// <summary>
 /// Initializes a new instance of the Disk class.
 /// </summary>
 /// <param name="path">The path to the disk image</param>
 /// <param name="access">The access requested to the disk</param>
 public Disk(string path, FileAccess access)
 {
     FileShare share = (access == FileAccess.Read) ? FileShare.Read : FileShare.None;
     _file = new DiskImageFile(new FileStream(path, FileMode.Open, access, share), Ownership.Dispose, null);
 }
Пример #18
0
 /// <summary>
 /// Initializes a new instance of the Disk class.
 /// </summary>
 /// <param name="path">The path to the disk image</param>
 public Disk(string path)
 {
     _file = new DiskImageFile(new FileStream(path, FileMode.Open, FileAccess.ReadWrite, FileShare.None), Ownership.Dispose, null);
 }
Пример #19
0
 /// <summary>
 /// Initializes a new instance of the Disk class.
 /// </summary>
 /// <param name="stream">The stream to read</param>
 /// <param name="ownsStream">Indicates if the new instance should control the lifetime of the stream.</param>
 /// <param name="geometry">The emulated geometry of the disk.</param>
 public Disk(Stream stream, Ownership ownsStream, Geometry geometry)
 {
     _file = new DiskImageFile(stream, ownsStream, geometry);
 }
Пример #20
0
        /// <summary>
        /// Disposes of underlying resources.
        /// </summary>
        /// <param name="disposing">Set to <c>true</c> if called within Dispose(),
        /// else <c>false</c>.</param>
        protected override void Dispose(bool disposing)
        {
            try
            {
                if (disposing)
                {
                    if (_file != null)
                    {
                        _file.Dispose();
                    }

                    _file = null;
                }
            }
            finally
            {
                base.Dispose(disposing);
            }
        }
Пример #21
0
        protected override void DoRun()
        {
            if (!_dontCheck.IsPresent)
            {
                using (Stream s = new FileStream(_vhdFile.Value, FileMode.Open, FileAccess.Read))
                {
                    FileChecker vhdChecker = new FileChecker(s);
                    if (!vhdChecker.Check(Console.Out, ReportLevels.All))
                    {
                        Console.WriteLine("Aborting: Invalid VHD file");
                        Environment.Exit(1);
                    }
                }
            }

            using (DiskImageFile vhdFile = new DiskImageFile(_vhdFile.Value, FileAccess.Read))
            {
                DiskImageFileInfo info = vhdFile.Information;

                FileInfo fileInfo = new FileInfo(_vhdFile.Value);

                Console.WriteLine("File Info");
                Console.WriteLine("---------");
                Console.WriteLine("           File Name: {0}", fileInfo.FullName);
                Console.WriteLine("           File Size: {0} bytes", fileInfo.Length);
                Console.WriteLine("  File Creation Time: {0} (UTC)", fileInfo.CreationTimeUtc);
                Console.WriteLine("     File Write Time: {0} (UTC)", fileInfo.LastWriteTimeUtc);
                Console.WriteLine();

                Console.WriteLine("Common Disk Info");
                Console.WriteLine("-----------------");
                Console.WriteLine("              Cookie: {0:x8}", info.Cookie);
                Console.WriteLine("            Features: {0:x8}", info.Features);
                Console.WriteLine(" File Format Version: {0}.{1}", ((info.FileFormatVersion >> 16) & 0xFFFF), (info.FileFormatVersion & 0xFFFF));
                Console.WriteLine("       Creation Time: {0} (UTC)", info.CreationTimestamp);
                Console.WriteLine("         Creator App: {0:x8}", info.CreatorApp);
                Console.WriteLine("     Creator Version: {0}.{1}", ((info.CreatorVersion >> 16) & 0xFFFF), (info.CreatorVersion & 0xFFFF));
                Console.WriteLine("     Creator Host OS: {0}", info.CreatorHostOS);
                Console.WriteLine("       Original Size: {0} bytes", info.OriginalSize);
                Console.WriteLine("        Current Size: {0} bytes", info.CurrentSize);
                Console.WriteLine("    Geometry (C/H/S): {0}", info.Geometry);
                Console.WriteLine("           Disk Type: {0}", info.DiskType);
                Console.WriteLine("            Checksum: {0:x8}", info.FooterChecksum);
                Console.WriteLine("           Unique Id: {0}", info.UniqueId);
                Console.WriteLine("         Saved State: {0}", info.SavedState);
                Console.WriteLine();

                if (info.DiskType == FileType.Differencing || info.DiskType == FileType.Dynamic)
                {
                    Console.WriteLine();
                    Console.WriteLine("Dynamic Disk Info");
                    Console.WriteLine("-----------------");
                    Console.WriteLine("              Cookie: {0}", info.DynamicCookie);
                    Console.WriteLine("      Header Version: {0}.{1}", ((info.DynamicHeaderVersion >> 16) & 0xFFFF), (info.DynamicHeaderVersion & 0xFFFF));
                    Console.WriteLine("         Block Count: {0}", info.DynamicBlockCount);
                    Console.WriteLine("          Block Size: {0} bytes", info.DynamicBlockSize);
                    Console.WriteLine("            Checksum: {0:x8}", info.DynamicChecksum);
                    Console.WriteLine("    Parent Unique Id: {0}", info.DynamicParentUniqueId);
                    Console.WriteLine("   Parent Write Time: {0} (UTC)", info.DynamicParentTimestamp);
                    Console.WriteLine("         Parent Name: {0}", info.DynamicParentUnicodeName);
                    Console.Write("    Parent Locations: ");
                    foreach (string parentLocation in info.DynamicParentLocators)
                    {
                        Console.Write("{0}\n                      ", parentLocation);
                    }
                    Console.WriteLine();
                }
            }
        }
Пример #22
0
 public DiskExtent(DiskImageFile file)
 {
     _file = file;
 }
Пример #23
0
 /// <summary>
 /// Initializes a new instance of the Disk class.  Differencing disks are not supported.
 /// </summary>
 /// <param name="stream">The stream to read</param>
 public Disk(Stream stream)
 {
     _diskImage = new DiskImageFile(stream);
 }
Пример #24
0
 public DiskExtent(DiskImageFile file)
 {
     _file = file;
 }
Пример #25
0
 /// <summary>
 /// Initializes a new instance of the Disk class.  Differencing disks are not supported.
 /// </summary>
 /// <param name="stream">The stream to read</param>
 /// <param name="ownsStream">Indicates if the new disk should take ownership of <paramref name="stream"/> lifetime.</param>
 public Disk(Stream stream, Ownership ownsStream)
 {
     _diskImage = new DiskImageFile(stream, ownsStream);
 }