Win32 API 日本語リファレンス
ホームStorage.Vss › IVssHardwareSnapshotProviderEx

IVssHardwareSnapshotProviderEx

COM
IID7f5ba925-cdb1-4d11-a71f-339eb7e709fd継承元IVssHardwareSnapshotProvider自前メソッド開始 vtbl9

公式ドキュメント

LUN の状態変化をハードウェアプロバイダーに通知するために VSS が使用する追加のメソッドを提供します。

メソッド 4

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 9 HRESULT GetProviderCapabilities(ULONGLONG* pllOriginalCapabilityMask)

このメソッドは将来の使用のために予約されています。(IVssHardwareSnapshotProviderEx.GetProviderCapabilities)

pllOriginalCapabilityMaskULONGLONG*outこのパラメーターは将来の使用のために予約されています。
vtbl 10 HRESULT OnLunStateChange(VDS_LUN_INFORMATION* pSnapshotLuns, VDS_LUN_INFORMATION* pOriginalLuns, DWORD dwCount, DWORD dwFlags)

VSS サービスは、LUN の状態変化をハードウェアプロバイダーに通知するためにこのメソッドを呼び出します。

pSnapshotLunsVDS_LUN_INFORMATION*inシャドウコピーボリュームを構成する各 LUN に対応する、dwCount 個の VDS_LUN_INFORMATION 構造体の配列へのポインター。
pOriginalLunsVDS_LUN_INFORMATION*in元のボリュームを構成する各 LUN に対応する、dwCount 個の VDS_LUN_INFORMATION 構造体の配列へのポインター。
dwCountDWORDinpSnapshotLuns 配列の要素数。pOriginalLuns 配列の要素数でもあります。
dwFlagsDWORDin

シャドウコピー LUN が受けた状態変化に関する情報を提供する _VSS_HARDWARE_OPTIONS フラグのビットマスク。次の表は、各フラグがこのパラメーターでどのように使用されるかを説明しています。

意味
VSS_ONLUNSTATECHANGE_NOTIFY_READ_WRITE
0x00000100
シャドウコピー LUN は恒久的に読み取り/書き込みに変換されます。
VSS_ONLUNSTATECHANGE_NOTIFY_LUN_PRE_RECOVERY
0x00000200
シャドウコピー LUN は一時的に読み取り/書き込みに変換され、TxF リカバリーまたは VSS 自動リカバリーが実行されようとしています。
VSS_ONLUNSTATECHANGE_NOTIFY_LUN_POST_RECOVERY
0x00000400
シャドウコピー LUN は TxF リカバリーまたは VSS 自動リカバリーを完了し、読み取り専用に戻されました。
VSS_ONLUNSTATECHANGE_DO_MASK_LUNS
0x00000800
シャドウコピー LUN は現在のコンピューターからマスクされる必要がありますが、削除はされません。

戻り値

このメソッドは次のいずれかの値を返すことがあります。

戻り値/値 説明
S_OK
0x00000000L
操作は正常に完了しました。
E_OUTOFMEMORY
0x8007000EL
メモリまたはその他のシステムリソースが不足しています。
E_INVALIDARG
0x80070057L
いずれかのパラメーター値が無効です。
VSS_E_PROVIDER_VETO
0x80042306L
予期しないプロバイダーエラーが発生しました。これが返された場合、問題の解決方法をユーザーに示す情報とともに、そのエラーをアプリケーションイベントログのエントリに記録する必要があります。
vtbl 11 HRESULT ResyncLuns(VDS_LUN_INFORMATION* pSourceLuns, VDS_LUN_INFORMATION* pTargetLuns, DWORD dwCount, IVssAsync** ppAsync)

VSS サービスは、LUN の再同期が必要であることをハードウェアプロバイダーに通知するためにこのメソッドを呼び出します。

pSourceLunsVDS_LUN_INFORMATION*inシャドウコピーボリュームを構成する各 LUN に対応する、dwCount 個の VDS_LUN_INFORMATION 構造体の配列へのポインター。
pTargetLunsVDS_LUN_INFORMATION*inシャドウコピーボリュームの内容のコピー先となる宛先ボリュームを構成する各 LUN に対応する、dwCount 個の VDS_LUN_INFORMATION 構造体の配列へのポインター。
dwCountDWORDinpSourceLuns 配列の要素数。pTargetLuns 配列の要素数でもあります。
ppAsyncIVssAsync**out再同期操作の状態を取得するために使用できる IVssAsync インターフェイスポインターを受け取る場所へのポインター。操作が完了したら、呼び出し元は IUnknown::Release メソッドを呼び出してインターフェイスポインターを解放する必要があります。

戻り値

このメソッドは次のいずれかの値を返すことがあります。

戻り値/値 説明
S_OK
0x00000000L
操作は正常に完了しました。
E_OUTOFMEMORY
0x8007000EL
メモリまたはその他のシステムリソースが不足しています。
VSS_E_PROVIDER_VETO
0x80042306L
予期しないプロバイダーエラーが発生しました。このエラーコードが返された場合、問題の解決方法をユーザーに示す情報とともに、そのエラーをアプリケーションイベントログのエントリに記録する必要があります。
VSS_E_INSUFFICIENT_STORAGE
0x8004231FL
ディスク領域が不足しているため、プロバイダーは操作を実行できません。

解説(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 メソッドを使用して再同期の準備を行う必要があります。

vtbl 12 HRESULT OnReuseLuns(VDS_LUN_INFORMATION* pSnapshotLuns, VDS_LUN_INFORMATION* pOriginalLuns, DWORD dwCount)

このメソッドは将来の使用のために予約されています。(IVssHardwareSnapshotProviderEx.OnReuseLuns)

pSnapshotLunsVDS_LUN_INFORMATION*inこのパラメーターは将来の使用のために予約されています。
pOriginalLunsVDS_LUN_INFORMATION*inこのパラメーターは将来の使用のために予約されています。
dwCountDWORDinこのパラメーターは将来の使用のために予約されています。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。