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); }