diff --git a/Aaru.Core/Media/Info/ScsiInfo.cs b/Aaru.Core/Media/Info/ScsiInfo.cs index ed49b5bc4..536ccccee 100644 --- a/Aaru.Core/Media/Info/ScsiInfo.cs +++ b/Aaru.Core/Media/Info/ScsiInfo.cs @@ -45,10 +45,12 @@ using Aaru.Decoders.SCSI; using Aaru.Decoders.SCSI.MMC; using Aaru.Decoders.SCSI.SSC; using Aaru.Decoders.Xbox; +using Aaru.Decryption.DVD; using Aaru.Devices; using DeviceInfo = Aaru.Core.Devices.Info.DeviceInfo; using DMI = Aaru.Decoders.Xbox.DMI; using Inquiry = Aaru.CommonTypes.Structs.Devices.SCSI.Inquiry; +using DVDDecryption = Aaru.Decryption.DVD.Dump; namespace Aaru.Core.Media.Info { @@ -712,18 +714,33 @@ namespace Aaru.Core.Media.Info #endregion DVD-R and HD DVD-R } + var dvdDecrypt = new Dump(dev); + sense = dvdDecrypt.ReadBusKey(out cmdBuf, out senseBuf, CopyrightType.CSS, dev.Timeout, out _); + + if(!sense) + { + sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, + MmcDiscStructureFormat.DiscKey, dvdDecrypt.Agid, dev.Timeout, out _); + + if(sense) + AaruConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: Disc Key\n{0}", + Decoders.SCSI.Sense.PrettifySense(senseBuf)); + else + DvdDiscKey = cmdBuf; + + sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.Dvd, 0, 0, + MmcDiscStructureFormat.SectorCopyrightInformation, dvdDecrypt.Agid, + dev.Timeout, out _); + + if(sense) + AaruConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: Sector CMI\n{0}", + Decoders.SCSI.Sense.PrettifySense(senseBuf)); + else + DvdSectorCmi = cmdBuf; + } + #region Require drive authentication, won't work /* - sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.DVD, 0, 0, MmcDiscStructureFormat.DiscKey, 0, dev.Timeout, out _); - if(sense) - AaruConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: Disc Key\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf)); - else - DataFile.WriteTo("Media-Info command", outputPrefix, "_readdiscstructure_dvd_disckey.bin", "SCSI READ DISC STRUCTURE", cmdBuf); - sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.DVD, 0, 0, MmcDiscStructureFormat.SectorCopyrightInformation, 0, dev.Timeout, out _); - if(sense) - AaruConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: Sector CMI\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf)); - else - DataFile.WriteTo("Media-Info command", outputPrefix, "_readdiscstructure_dvd_sectorcmi.bin", "SCSI READ DISC STRUCTURE", cmdBuf); sense = dev.ReadDiscStructure(out cmdBuf, out senseBuf, MmcDiscStructureMediaType.DVD, 0, 0, MmcDiscStructureFormat.MediaIdentifier, 0, dev.Timeout, out _); if(sense) AaruConsole.DebugWriteLine("Media-Info command", "READ DISC STRUCTURE: Media ID\n{0}", Decoders.SCSI.Sense.PrettifySense(senseBuf)); @@ -1514,5 +1531,7 @@ namespace Aaru.Core.Media.Info public DensitySupport.DensitySupportHeader? DensitySupportHeader { get; } public byte[] MediaTypeSupport { get; } public DensitySupport.MediaTypeSupportHeader? MediaTypeSupportHeader { get; } + public byte[] DvdSectorCmi { get; } + public byte[] DvdDiscKey { get; } } } \ No newline at end of file diff --git a/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs b/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs index ea3b53a4e..6803fb14f 100644 --- a/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs +++ b/Aaru.Gui/ViewModels/Windows/MediaDumpViewModel.cs @@ -810,7 +810,7 @@ namespace Aaru.Gui.ViewModels.Windows Persistent, StopOnError, _resume, dumpLog, encoding, _outputPrefix, Destination, parsedOptions, _sidecar, (uint)Skipped, ExistingMetadata == false, Trim == false, Track1Pregap, true, false, DumpSubchannel.Any, 0, false, false, false, false, false, - true, errorLog, false, 64, true); + true, errorLog, false, 64, true, false, true, false); new Thread(DoWork).Start(); } diff --git a/Aaru/Commands/Media/Info.cs b/Aaru/Commands/Media/Info.cs index 53b5afcf0..fa295447e 100644 --- a/Aaru/Commands/Media/Info.cs +++ b/Aaru/Commands/Media/Info.cs @@ -296,6 +296,14 @@ namespace Aaru.Commands.Media AaruConsole.WriteLine("Lead-In CMI:\n{0}", CSS_CPRM.PrettifyLeadInCopyright(scsiInfo.DvdCmi)); } + if(scsiInfo.DvdDiscKey != null) + DataFile.WriteTo("Media-Info command", outputPrefix, "_readdiscstructure_dvd_disckey.bin", + "SCSI READ DISC STRUCTURE", scsiInfo.DvdDiscKey); + + if(scsiInfo.DvdSectorCmi != null) + DataFile.WriteTo("Media-Info command", outputPrefix, "_readdiscstructure_dvd_sectorcmi.bin", + "SCSI READ DISC STRUCTURE", scsiInfo.DvdSectorCmi); + if(scsiInfo.DvdBca != null) DataFile.WriteTo("Media-Info command", outputPrefix, "_readdiscstructure_dvd_bca.bin", "SCSI READ DISC STRUCTURE", scsiInfo.DvdBca);