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 static void Gather(Media medium, Stream infile)
        {
            string            failed  = "";
            XboxISOFileSource xboxIso = XboxISOFileSource.TryOpen(infile);

            if (xboxIso != null)
            {
                XDvdFsFileSystemEntry xdvdfs = xboxIso.GetFileSystem();
                Gather(medium, xdvdfs, null);
                infile.Dispose();
                return;
            }
            failed += "XDVDFS\n";

            if (CDReader.Detect(infile))
            {
                CDReader cdReader = new CDReader(infile, true, false);
                Gather(medium, cdReader.Root, null);
                infile.Dispose();
                return;
            }
            failed += "ISO9660\n";

            if (UdfReader.Detect(infile))
            {
                UdfReader udfReader = new UdfReader(infile);

                if (udfReader != null)
                {
                    try
                    {
                        Gather(medium, udfReader.Root, null);
                        return;
                    }
                    catch (Exception)
                    {
                        AzusaContext.GetInstance().DatabaseDriver.ForgetFilesystemContents(medium.Id);
                    }
                }
            }
            failed += "UDF\n";

            if (FatFileSystem.Detect(infile))
            {
                FatFileSystem fat = new FatFileSystem(infile);
                Gather(medium, fat.Root, null);
                infile.Dispose();
                return;
            }
            failed += "FAT32\n";

            if (infile.Length < 3200)
            {
                FileStream fileStream = infile as FileStream;
                if (fileStream != null)
                {
                    fileStream.Dispose();
                    FileInfo fi          = new FileInfo(fileStream.Name);
                    Stream   gdRomStream = GDROMReader.BuildGdRomStream(fi);
                    if (CDReader.Detect(gdRomStream))
                    {
                        CDReader cdReader = new CDReader(gdRomStream, true, false);
                        Gather(medium, cdReader.Root, null);
                        infile.Dispose();
                        return;
                    }
                }
            }
            failed += "GD-ROM\n";

            infile.Position = 0;
            byte[] firstSector = new byte[2352];
            if (infile.Read(firstSector, 0, firstSector.Length) == firstSector.Length)
            {
                byte[] firstSectorSync = new byte[cdromSyncBytes.Length];
                Array.Copy(firstSector, firstSectorSync, cdromSyncBytes.Length);
                if (memcmp(cdromSyncBytes, firstSectorSync))
                {
                    byte mode = firstSector[15];
                    if (mode == 1 || mode == 2)
                    {
                        infile.Position = 0;
                        RawCdRomStream rawCdRomStream = new RawCdRomStream(infile);
                        Gather(medium, rawCdRomStream);
                        return;
                    }
                }
            }
            failed += "RAW CD-ROM";

            MessageBox.Show("Konnte kein Dateisystem erkennen. Versucht wurden:" + failed);
        }