ディスクイメージの書き込み
IMAPI を使用したマスタリング (ディスクの書き込み) は、次の手順で構成されます。
- ディスクを書き込むディレクトリとファイルを含むファイル システム イメージを作成します。
- 光デバイスと通信するためのディスクレコーダーを設定します。
- データ ライターを作成 し、イメージをディスクに書き込みます。
ディスク イメージを書き込む例については、「 VBScript の例」を参照してください。
書き込みイメージを作成する
書き込みイメージは、光メディアに書き込む準備ができているデータ ストリームです。 ISO9660、Joliet、UDF 形式のバーン イメージは、個々のファイルとディレクトリのファイル システムで構成されます。 CFileSystemImage オブジェクトは、光ディスク上に配置するファイルとディレクトリを保持するファイル システム オブジェクトです。 IFileSystemImage インターフェイスを使用すると、ファイル システム オブジェクトと設定にアクセスできます。
ファイル システム オブジェクトを作成した後、 IFileSystemImage::CreateFileItem メソッドと IFileSystemImage::CreateDirectoryItem メソッドを呼び出して、それぞれファイル オブジェクトとディレクトリ オブジェクトを作成します。 ファイル オブジェクトとディレクトリ オブジェクトを使用して、ファイルとディレクトリに関する特定の詳細を提供できます。 IFileSystemImage で使用できるイベント ハンドラー メソッドは、ファイル システム イメージに追加されている現在のファイル、既にコピーされているセクターの数、コピーするセクターの合計数を識別できます。
必要に応じて、 IFileSystemImage::p ut_BootImageOptions プロパティを使用して、ブート イメージをファイル システムにアタッチできます。 例については、「 ブート イメージの追加」を参照してください。
最後に、 IFileSystemImage::CreateResultImage を呼び出してデータ ストリームを作成し、 IFileSystemImageResult 経由でアクセスできるようにします。 その後、新しいデータ ストリームを IDiscFormat2Data::Write メソッドに直接提供するか、後で使用するためにファイルに保存することができます。
ディスク レコーダーを設定する
MsftDiscMaster2 オブジェクトは、システム上の光学デバイスの列挙を提供します。 IDiscMaster2 インターフェイスは、結果のデバイス列挙へのアクセスを提供します。 列挙を走査して、適切な記録デバイスを見つけます。 MsftDiscMaster2 オブジェクトは、光ディスク デバイスがコンピューターに追加またはコンピューターから削除されたときにもイベント通知を提供します。
光レコーダーを見つけて ID を取得した後、 MsftDiscRecorder2 オブジェクトを作成し、デバイス ID を使用してレコーダーを初期化します。 IDiscRecorder2 インターフェイスは、レコーダー オブジェクトへのアクセスと、メディアを取り出してトレイを閉じるベンダー ID、製品 ID、製品リビジョン、メソッドなどの基本的なデバイス情報を提供します。
データ ライターを作成し、書き込みイメージを書き込む
MsftDiscFormat2Data オブジェクトは、書き込みメソッド、書き込み関数に関するプロパティ、およびメディア固有のプロパティを提供します。 IDiscFormat2Data インターフェイスは、MsftDiscFormat2Data オブジェクトへのアクセスを提供します。
ディスク レコーダーは 、IDiscFormat2Data::p ut_Recorder プロパティを使用してフォーマット ライターにリンクします。 レコーダーがフォーマット ライターにバインドされたら、 IDiscFormat2Data::Write メソッドを使用して結果イメージをディスクに書き込む前に、メディアに関するクエリを実行し、書き込み固有のプロパティを更新できます。
IMAPI によって提供されるその他の形式の書き込みインターフェイスも同様に機能します。追加のフォーマット書き込みインターフェイスは次のとおりです。
- IDiscFormat2Erase は 、書き換え可能な光メディアを消去します。
- IDiscFormat2RawCD は 、光ディスク メディアに未加工のイメージを書き込みます。
- IDiscFormat2TrackAtOnce は 、オーディオ トラックを光メディアに書き込みます。
Note
書き込み操作中 (つまり、ユーザーのログオフまたはシステムの中断) 中に電源状態の遷移が実行され、書き込みプロセスの中断やデータ損失の可能性が生じる可能性があります。 プログラミングに関する考慮事項については、「 バーン中のログオフまたは中断の防止」を参照してください。
VBScript の例
このスクリプトの例では、IMAPI オブジェクトを使用して光メディアを書き込む方法を示します。具体的には、空のディスクにディレクトリを書き込みます。このコードにはエラー チェックが含まれており、次のことを前提としています。
- 互換性のあるディスクデバイスがシステムにインストールされています。
- ディスク デバイスは、システム上の 2 番目のドライブです。
- 互換性のあるディスクがディスクデバイスに挿入されます。
- ディスクが空白です。
- ディスクに書き込むファイルは、"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
関連トピック