IVssComponentEx
COM公式ドキュメント
リクエスターのバックアップコンポーネントドキュメントに含まれるコンポーネントに関する情報を調査および変更するための追加メソッドを定義します。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
コンポーネントに対する PrepareForBackup の失敗メッセージ文字列を設定します。
| wszFailureMsg | LPWSTR | in | PrepareForBackup イベントの処理中に発生したエラーを説明する失敗メッセージを格納した、呼び出し側が割り当てた NULL 終端ワイド文字列のアドレス。 |
戻り値
このメソッドの有効な戻り値は次のとおりです。
| 値 | 意味 |
|---|---|
| 失敗メッセージが正常に設定されました。 | |
| いずれかのパラメーター値が無効です。 | |
| 呼び出し側のメモリまたはその他のシステムリソースが不足しています。 | |
| このメソッドが、ライターの CVssWriter::OnPrepareBackup メソッドから呼び出されませんでした。 |
解説(Remarks)
SetPrepareForBackupFailureMsg によって設定された失敗メッセージは、コンポーネント内のすべてのファイルおよびすべてのサブコンポーネントに適用されます。
コンポーネントに対する PostSnapshot の失敗メッセージ文字列を設定します。
| wszFailureMsg | LPWSTR | in | PostSnapshot イベントの処理中に発生したエラーを説明する失敗メッセージを格納した、呼び出し側が割り当てた NULL 終端ワイド文字列のアドレス。 |
戻り値
このメソッドの有効な戻り値は次のとおりです。
| 値 | 意味 |
|---|---|
| 失敗メッセージが正常に設定されました。 | |
| いずれかのパラメーター値が無効です。 | |
| 呼び出し側のメモリまたはその他のシステムリソースが不足しています。 | |
| このメソッドが、ライターの CVssWriter::OnPostSnapshot メソッドから呼び出されませんでした。 |
解説(Remarks)
SetPostSnapshotFailureMsg によって設定された失敗メッセージは、コンポーネント内のすべてのファイルおよびすべてのサブコンポーネントに適用されます。
ライターが特定のコンポーネントに対して設定した PrepareForBackup の失敗メッセージ文字列を返します。
| pbstrFailureMsg | LPWSTR* | out | PrepareForBackup イベントの処理中に発生したエラーを説明する失敗メッセージを格納した、null 終端ワイド文字列へのポインター。 |
戻り値
このメソッドの有効な戻り値は次のとおりです。
| 値 | 意味 |
|---|---|
| 失敗メッセージが正常に取得されました。 | |
| コンポーネントに対して PrepareForBackup の失敗メッセージが設定されていませんでした。 | |
| いずれかのパラメーター値が無効です。 | |
| 呼び出し側のメモリまたはその他のシステムリソースが不足しています。 |
解説(Remarks)
pbstrFailureMsg パラメーターが指す文字列は、SysFreeString 関数を呼び出して解放する責任が呼び出し側にあります。
例
#include <windows.h>
#include "vss.h"
#include "vsmgmt.h"
#define CHKARG_ASSERT(EXPR)
do
{
if(! ( EXPR ) )
{
assert(FALSE);
hr = E_INVALIDARG;
goto exit;
}
}
while ( FALSE, FALSE );
#define CHK(HR)
do
{
hr = ( HR ) ;
if(FAILED(HR))
{
hr = HR;
goto exit;
}
}
while ( FALSE, FALSE );
STDMETHODIMP CheckAsrBackupErrorMsg
(
IVssBackupComponents *pBackup,
const WCHAR *pwszWriterName
)
{
CComPtr<IVssWriterComponentsExt> spWriter;
CComPtr<IVssComponent> spComponent;
CComPtr<IVssComponentEx> spComponentEx;
UINT cWriterComponents = 0;
UINT iWriterComponent = 0;
UINT cComponents = 0;
UINT iComponent = 0;
VSS_ID idWriter;
VSS_ID idInstance;
CComBSTR bstrFailureMsg;
HRESULT hr = S_OK;
CHKARG_ASSERT( pBackup );
CHKARG_ASSERT( pwszWriterName );
CHK( pBackup->GetWriterComponentsCount( &cWriterComponents ) );
for( iWriterComponent = 0; iWriterComponent < cWriterComponents; iWriterComponent++ )
{
spWriter.Release();
CHK( pBackup->GetWriterComponents( iWriterComponent, &spWriter ) );
CHK( spWriter->GetWriterInfo(&idInstance, &idWriter) );
if( idWriter != c_ASRWriterId )
{
continue;
}
CHK( spWriter->GetComponentCount(&cComponents) );
for( iComponent = 0; iComponent < cComponents; iComponent++ )
{
spComponent.Release();
spComponentEx.Release();
CHK( spWriter->GetComponent(iComponent, &spComponent) );
CHK( spComponent->QueryInterface(__uuidof(IVssComponentEx), (void**)&spComponentEx) );
bstrFailureMsg.Empty();
CHK( spComponentEx->GetPrepareForBackupFailureMsg(&bstrFailureMsg) );
if( ::SysStringLen(bstrFailureMsg) != 0 )
{
// Write into the event log.
Log_SPP_ERROR_WRITER( &ft, __LINE__, pwszWriterName, bstrFailureMsg );
// The ASR writer writes the same message to all components.
// Log the message once.
break;
}
}
}
exit:
return hr;
}
ライターが特定のコンポーネントに対して設定した PostSnapshot の失敗メッセージ文字列を返します。
| pbstrFailureMsg | LPWSTR* | out | PostSnapshot イベントの処理中に発生したエラーを説明する失敗メッセージを格納した、null 終端ワイド文字列へのポインター。 |
戻り値
このメソッドの有効な戻り値は次のとおりです。
| 値 | 意味 |
|---|---|
| 失敗メッセージが正常に取得されました。 | |
| コンポーネントに対して PostSnapshot の失敗メッセージが設定されていませんでした。 | |
| いずれかのパラメーター値が無効です。 | |
| 呼び出し側のメモリまたはその他のシステムリソースが不足しています。 |
解説(Remarks)
pbstrFailureMsg パラメーターが指す文字列は、SysFreeString 関数を呼び出して解放する責任が呼び出し側にあります。
リクエスターが、レプリケートされたデータストアに対してコンポーネントの復元を authoritative(権限のある)としてマークしているかどうかを判定します。
| pbAuth | BOOLEAN* | out | 復元が authoritative の場合は true、それ以外の場合は false を受け取る、呼び出し側が割り当てた変数のアドレス。 |
戻り値
このメソッドの有効な戻り値は次のとおりです。
| 値 | 意味 |
|---|---|
| 操作は成功しました。 | |
| いずれかのパラメーター値が無効です。 | |
| 呼び出し側のメモリまたはその他のシステムリソースが不足しています。 |
解説(Remarks)
ライターは、バックアップスキーママスクに VSS_BS_AUTHORITATIVE_RESTORE フラグを設定することで、authoritative 復元をサポートすることを示します。
詳細については、VSS 復元オプションの設定 を参照してください。
コンポーネントのロールフォワード操作の種類を取得し、部分的なロールフォワード操作の復元ポイントを取得します。
| pRollType | VSS_ROLLFORWARD_TYPE* | out | 実行するロールフォワード操作の種類を示す VSS_ROLLFORWARD_TYPE 列挙値。 |
| pbstrPoint | LPWSTR* | out | ロールフォワードの復元ポイントを指定する null 終端ワイド文字列を受け取る、呼び出し側が割り当てた変数のアドレス。 |
戻り値
このメソッドの有効な戻り値は次のとおりです。
| 値 | 意味 |
|---|---|
| 操作は成功しました。 | |
| いずれかのパラメーター値が無効です。 | |
| 呼び出し側のメモリまたはその他のシステムリソースが不足しています。 |
解説(Remarks)
GetRollForward メソッドは、復元操作中にのみ呼び出すことができます。
GetRollForward の呼び出しが成功した場合、pRollType パラメーターで返される文字列は、SysFreeString 関数を呼び出して解放する責任が呼び出し側にあります。
ライターは、バックアップスキーママスクに VSS_BS_ROLLFORWARD_RESTORE フラグを設定することで、このメソッドをサポートすることを示します。
詳細については、VSS 復元オプションの設定 を参照してください。
復元中のコンポーネントに割り当てられた論理名を取得します。
| pbstrName | LPWSTR* | out | コンポーネントの復元名を格納した null 終端ワイド文字列を受け取る、呼び出し側が割り当てた変数のアドレス。 |
戻り値
このメソッドの有効な戻り値は次のとおりです。
| 値 | 意味 |
|---|---|
| 操作は成功しました。 | |
| いずれかのパラメーター値が無効です。 | |
| 呼び出し側のメモリまたはその他のシステムリソースが不足しています。 |
解説(Remarks)
GetRestoreName メソッドは、復元操作中にのみ呼び出すことができます。
GetRestoreName の呼び出しが成功した場合、pbstrName パラメーターで返される文字列は、SysFreeString 関数を呼び出して解放する責任が呼び出し側にあります。
ライターは、バックアップスキーママスクに VSS_BS_RESTORE_RENAME フラグを設定することで、このメソッドをサポートすることを示します。
詳細については、VSS 復元オプションの設定 を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IVssComponentEx "{156C8B5E-F131-4BD7-9C97-D1923BE7E1FA}" #usecom global IVssComponentEx IID_IVssComponentEx "{}" #comfunc global IVssComponentEx_SetPrepareForBackupFailureMsg 41 wstr #comfunc global IVssComponentEx_SetPostSnapshotFailureMsg 42 wstr #comfunc global IVssComponentEx_GetPrepareForBackupFailureMsg 43 var #comfunc global IVssComponentEx_GetPostSnapshotFailureMsg 44 var #comfunc global IVssComponentEx_GetAuthoritativeRestore 45 var #comfunc global IVssComponentEx_GetRollForward 46 var,var #comfunc global IVssComponentEx_GetRestoreName 47 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IVssComponentEx "{156C8B5E-F131-4BD7-9C97-D1923BE7E1FA}" #usecom global IVssComponentEx IID_IVssComponentEx "{}" #comfunc global IVssComponentEx_SetPrepareForBackupFailureMsg 41 wstr #comfunc global IVssComponentEx_SetPostSnapshotFailureMsg 42 wstr #comfunc global IVssComponentEx_GetPrepareForBackupFailureMsg 43 sptr #comfunc global IVssComponentEx_GetPostSnapshotFailureMsg 44 sptr #comfunc global IVssComponentEx_GetAuthoritativeRestore 45 sptr #comfunc global IVssComponentEx_GetRollForward 46 sptr,sptr #comfunc global IVssComponentEx_GetRestoreName 47 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。