Beispiel #1
0
        private static void WriteParentLocations(DiskImageFileInfo info)
        {
            Console.Write("    Parent Locations: ");

            bool first = true;

            foreach (var entry in info.ParentLocatorEntries)
            {
                if (!first)
                {
                    Console.WriteLine("                      ");
                }
                first = false;

                Console.WriteLine("{0} -> {1}", entry.Key, entry.Value);
            }

            if (first)
            {
                Console.WriteLine();
            }
        }
Beispiel #2
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();
                }
            }
        }
Beispiel #3
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();
                }
            }
        }