Запись образа диска

Мастеринг (запись диска) с помощью IMAPI состоит из следующих этапов:

  1. Создайте образ файловой системы, содержащий каталоги и файлы для записи диска.
  2. Настройте устройство записи дисков для взаимодействия с оптическим устройством.
  3. Создайте модуль записи данных и запишите образ на диск.

Пример записи образа диска см. в разделе Пример VBScript.

Создание образа записи

Изображение записи — это поток данных, готовый к записи на оптический носитель. Образ записи для форматов ISO9660, Joliet и UDF состоит из файловой системы отдельных файлов и каталогов. Объект CFileSystemImage — это объект файловой системы, содержащий файлы и каталоги для размещения на оптическом носителе. Интерфейс IFileSystemImage предоставляет доступ к объекту и параметрам файловой системы.

После создания объекта файловой системы вызовите методы IFileSystemImage::CreateFileItem и IFileSystemImage::CreateDirectoryItem , чтобы создать объекты файлов и каталогов соответственно. Объекты file и directory можно использовать для предоставления конкретных сведений о файле и каталоге. Методы обработчика событий, доступные для IFileSystemImage , могут идентифицировать текущий файл, добавляемый в образ файловой системы, количество уже скопированных секторов и общее количество копируемых секторов.

При необходимости загрузочный образ можно подключить к файловой системе с помощью свойства IFileSystemImage::p ut_BootImageOptions . Пример см. в разделе Добавление загрузочного образа.

Наконец, вызовите IFileSystemImage::CreateResultImage , чтобы создать поток данных и предоставить доступ через IFileSystemImageResult. Затем новый поток данных можно предоставить непосредственно в метод IDiscFormat2Data::Write или сохранить в файл для последующего использования.

Настройка средства записи дисков

Объект MsftDiscMaster2 предоставляет перечисление оптических устройств в системе. Интерфейс IDiscMaster2 предоставляет доступ к перечислению результирующих устройств. Просматривайте перечисления, чтобы найти соответствующее записывающее устройство. Объект MsftDiscMaster2 также предоставляет уведомления о событиях, когда оптические устройства добавляются на компьютер или удаляются с компьютера.

Найдя оптическое средство записи и получив его идентификатор, создайте объект MsftDiscRecorder2 и инициализируйте средство записи с помощью идентификатора устройства. Интерфейс IDiscRecorder2 предоставляет доступ к объекту средства записи, а также некоторые основные сведения об устройстве, такие как идентификатор поставщика, идентификатор продукта, редакция продукта и методы извлечения носителя и закрытия лотка.

Создание модуля записи данных и запись образа записи

Объект MsftDiscFormat2Data предоставляет метод записи, свойства функции записи и свойства носителя. Интерфейс IDiscFormat2Data предоставляет доступ к объекту MsftDiscFormat2Data .

Средство записи дисков ссылается на модуль записи формата с помощью свойства IDiscFormat2Data::p ut_Recorder . После привязки средства записи к средству записи формата можно выполнять запросы относительно носителя и обновлять свойства, относящиеся к записи, прежде чем записывать результирующий образ на диск с помощью метода IDiscFormat2Data::Write .

Другие интерфейсы записи формата, предоставляемые IMAPI, работают аналогичным образом; К дополнительным интерфейсам для записи формата относятся:

  • IDiscFormat2Erase удаляет перезаписываемый оптический носитель.
  • IDiscFormat2RawCD записывает необработанное изображение на оптический носитель.
  • IDiscFormat2TrackAtOnce записывает звуковые дорожки на оптический носитель.

Примечание

Переход состояния питания может произойти во время операции записи (т. е. выхода пользователя или приостановки системы), что приводит к прерыванию процесса записи и возможной потере данных. Рекомендации по программированию см. в разделе Предотвращение выхода из системы или приостановки во время записи.

 

Пример VBScript

В этом примере скрипта показано, как использовать объекты IMAPI для записи оптического носителя; в частности, запишите каталог на пустой диск. Код не содержит проверки ошибок и предполагает следующее:

  • В системе установлено совместимое дисковое устройство.
  • Дисковод — это второй диск в системе.
  • Совместимый диск вставляется в дисковое устройство.
  • Диск пуст.
  • Файлы для записи на диск находятся в папке g:\burndir.

В этот скрипт можно добавить дополнительные функции, такие как проверка ошибок, совместимость устройств и мультимедиа, уведомление о событиях и вычисление свободного места на диске.

' This script burns data files to disc in a single session 
' using files from a single directory tree.
 
' Copyright (C) Microsoft Corp. 2006

Option Explicit

' *** CD/DVD disc file system types
Const FsiFileSystemISO9660 = 1
Const FsiFileSystemJoliet  = 2
Const FsiFileSystemUDF102  = 4

WScript.Quit(Main)

Function Main
    Dim Index                ' Index to recording drive.
    Dim Recorder             ' Recorder object
    Dim Path                 ' Directory of files to burn
    Dim Stream               ' Data stream for burning device
    
    Index = 1                ' Second drive on the system
    Path = "g:\BurnDir"      ' Files to transfer to disc

    ' Create a DiscMaster2 object to connect to optical drives.
    Dim g_DiscMaster
    Set g_DiscMaster = WScript.CreateObject("IMAPI2.MsftDiscMaster2")

    ' Create a DiscRecorder object for the specified burning device.
    Dim uniqueId
    set recorder = WScript.CreateObject("IMAPI2.MsftDiscRecorder2")
    uniqueId = g_DiscMaster.Item(index)
    recorder.InitializeDiscRecorder( uniqueId )

    ' Create an image stream for a specified directory.
    Dim FSI                  ' Disc file system
    Dim Dir                  ' Root directory of the disc file system
    Dim dataWriter    
        
    ' Create a new file system image and retrieve root directory
    Set FSI = CreateObject("IMAPI2FS.MsftFileSystemImage")
    Set Dir = FSI.Root

    'Create the new disc format and set the recorder
    Set dataWriter = CreateObject ("IMAPI2.MsftDiscFormat2Data")
    dataWriter.recorder = Recorder
    dataWriter.ClientName = "IMAPIv2 TEST"

    FSI.ChooseImageDefaults(recorder)
        
    ' Add the directory and its contents to the file system 
    Dir.AddTree Path, false
        
    ' Create an image from the file system
    Dim result
    Set result = FSI.CreateResultImage()
    Stream = result.ImageStream
    
    ' Write stream to disc using the specified recorder.
    WScript.Echo "Writing content to disc..."
    dataWriter.write(Stream)

    WScript.Echo "----- Finished writing content -----"
    Main = 0
End Function

Использование IMAPI

IDiscFormat2Data

IDiscFormat2Erase

IDiscFormat2RawCD

IDiscFormat2TrackAtOnce

IDiscMaster2

IDiscRecorder2

IFileSystemImage

IStream