public override bool DetectROM(string inputPath, out string titleID, out uint regionID)
 {
     regionID = 0;
     using (FileStream isoStream = File.Open(inputPath, FileMode.Open))
     {
         if (!CDReader.Detect(isoStream))
         {
             titleID = null;
             return(false);
         }
         else
         {
             CDReader cd = new CDReader(isoStream, true);
             titleID = null;
             bool confirm = false;
             if (cd.FileExists(@"UMD_DATA.BIN"))
             {
                 using (StreamReader sr = new StreamReader(cd.OpenFile(@"UMD_DATA.BIN", FileMode.Open)))
                 {
                     titleID = sr.ReadLine().Substring(0, 10);
                 }
                 confirm = true;
             }
             cd.Dispose();
             return(confirm);
         }
     }
 }
Exemple #2
0
        public static VirtualFileSystemEntry ToVirtualFileSystemEntry(this CDReader isoFileSystem, string path)
        {
            if (isoFileSystem.FileExists(path))
            {
                var fileName = Path.GetFileName(path);
                if (fileName.EndsWith(";1"))
                {
                    fileName = fileName.Substring(0, fileName.Length - 2);
                }

                return(new VirtualFile(null, isoFileSystem.OpenFile(path, FileMode.Open), fileName));
            }
            else
            {
                var directory = new VirtualDirectory(null, Path.GetFileName(path));

                foreach (var file in isoFileSystem.GetFiles(path))
                {
                    var entry = ToVirtualFileSystemEntry(isoFileSystem, file);
                    entry.MoveTo(directory);
                }

                foreach (var subDirectory in isoFileSystem.GetDirectories(path))
                {
                    var entry = ToVirtualFileSystemEntry(isoFileSystem, subDirectory);
                    entry.MoveTo(directory);
                }

                return(directory);
            }
        }
Exemple #3
0
        public override CompressedFile FindFile(string fullPath)
        {
            if (!_cd.FileExists(fullPath))
            {
                return(null);
            }
            var content = new CompressedFile
            {
                ArcPath  = Path,
                FullName = fullPath
            };

            content.Name = content.FullName.Split('\\').LastOrDefault();

            return(content);
        }
Exemple #4
0
        private XenServerPatchAlert GetAlertFromIsoFile(string fileName, out bool hasUpdateXml, out bool isUpgradeIso)
        {
            hasUpdateXml = false;
            isUpgradeIso = false;

            if (!fileName.EndsWith(InvisibleMessages.ISO_UPDATE))
            {
                return(null);
            }

            var xmlDoc = new XmlDocument();

            try
            {
                using (var isoStream = File.OpenRead(fileName))
                {
                    var cd = new CDReader(isoStream, true);
                    if (cd.Exists("Update.xml"))
                    {
                        using (var fileStream = cd.OpenFile("Update.xml", FileMode.Open))
                        {
                            xmlDoc.Load(fileStream);
                            hasUpdateXml = true;
                        }
                    }

                    if (cd.Exists(@"repodata\repomd.xml") && cd.FileExists(".treeinfo"))
                    {
                        using (var fileStream = cd.OpenFile(".treeinfo", FileMode.Open))
                        {
                            var iniDoc = new IniDocument(fileStream);
                            var entry  = iniDoc.FindEntry("platform", "name");
                            if (entry != null && entry.Value == "XCP")
                            {
                                isUpgradeIso = true;
                                return(null);
                            }
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                log.Error("Exception while reading the update data from the iso file:", exception);
            }

            var elements = xmlDoc.GetElementsByTagName("update");
            var update   = elements.Count > 0 ? elements[0] : null;

            if (update == null || update.Attributes == null)
            {
                return(null);
            }

            var uuid = update.Attributes["uuid"];

            return(uuid != null?Updates.FindPatchAlertByUuid(uuid.Value) : null);
        }
        public static string DetectPs2Sku(FileInfo isofile)
        {
            Stream isoStream;

            if (isBinFile(isofile))
            {
                isoStream = new RawCdRomStream(isofile);
            }
            else
            {
                isoStream = isofile.OpenRead();
            }

            if (!CDReader.Detect(isoStream))
            {
                return(null);
            }
            CDReader cdReader = new CDReader(isoStream, false, true);

            if (!cdReader.FileExists("SYSTEM.CNF"))
            {
                cdReader.Dispose();
                isoStream.Dispose();
                return(null);
            }

            SparseStream systemCnfStream = cdReader.OpenFile("SYSTEM.CNF", FileMode.Open, FileAccess.Read);
            StreamReader systemCnfReader = new StreamReader(systemCnfStream, Encoding.ASCII);
            string       boot2           = null;

            while (!systemCnfReader.EndOfStream)
            {
                boot2 = systemCnfReader.ReadLine();
                if (boot2.ToUpperInvariant().StartsWith("BOOT"))
                {
                    break;
                }
            }
            systemCnfReader.Dispose();
            systemCnfStream.Dispose();

            while (boot2.Contains("\\"))
            {
                boot2 = boot2.Substring(1);
            }

            if (boot2.EndsWith(";1"))
            {
                boot2 = boot2.Substring(0, boot2.Length - 2);
            }

            cdReader.Dispose();
            isoStream.Dispose();
            return(boot2);
        }
 public PSPGame(String iso)
 {
     Readable = true;
     try
     {
         FileStream FileISO   = File.Open(iso, FileMode.Open, FileAccess.Read);
         CDReader   ReaderISO = new CDReader(FileISO, true);
         FileName = iso;
         FileSize = FileISO.Length;
         if (!ReaderISO.FileExists("PSP_GAME\\PARAM.SFO"))
         {
             throw new NotImplementedException();
         }
         FileISO.Close();
     }
     catch (Exception ex)
     {
         Readable = false;
         Console.WriteLine("-----------------------------------------------------");
         Console.WriteLine("PSPGame(" + iso + ")");
         Console.WriteLine(ex.Message);
         Console.WriteLine("-----------------------------------------------------");
     }
 }
Exemple #7
0
        static bool ProcessRecoveryISO(Stream isoStream, string outputPath, bool extractFiles = true, bool consoleOutput = true)
        {
            if (ProcessRecoveryGDF(isoStream, outputPath, extractFiles, consoleOutput))
            {
                return(true);
            }

            DiscUtils.Vfs.VfsFileSystemFacade vfs = new CDReader(isoStream, true, false);
            if (!vfs.FileExists("recctrl.bin"))
            {
                vfs = new UdfReader(isoStream);
            }
            if (!vfs.FileExists("recctrl.bin"))
            {
                Console.WriteLine("Failed to find recctrl.bin inside image!");
                return(false);
            }

            using (var reader = new BinaryReader(vfs.OpenFile("recctrl.bin", FileMode.Open)))
            {
                Stream dataStream = null;
                if (extractFiles)
                {
                    dataStream = vfs.OpenFile("recdata.bin", FileMode.Open);
                }

                bool res = ProcessRecovery(reader, dataStream, outputPath, consoleOutput);

                if (dataStream != null)
                {
                    dataStream.Close();
                }

                return(res);
            }
        }
Exemple #8
0
        // Extracts the package.rdp from a GEB iso
        public static bool Extract(string isoPath, bool debug)
        {
            try
            {
                // Debug mode only variables
                long   bytesReadTotal   = 0;
                string percentageString = "# Extracting package.rdp - 0%";

                // Initializing virtual ISO disc
                if (debug)
                {
                    Console.WriteLine("# Reading ISO File System...");
                }
                CDReader isoFile = new CDReader(new FileStream(isoPath, FileMode.Open), false);

                if (debug)
                {
                    Console.WriteLine("# Checking ISO Files...");
                }
                // Check if file exists
                if (isoFile.FileExists("\\PSP_GAME\\USRDIR\\package.rdp"))
                {
                    if (debug)
                    {
                        Console.WriteLine("# Initializing Streams and Buffers");
                    }
                    // Initializing Streams and buffers
                    Stream     packageStream = isoFile.OpenFile("\\PSP_GAME\\USRDIR\\package.rdp", FileMode.Open);
                    FileStream outStream     = new FileStream("package.rdp", FileMode.Create, FileAccess.Write);
                    int        bufferLenght  = 2048;
                    byte[]     buffer        = new byte[bufferLenght];

                    if (debug)
                    {
                        Console.Write(percentageString);
                    }
                    // Extract the package.rdp
                    int bytesRead = packageStream.Read(buffer, 0, bufferLenght);
                    bytesReadTotal += bytesRead;
                    while (bytesRead > 0)
                    {
                        outStream.Write(buffer, 0, bytesRead);
                        outStream.Flush();
                        bytesRead       = packageStream.Read(buffer, 0, bufferLenght);
                        bytesReadTotal += bytesRead;
                        if (debug)
                        {
                            int currentPercentage = (int)((bytesReadTotal * 100) / packageStream.Length);
                            if (percentageString != "# Extracting package.rdp - " + currentPercentage + "%")
                            {
                                percentageString = "# Extracting package.rdp - " + currentPercentage + "%";
                                Console.Write("\r" + percentageString);
                            }
                        }
                    }
                    Console.WriteLine("\n# Closing Streams");
                    // Close Streams
                    outStream.Close();
                    packageStream.Close();
                }
                // Iso not valid
                else
                {
                    if (debug)
                    {
                        Console.WriteLine("# Can't find the file \"\\PSP_GAME\\USRDIR\\package.rdp\" into the Iso File System");
                        Console.WriteLine("# Disposing Iso File System");
                    }
                    // Close Virtual Iso
                    isoFile.Dispose();
                    return(false);
                }

                if (debug)
                {
                    Console.WriteLine("# Disposing Iso File System");
                }
                // Close Virtual Iso
                isoFile.Dispose();
                return(true);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Exemple #9
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="isoPath"></param>
        /// <param name="debug"></param>
        /// <returns>-2 package.rdp dimension, -1 Iso not valid, 1 inserted</returns>
        public static int Insert(string isoPath, bool debug)
        {
            try
            {
                // Debug mode only variables
                long   bytesReadTotal   = 0;
                string percentageString = "# Inserting package.rdp - 0%";

                // Initializing virtual ISO disc
                if (debug)
                {
                    Console.WriteLine("# Reading ISO File System...");
                }
                FileStream isoStream = new FileStream(isoPath, FileMode.Open, FileAccess.ReadWrite);
                CDReader   isoFile   = new CDReader(isoStream, false);

                if (debug)
                {
                    Console.WriteLine("# Checking ISO Files...");
                }
                // Check if file exists
                if (isoFile.FileExists("\\PSP_GAME\\USRDIR\\package.rdp"))
                {
                    if (debug)
                    {
                        Console.WriteLine("# Initializing Streams and Buffers");
                    }
                    // Initializing Streams and buffers
                    Stream     packageStream = isoFile.OpenFile("\\PSP_GAME\\USRDIR\\package.rdp", FileMode.Open, FileAccess.Read);
                    FileStream inStream      = new FileStream("package.rdp", FileMode.Open, FileAccess.Read);
                    int        bufferLenght  = 2048;
                    byte[]     buffer        = new byte[bufferLenght];

                    if (debug)
                    {
                        Console.WriteLine("# Checking package.rdp files dimensions");
                    }
                    // Checking package.rdp dimensions
                    if (inStream.Length != packageStream.Length)
                    {
                        if (debug)
                        {
                            Console.WriteLine("# The package.rdp has a different dimension from the original one.");
                            Console.WriteLine("# Disposing Iso File System");
                        }
                        // Close Virtual Iso
                        isoFile.Dispose();
                        return(-2);
                    }

                    // Closing useless streams
                    packageStream.Close();
                    packageStream.Dispose();
                    isoFile.Dispose();
                    isoFile = null;

                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                    GC.Collect();
                    GC.WaitForPendingFinalizers();

                    if (debug)
                    {
                        Console.WriteLine("# Initializing injecter...");
                    }

                    byte[] rdpUnique = new byte[0x60];
                    inStream.Seek(0, SeekOrigin.Begin);
                    inStream.Read(rdpUnique, 0, 0x60);
                    inStream.Seek(0, SeekOrigin.Begin);

                    long rdpOffset = localizeRDP(rdpUnique, isoStream);
                    isoStream.Seek(rdpOffset, SeekOrigin.Begin);

                    if (debug)
                    {
                        Console.Write(percentageString);
                    }
                    // Inserting the package.rdp
                    int bytesRead = inStream.Read(buffer, 0, bufferLenght);
                    bytesReadTotal += bytesRead;
                    while (bytesRead > 0)
                    {
                        isoStream.Write(buffer, 0, bytesRead);
                        isoStream.Flush();
                        bytesRead       = inStream.Read(buffer, 0, bufferLenght);
                        bytesReadTotal += bytesRead;
                        if (debug)
                        {
                            int currentPercentage = (int)((bytesReadTotal * 100) / packageStream.Length);
                            if (percentageString != "# Inserting package.rdp - " + currentPercentage + "%")
                            {
                                percentageString = "# Inserting package.rdp - " + currentPercentage + "%";
                                Console.Write("\r" + percentageString);
                            }
                        }
                    }
                    Console.WriteLine("\n# Closing Streams");
                    // Close Streams
                    inStream.Close();
                    isoStream.Close();
                }
                // Iso not valid
                else
                {
                    if (debug)
                    {
                        Console.WriteLine("# Can't find the file \"\\PSP_GAME\\USRDIR\\package.rdp\" into the Iso File System");
                        Console.WriteLine("# Disposing Iso File System");
                    }
                    // Close Virtual Iso
                    isoFile.Dispose();
                    return(-1);
                }
                return(1);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }