IVssHardwareSnapshotProviderEx
COM公式ドキュメント
LUN の状態変化をハードウェアプロバイダーに通知するために VSS が使用する追加のメソッドを提供します。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
このメソッドは将来の使用のために予約されています。(IVssHardwareSnapshotProviderEx.GetProviderCapabilities)
| pllOriginalCapabilityMask | ULONGLONG* | out | このパラメーターは将来の使用のために予約されています。 |
VSS サービスは、LUN の状態変化をハードウェアプロバイダーに通知するためにこのメソッドを呼び出します。
| pSnapshotLuns | VDS_LUN_INFORMATION* | in | シャドウコピーボリュームを構成する各 LUN に対応する、dwCount 個の VDS_LUN_INFORMATION 構造体の配列へのポインター。 | ||||||||||
| pOriginalLuns | VDS_LUN_INFORMATION* | in | 元のボリュームを構成する各 LUN に対応する、dwCount 個の VDS_LUN_INFORMATION 構造体の配列へのポインター。 | ||||||||||
| dwCount | DWORD | in | pSnapshotLuns 配列の要素数。pOriginalLuns 配列の要素数でもあります。 | ||||||||||
| dwFlags | DWORD | in | シャドウコピー LUN が受けた状態変化に関する情報を提供する _VSS_HARDWARE_OPTIONS フラグのビットマスク。次の表は、各フラグがこのパラメーターでどのように使用されるかを説明しています。
|
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値/値 | 説明 |
|---|---|
|
操作は正常に完了しました。 |
|
メモリまたはその他のシステムリソースが不足しています。 |
|
いずれかのパラメーター値が無効です。 |
|
予期しないプロバイダーエラーが発生しました。これが返された場合、問題の解決方法をユーザーに示す情報とともに、そのエラーをアプリケーションイベントログのエントリに記録する必要があります。 |
VSS サービスは、LUN の再同期が必要であることをハードウェアプロバイダーに通知するためにこのメソッドを呼び出します。
| pSourceLuns | VDS_LUN_INFORMATION* | in | シャドウコピーボリュームを構成する各 LUN に対応する、dwCount 個の VDS_LUN_INFORMATION 構造体の配列へのポインター。 |
| pTargetLuns | VDS_LUN_INFORMATION* | in | シャドウコピーボリュームの内容のコピー先となる宛先ボリュームを構成する各 LUN に対応する、dwCount 個の VDS_LUN_INFORMATION 構造体の配列へのポインター。 |
| dwCount | DWORD | in | pSourceLuns 配列の要素数。pTargetLuns 配列の要素数でもあります。 |
| ppAsync | IVssAsync** | out | 再同期操作の状態を取得するために使用できる IVssAsync インターフェイスポインターを受け取る場所へのポインター。操作が完了したら、呼び出し元は IUnknown::Release メソッドを呼び出してインターフェイスポインターを解放する必要があります。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
| 戻り値/値 | 説明 |
|---|---|
|
操作は正常に完了しました。 |
|
メモリまたはその他のシステムリソースが不足しています。 |
|
予期しないプロバイダーエラーが発生しました。このエラーコードが返された場合、問題の解決方法をユーザーに示す情報とともに、そのエラーをアプリケーションイベントログのエントリに記録する必要があります。 |
|
ディスク領域が不足しているため、プロバイダーは操作を実行できません。 |
解説(Remarks)
宛先 LUN は、シャドウコピーの作成元となった元の運用ボリュームを構成する LUN であっても、運用から取り除かれた元のボリュームを置き換えるために使用される新規または既存の LUN であってもかまいません。
プロバイダーは、ホストレベルではなく LUN アレイレベルでデータをコピーすることによって再同期を実行する必要があります。つまり、プロバイダーはソース LUN の内容を宛先 LUN に単純にコピーするだけで LUN の再同期を実装することはできません。LUN の再同期に必要な I/O は、ホストコンピューターを経由せず、再同期対象 LUN のディスクデバイスを通じてハードウェア内で実行される必要があります。この I/O はホストコンピューターから完全に透過的である必要があります。
再同期が完了すると、LUN は完全に機能する状態となり、I/O 操作に使用できます。
基盤となるディスクハードウェアは、一意のページ 83 デバイス識別子をサポートしている必要があります。
宛先 LUN がソース LUN より大きい場合、プロバイダーは必要に応じて宛先 LUN のサイズを変更し、再同期後にソース LUN と一致するようにする必要があります。
このメソッドは WinPE では呼び出せず、セーフモードでも呼び出せません。このメソッドを呼び出す前に、呼び出し元は IVssBackupComponents::InitializeForRestore メソッドを使用して再同期の準備を行う必要があります。
このメソッドは将来の使用のために予約されています。(IVssHardwareSnapshotProviderEx.OnReuseLuns)
| pSnapshotLuns | VDS_LUN_INFORMATION* | in | このパラメーターは将来の使用のために予約されています。 |
| pOriginalLuns | VDS_LUN_INFORMATION* | in | このパラメーターは将来の使用のために予約されています。 |
| dwCount | DWORD | in | このパラメーターは将来の使用のために予約されています。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IVssHardwareSnapshotProviderEx "{7F5BA925-CDB1-4D11-A71F-339EB7E709FD}" #usecom global IVssHardwareSnapshotProviderEx IID_IVssHardwareSnapshotProviderEx "{}" #comfunc global IVssHardwareSnapshotProviderEx_GetProviderCapabilities 9 var #comfunc global IVssHardwareSnapshotProviderEx_OnLunStateChange 10 var,var,int,int #comfunc global IVssHardwareSnapshotProviderEx_ResyncLuns 11 var,var,int,sptr #comfunc global IVssHardwareSnapshotProviderEx_OnReuseLuns 12 var,var,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IVssHardwareSnapshotProviderEx "{7F5BA925-CDB1-4D11-A71F-339EB7E709FD}" #usecom global IVssHardwareSnapshotProviderEx IID_IVssHardwareSnapshotProviderEx "{}" #comfunc global IVssHardwareSnapshotProviderEx_GetProviderCapabilities 9 sptr #comfunc global IVssHardwareSnapshotProviderEx_OnLunStateChange 10 sptr,sptr,int,int #comfunc global IVssHardwareSnapshotProviderEx_ResyncLuns 11 sptr,sptr,int,sptr #comfunc global IVssHardwareSnapshotProviderEx_OnReuseLuns 12 sptr,sptr,int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。