マルチリージョン ディスクの作成
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"
ファイル システム オブジェクトの作成
新しいセッションを記録するには、まず書き込みイメージを生成する必要があります。 ISO9660、Joliet、UDF 形式のバーン イメージは、個々のファイルとディレクトリのファイル システムで構成されます。 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
関連トピック