C# IMAPI2如何刻录已创建的iso

C# IMAPI2如何刻录已创建的iso,c#,iso,imapi,C#,Iso,Imapi,我已经阅读了许多示例,但似乎我不知道如何刻录现有的.iso文件。上面的示例显示了从文件夹生成.iso并将其刻录的方法。我希望能够直接刻录iso文件 下面是一些代码: IDiscRecorder2 discRecorder = new MsftDiscRecorder2(); string Burner = comboBox1.SelectedItem.ToString(); foreach (DrvProperties prop in drv_props) { if (prop.lette

我已经阅读了许多示例,但似乎我不知道如何刻录现有的.iso文件。上面的示例显示了从文件夹生成.iso并将其刻录的方法。我希望能够直接刻录iso文件

下面是一些代码:

IDiscRecorder2 discRecorder = new MsftDiscRecorder2();
string Burner = comboBox1.SelectedItem.ToString();

foreach (DrvProperties prop in drv_props)
{
  if (prop.letter.Contains(Burner)) // letter contains the drive's Letter (E:, G: etc.)
  {
    discRecorder.InitializeDiscRecorder(prop.ID); // ID contains drive's uniqueID
  }

}

IDiscFormat2Data discFormatData = new MsftDiscFormat2Data();
discFormatData.Recorder = discRecorder;

IMAPI_MEDIA_PHYSICAL_TYPE mediaType = discFormatData.CurrentPhysicalMediaType;
......
......
有人能帮我进一步吗?假设我有example.iso。我现在该怎么办?我不明白。(我在CodeProject示例的代码中使用了IMAPI2.interop)


非常感谢

我终于弄明白了首先,您需要包括以下名称空间:

using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
为了能够使用IStream

然后,您需要从shlwapi.dll导入SHCreateStreamOnFIle以打开该iso的“读取流”:

private const uint STGM_SHARE_DENY_WRITE = 0x00000020;
    private const uint STGM_SHARE_DENY_NONE = 0x00000040;
    private const uint STGM_READ = 0x00000000;
    private const uint STGM_WRITE = 0x00000001;
    private const uint STGM_READWRITE = 0x00000002;

     [DllImport("shlwapi.dll", CharSet = CharSet.Unicode, ExactSpelling = true,    PreserveSig = false, EntryPoint = "SHCreateStreamOnFileW")]
    static extern void SHCreateStreamOnFile(string fileName, uint mode, ref IStream stream);

IStream stream = null;
SHCreateStreamOnFile(path2iso, STGM_READ | STGM_SHARE_DENY_WRITE, ref stream);
最后将i提供给discFormatData.Write()方法


我希望它能帮助别人。当心

有人问我如何在MsftFileSystemImage对象中添加.iso文件我能做什么?
discFormatData.Write(stream);