IMAPI2 Как записать уже созданный ISO - PullRequest
2 голосов
/ 16 декабря 2011

Я прочитал hackchina и codeproject примеров, но, похоже, я не могу понять, как записать существующий файл .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.Что мне теперь делать?Я не понимаю(Я получил использование IMAPI2.interop в моем коде из примера CodeProject).

Большое спасибо

1 Ответ

3 голосов
/ 24 декабря 2011

Ну, я наконец-то понял, во-первых, вам нужно включить следующие пространства имен:

using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;

Чтобы можно было использовать IStream.

Затем вам нужно импортировать SHCreateStreamOnFIle из shlwapi.dll, чтобы открыть поток чтения для этого 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 ().

discFormatData.Write(stream);

Надеюсь, это кому-нибудь поможет. Береги себя

...