MergeVirtualDisk 関数 (virtdisk.h)
差分チェーン内の子仮想ハード ディスク (VHD) を、チェーン内の 1 つ以上の親仮想ディスクとマージします。
構文
DWORD MergeVirtualDisk(
[in] HANDLE VirtualDiskHandle,
[in] MERGE_VIRTUAL_DISK_FLAG Flags,
[in] PMERGE_VIRTUAL_DISK_PARAMETERS Parameters,
[in, optional] LPOVERLAPPED Overlapped
);
パラメーター
[in] VirtualDiskHandle
開いている仮想ディスクへのハンドル。 VIRTUAL_DISK_ACCESS_METAOPS フラグを使用して開かれている必要があります。 仮想ディスクを開く方法については、 OpenVirtualDisk 関数を参照してください。
[in] Flags
MERGE_VIRTUAL_DISK_FLAG列挙のMERGE_VIRTUAL_DISK_FLAG_NONE値である必要があります。
[in] Parameters
マージ パラメーター データを含む有効な MERGE_VIRTUAL_DISK_PARAMETERS 構造体へのポインター。
[in, optional] Overlapped
非同期操作が必要な場合は、有効な OVERLAPPED 構造体への省略可能なポインター。
戻り値
要求の状態。
関数が成功した場合、戻り値は ERROR_SUCCESS。
関数が失敗した場合、戻り値はエラー コードです。 詳細については、「 システム エラー コード」を参照してください。
解説
ディスクをマージするには、操作中に影響を受けるディスクをデタッチする必要があります。
呼び出し元には READ| が必要です。影響を受けるディスクのバッキング ストアへの書き込みアクセス。
ディスクの RWDepth は、 OPEN_VIRTUAL_DISK_PARAMETERSで指定されたマージ深度を超える必要があります。
マージにより、マージ先の親ディスクが変更されるため、その親に依存する他の差分ディスクは無効になります。
マージ対象の親ディスクは、マージが実行される子差分ディスクに保持されていたのと同じデータを表すように変更されます。
マージ先の親ディスク内の既存のデータはすべて上書きされます。
マージ操作が中断された場合でも、子ディスクは引き続き使用できます。 MergeVirtualDisk 関数を再実行してマージを完了できます。
マージ要求の深さは、マージする差分チェーン内の親 VHD イメージ ファイルの数です。 たとえば、 MergeDepth メンバーの値が 1 の場合、指定した差分ディスクのデータ ブロックは親に移動されます。 MergeDepth メンバーの値が 2 で、指定された差分ディスクの親が差分ディスクでもある場合 (つまり、チェーンに 3 番目のディスクがある場合)、最初のディスクと 2 番目のディスクの両方のデータ ブロックが 3 番目のディスクに移動されます (最後の操作の間、最初のディスクからのブロックが 2 番目のディスクのブロックよりも優先されます)。
完了すると、影響を受ける子ディスクは有効とは見なされなくなり、それらに対する今後の操作ではサポートされない結果になります。 前の例では、マージが正常に完了すると、3 番目のディスクは有効であり、1 番目と 2 番目のディスクは有効ではありません。 MergeVirtualDisk 関数は、無効なディスクを削除したり、差分リレーションシップの自動再接続を実行したりすることはありません。 これは、呼び出し元が明示的に行う必要があります。
差分ディスクの非リーフ ノードに対してマージ操作が実行される場合、マージされるディスクの子ノードの親情報を修正するのは呼び出し元の責任です。
要件
サポートされている最小のクライアント | Windows 7 |
サポートされている最小のサーバー | Windows Server 2008 R2 |
対象プラットフォーム | Windows |
ヘッダー | virtdisk.h |
Library | VirtDisk.lib |
[DLL] | VirtDisk.dll |