C# 在macOS上读取引导扇区CD驱动器

C# 在macOS上读取引导扇区CD驱动器,c#,macos,C#,Macos,我试图读取cd驱动器的引导扇区,以便提取其内容。不幸的是,无论我做什么,我似乎都无法让它工作。我已尝试将目录作为文件读取,但访问被拒绝。尝试直接从/dev/disk读取,但被锁定 我也尝试过检查和更改权限,但什么都没有 在Windows中,我将使用kernel32中的CreateFile&ReadFile。我只是不确定macOS的等价物是什么 public static List<DriveInfo> GetDrives() => DriveInfo.GetDrives().W

我试图读取cd驱动器的引导扇区,以便提取其内容。不幸的是,无论我做什么,我似乎都无法让它工作。我已尝试将目录作为文件读取,但访问被拒绝。尝试直接从/dev/disk读取,但被锁定

我也尝试过检查和更改权限,但什么都没有

在Windows中,我将使用kernel32中的CreateFile&ReadFile。我只是不确定macOS的等价物是什么

public static List<DriveInfo> GetDrives() => DriveInfo.GetDrives().Where(d => d.IsReady && d.DriveType == DriveType.CDRom).ToList();
public static ReadDrives()
{
  var drives = GetDrives()
  foreach(var drive in drives)
  {
    var root = drive.RootDirectory.FullName;
    using (var fp = File.OpenRead(@"/Volumes/Flash - Copy/"))
    {
       //extract boot here
    }

  }
}
publicstaticlist GetDrives()=>DriveInfo.GetDrives().Where(d=>d.IsReady&&d.DriveType==DriveType.CDRom).ToList();
公共静态读驱动器()
{
var drives=GetDrives()
foreach(var驱动器输入驱动器)
{
var root=drive.RootDirectory.FullName;
使用(var fp=File.OpenRead(@“/Volumes/Flash-Copy/”)
{
//在这里拔掉靴子
}
}
}

这不是最好的答案,但这对我来说很有效,不需要sudo

这至少是目前的一个解决方案

var command = $"-c \"umount {inputDisc} && dd if={inputDisc}  of={outputfile} bs=32k  count=1 && mount {inputDisc}\"";
Process.Start("/bin/bash", command);

首先,您需要确保您的程序以
根目录运行。不幸的是,我不相信它像简单地使用
File.Open…
File.Read…
那么简单。您可能需要pinvoke正确的系统调用。如果您使用的是Mono,我相信很多都已经实现了。若并没有,你们可能会有一些工作摆在你们面前:这里有一些和MBR一起工作的C源代码:我使用的是visual Studio,我想这是mono@我认为这取决于你如何创建你的项目。名称空间为
Mono.Unix.Native.Syscall
@Andy ok。此命名空间有一个.netstandard库。这是一个很好的起点,非常感谢。那可能不是一个单一项目。Mono是.NET Framework的跨平台实现。我仍然使用MonoDevelop而不是Visual Studio来开发Mono应用程序。所以我不知道你会怎么做。