次の方法で共有


マルチリージョン ディスクの作成

Image Mastering API (IMAPI) では、次のマルチリージョン ディスクタイプとの間でのファイルの追加と削除がサポートされています。

  • CD-R/CD-RW
  • Single-Layer DVD+R/DVD-R
  • DVD+R Dual Layer
  • BD-R
  • DVD-RW/DVD+RW (Windows 7 のみ)
  • DVD-RAM (Windows 7 のみ)
  • BD-RE (Windows 7 のみ)

IMAPI を使用したマルチリージョン ディスクの作成は、次の手順で構成されます。 これらの各手順には、最後のセクションで提供される完全な Visual Basic スクリプトの例の関連部分が含まれています。

ディスク レコーダーの初期化

デバイスの初期化の前に、 MsftDiscMaster2 オブジェクトは、システム上の光ディスク デバイスの列挙を提供します。 IDiscMaster2 インターフェイスは、適切な記録デバイスの場所を容易にするために、このデバイス列挙へのアクセスを提供します。 MsftDiscMaster2 オブジェクトは、光ディスク デバイスがコンピューターに追加またはマシンから削除されたときにもイベント通知を提供します。

光レコーダーを見つけて割り当てられた ID を取得した後、新しい MsftDiscMaster2 オブジェクトを作成し、特定のデバイス ID を使用してレコーダーを初期化します。

IDiscRecorder2 インターフェイスは、ベンダー ID、製品 ID、製品リビジョンなどの基本的なデバイス情報、およびメディアを取り出したりトレイを閉じる方法にアクセスできます。

Note

次のサンプルで宣言されている追加の定数とディメンションは、このドキュメントの最後のセクションにある完全なサンプル スクリプトで後ほど使用します。 これらの要素は、ディスク レコーダーを初期化する操作には必要ありません。

 

' *** 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 add
    Dim Stream               ' Data stream for burning device
    
    Index = 0                ' First drive on the system
    Path = "G:\BurnDir"      ' Files to add to the disc

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

    ' Create a DiscRecorder2 object for the specified burning device.
    Dim UniqueId
    set Recorder = WScript.CreateObject("IMAPI2.MsftDiscRecorder2")
    UniqueId = DiscMaster.Item(Index)
    Recorder.InitializeDiscRecorder(UniqueId)

データ ライターの作成

MsftDiscFormat2Data オブジェクトは、書き込みメソッド、そのプロパティ、およびメディア固有のプロパティを提供します。 IDiscFormat2Data インターフェイスは、このオブジェクトへのアクセスを提供します。

ディスク レコーダーは 、IDiscFormat2Data::p ut_Recorder プロパティを使用してフォーマット ライターにバインドします。 レコーダーがフォーマット ライターにバインドされると、 IDiscFormat2Data::Write メソッドを使用して結果イメージをディスクに書き込む前に、メディアおよび書き込み固有のプロパティ クエリを実行できます。

Note

以下のサンプル コードで指定されているクライアント名の文字列は、特定のアプリケーションに合わせて調整する必要があります。

 

    ' Create a DiscFormat2Data object and set the recorder
    Dim DataWriter
    Set DataWriter = CreateObject ("IMAPI2.MsftDiscFormat2Data")
    DataWriter.Recorder = Recorder
    DataWriter.ClientName = "IMAPIv2 TEST"

ファイル システム オブジェクトの作成

新しいセッションを記録するには、まず書き込みイメージを生成する必要があります。 ISO9660JolietUDF 形式のバーン イメージは、個々のファイルとディレクトリのファイル システムで構成されます。 MsftFileSystemImage オブジェクトは、光ディスク上に配置されるファイルとディレクトリを含むファイル システム オブジェクトです。 IFileSystemImage インターフェイスを使用すると、ファイル システム オブジェクトと設定にアクセスできます。

    ' Create a new file system image object
    Dim FSI
    Set FSI = CreateObject("IMAPI2FS.MsftFileSystemImage")

ファイル システムのインポート

先に進む前に、 IDiscFormat2::get_MediaHeuristicallyBlank プロパティを確認して、ディスクが空白ではないことを確認します。

MsftFileSystemImage オブジェクトを作成した後、IFileSystemImage::p ut_MultisessionInterfaces プロパティを初期化してから、IFileSystemImage::ImportFileSystem メソッドまたは IFileSystemImage::ImportSpecificFileSystem メソッドを呼び出して、最後に記録したセッションからファイル システムをインポートする必要があります。 これらのメソッドは、 MsftFileSystemImage オブジェクトに、以前に記録されたファイルとディレクトリを記述する情報を自動的に設定します。

Note

IFileSystemImage::p ut_MultisessionInterfaces プロパティは、通常、IDiscFormat2Data::get_MultisessionInterfaces プロパティを介してデータ ライターによって提供される multisession インターフェイスで初期化されます。

 

IFileSystemImage::p ut_MultisessionInterfaces プロパティを設定しようとすると、現在挿入されているメディアに対して IMAPI がマルチセッションをサポートしていない場合、またはメディアを何らかの理由で追加できない場合 (閉じているなど) は失敗します。

前の書き込みセッションに複数のファイル システムの種類が含まれている場合、 IFileSystemImage::ImportFileSystem メソッドは、存在する最も高度なファイル システムの種類から情報をインポートします。 たとえば、このトピックで説明する例では、UDF はインポートされたファイル システムです。 ただし、 IFileSystemImage::ImportSpecificFileSystem メソッドを使用すると、ファイル システムの特定の選択をインポートできます。

Note

IFileSystemImage::IdentifyFileSystemsOnDisc メソッドを使用して、ディスク上で使用できるファイル システムを決定できます。

 

    ' Import the last session, if the disc is not empty, or initialize
    ' the file system, if the disc is empty
    If Not DataWriter.MediaHeuristicallyBlank _
    Then
        On Error Resume Next
        FSI.MultisessionInterfaces = DataWriter.MultisessionInterfaces
        If Err.Number <> 0 _
        Then
            WScript.Echo "Multisession is not supported for this disc"
            Main = 1
            Exit Function
        End If
        On Error Goto 0

        WScript.Echo "Importing data from the previous session..."
        FSI.ImportFileSystem()
    Else 
        FSI.ChooseImageDefaults(Recorder)
    End If

ファイル システムへのファイルの追加または削除

ファイル システム オブジェクトを作成し、前のセッションからファイル システムをインポートした後、 IFileSystemImage::CreateFileItem メソッドと IFileSystemImage::CreateDirectoryItem メソッドをそれぞれ呼び出して、新しいファイル オブジェクトとディレクトリ オブジェクトを作成します。 ファイル オブジェクトとディレクトリ オブジェクトは、ファイルとディレクトリに関する特定の詳細を提供します。 または、IFsiDirectoryItem インターフェイスを介して表されるディレクトリ オブジェクトの IFsiDirectoryItem::AddTree メソッドを使用して、別のストレージ デバイス (つまりハード ドライブ) から既存のファイルとディレクトリを追加することもできます。

IFileSystemImage で使用できるイベント ハンドラーの更新メソッドは、ファイル システム イメージに追加されている現在のファイル、既にコピーされているセクターの数、コピーするセクターの合計数を識別します。

ファイル システムから既存のファイルとディレクトリを削除するには、 IFsiDirectoryItem インターフェイスを介して表されるディレクトリ オブジェクトの IFsiDirectoryItem::Remove メソッドと IFsiDirectoryItem ::RemoveTree メソッドを使用します。 IFileSystemImage::get_Root プロパティは、ファイル システムのルート ディレクトリへのポインターと、ディレクトリ ツリーを走査する IFsiDirectoryItem インターフェイスを取得するために使用されます。

Note

IFsiDirectoryItem::Remove メソッドと IFsiDirectoryItem::RemoveTree メソッドを使用して削除されたファイルとディレクトリは、ディスクから物理的に削除されず、高度なソフトウェアは削除された情報を簡単に回復できます。

 

    ' Add the directory and its contents to the file system 
    WScript.Echo "Adding " & Path & " directory to the disc..."
    FSI.Root.AddTree Path, false

ファイル システム イメージの構築

最後の手順では、 IFileSystemImage::CreateResultImage を呼び出して、書き込みイメージのデータ ストリームを作成し、 IFileSystemImageResult インターフェイスを介してアクセスできるようにします。 このデータ ストリームは、 IDiscFormat2Data::Write メソッドに直接提供することも、後で使用するためにファイルに保存することもできます。

    ' Create an image from the file system image object
    Dim Result
    Set Result = FSI.CreateResultImage()
    Stream = Result.ImageStream

概要の例

次の Visual Basic スクリプトの例は、IMAPI オブジェクトを使用してマルチリージョン ディスクを作成する方法を示しています。 この例では、新しいセッションを作成し、ディスクにディレクトリを追加します。わかりやすくするために、コードは広範なエラー チェックを実行せず、次のことを前提としています。

  • 互換性のあるディスクデバイスがシステムにインストールされています。
  • ディスク デバイスは、システム上の最初のドライブです。
  • 互換性のあるディスクがディスクデバイスに挿入されます。
  • ディスクに追加するファイルは、"g:\burndir" にあります。

広範なエラー チェック、デバイスとメディアの互換性、イベント通知、ディスク上の空き領域の計算などの追加機能をスクリプトに追加できます。

' This script adds data files from a single directory tree to a
' disc (a new session is added, if the disc already contains data)

' Copyright (C) Microsoft. All rights reserved.

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 add
    Dim Stream               ' Data stream for burning device
    
    Index = 0                ' First drive on the system
    Path = "G:\BurnDir"      ' Files to add to the disc

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

    ' Create a DiscRecorder2 object for the specified burning device.
    Dim UniqueId
    set Recorder = WScript.CreateObject("IMAPI2.MsftDiscRecorder2")
    UniqueId = DiscMaster.Item(Index)
    Recorder.InitializeDiscRecorder(UniqueId)

    ' Create a DiscFormat2Data object and set the recorder
    Dim DataWriter
    Set DataWriter = CreateObject ("IMAPI2.MsftDiscFormat2Data")
    DataWriter.Recorder = Recorder
    DataWriter.ClientName = "IMAPIv2 TEST"

    ' Create a new file system image object
    Dim FSI
    Set FSI = CreateObject("IMAPI2FS.MsftFileSystemImage")

    ' Import the last session, if the disc is not empty, or initialize
    ' the file system, if the disc is empty
    If Not DataWriter.MediaHeuristicallyBlank _
    Then
        On Error Resume Next
        FSI.MultisessionInterfaces = DataWriter.MultisessionInterfaces
        If Err.Number <> 0 _
        Then
            WScript.Echo "Multisession is not supported for this disc"
            Main = 1
            Exit Function
        End If
        On Error Goto 0

        WScript.Echo "Importing data from the previous session..."
        FSI.ImportFileSystem()
    Else 
        FSI.ChooseImageDefaults(Recorder)
    End If

    ' Add the directory and its contents to the file system 
    WScript.Echo "Adding " & Path & " directory to the disc..."
    FSI.Root.AddTree Path, false

    ' Create an image from the file system image object
    Dim Result
    Set Result = FSI.CreateResultImage()
    Stream = Result.ImageStream
    
    ' Write stream to disc using the specified recorder
    WScript.Echo "Writing content to the disc..."
    DataWriter.Write(Stream)

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

IMAPI の使用

IStream

IDiscMaster2

IDiscFormat2Data

IFileSystemImage