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

IVssComponentEx

COM
IID156c8b5e-f131-4bd7-9c97-d1923be7e1fa継承元IVssComponent自前メソッド開始 vtbl41

公式ドキュメント

リクエスターのバックアップコンポーネントドキュメントに含まれるコンポーネントに関する情報を調査および変更するための追加メソッドを定義します。

メソッド 7

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

vtbl 41 HRESULT SetPrepareForBackupFailureMsg(LPWSTR wszFailureMsg)

コンポーネントに対する PrepareForBackup の失敗メッセージ文字列を設定します。

wszFailureMsgLPWSTRinPrepareForBackup イベントの処理中に発生したエラーを説明する失敗メッセージを格納した、呼び出し側が割り当てた NULL 終端ワイド文字列のアドレス。

戻り値

このメソッドの有効な戻り値は次のとおりです。

意味
S_OK
失敗メッセージが正常に設定されました。
E_INVALIDARG
いずれかのパラメーター値が無効です。
E_OUTOFMEMORY
呼び出し側のメモリまたはその他のシステムリソースが不足しています。
VSS_E_BAD_STATE
このメソッドが、ライターの CVssWriter::OnPrepareBackup メソッドから呼び出されませんでした。

解説(Remarks)

SetPrepareForBackupFailureMsg によって設定された失敗メッセージは、コンポーネント内のすべてのファイルおよびすべてのサブコンポーネントに適用されます。

vtbl 42 HRESULT SetPostSnapshotFailureMsg(LPWSTR wszFailureMsg)

コンポーネントに対する PostSnapshot の失敗メッセージ文字列を設定します。

wszFailureMsgLPWSTRinPostSnapshot イベントの処理中に発生したエラーを説明する失敗メッセージを格納した、呼び出し側が割り当てた NULL 終端ワイド文字列のアドレス。

戻り値

このメソッドの有効な戻り値は次のとおりです。

意味
S_OK
失敗メッセージが正常に設定されました。
E_INVALIDARG
いずれかのパラメーター値が無効です。
E_OUTOFMEMORY
呼び出し側のメモリまたはその他のシステムリソースが不足しています。
VSS_E_BAD_STATE
このメソッドが、ライターの CVssWriter::OnPostSnapshot メソッドから呼び出されませんでした。

解説(Remarks)

SetPostSnapshotFailureMsg によって設定された失敗メッセージは、コンポーネント内のすべてのファイルおよびすべてのサブコンポーネントに適用されます。

vtbl 43 HRESULT GetPrepareForBackupFailureMsg(LPWSTR* pbstrFailureMsg)

ライターが特定のコンポーネントに対して設定した PrepareForBackup の失敗メッセージ文字列を返します。

pbstrFailureMsgLPWSTR*outPrepareForBackup イベントの処理中に発生したエラーを説明する失敗メッセージを格納した、null 終端ワイド文字列へのポインター。

戻り値

このメソッドの有効な戻り値は次のとおりです。

意味
S_OK
失敗メッセージが正常に取得されました。
S_FALSE
コンポーネントに対して PrepareForBackup の失敗メッセージが設定されていませんでした。
E_INVALIDARG
いずれかのパラメーター値が無効です。
E_OUTOFMEMORY
呼び出し側のメモリまたはその他のシステムリソースが不足しています。

解説(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;
}

vtbl 44 HRESULT GetPostSnapshotFailureMsg(LPWSTR* pbstrFailureMsg)

ライターが特定のコンポーネントに対して設定した PostSnapshot の失敗メッセージ文字列を返します。

pbstrFailureMsgLPWSTR*outPostSnapshot イベントの処理中に発生したエラーを説明する失敗メッセージを格納した、null 終端ワイド文字列へのポインター。

戻り値

このメソッドの有効な戻り値は次のとおりです。

意味
S_OK
失敗メッセージが正常に取得されました。
S_FALSE
コンポーネントに対して PostSnapshot の失敗メッセージが設定されていませんでした。
E_INVALIDARG
いずれかのパラメーター値が無効です。
E_OUTOFMEMORY
呼び出し側のメモリまたはその他のシステムリソースが不足しています。

解説(Remarks)

pbstrFailureMsg パラメーターが指す文字列は、SysFreeString 関数を呼び出して解放する責任が呼び出し側にあります。

vtbl 45 HRESULT GetAuthoritativeRestore(BOOLEAN* pbAuth)

リクエスターが、レプリケートされたデータストアに対してコンポーネントの復元を authoritative(権限のある)としてマークしているかどうかを判定します。

pbAuthBOOLEAN*out復元が authoritative の場合は true、それ以外の場合は false を受け取る、呼び出し側が割り当てた変数のアドレス。

戻り値

このメソッドの有効な戻り値は次のとおりです。

意味
S_OK
操作は成功しました。
E_INVALIDARG
いずれかのパラメーター値が無効です。
E_OUTOFMEMORY
呼び出し側のメモリまたはその他のシステムリソースが不足しています。

解説(Remarks)

ライターは、バックアップスキーママスクに VSS_BS_AUTHORITATIVE_RESTORE フラグを設定することで、authoritative 復元をサポートすることを示します。

詳細については、VSS 復元オプションの設定 を参照してください。

vtbl 46 HRESULT GetRollForward(VSS_ROLLFORWARD_TYPE* pRollType, LPWSTR* pbstrPoint)

コンポーネントのロールフォワード操作の種類を取得し、部分的なロールフォワード操作の復元ポイントを取得します。

pRollTypeVSS_ROLLFORWARD_TYPE*out実行するロールフォワード操作の種類を示す VSS_ROLLFORWARD_TYPE 列挙値。
pbstrPointLPWSTR*outロールフォワードの復元ポイントを指定する null 終端ワイド文字列を受け取る、呼び出し側が割り当てた変数のアドレス。

戻り値

このメソッドの有効な戻り値は次のとおりです。

意味
S_OK
操作は成功しました。
E_INVALIDARG
いずれかのパラメーター値が無効です。
E_OUTOFMEMORY
呼び出し側のメモリまたはその他のシステムリソースが不足しています。

解説(Remarks)

GetRollForward メソッドは、復元操作中にのみ呼び出すことができます。

GetRollForward の呼び出しが成功した場合、pRollType パラメーターで返される文字列は、SysFreeString 関数を呼び出して解放する責任が呼び出し側にあります。

ライターは、バックアップスキーママスクに VSS_BS_ROLLFORWARD_RESTORE フラグを設定することで、このメソッドをサポートすることを示します。

詳細については、VSS 復元オプションの設定 を参照してください。

vtbl 47 HRESULT GetRestoreName(LPWSTR* pbstrName)

復元中のコンポーネントに割り当てられた論理名を取得します。

pbstrNameLPWSTR*outコンポーネントの復元名を格納した null 終端ワイド文字列を受け取る、呼び出し側が割り当てた変数のアドレス。

戻り値

このメソッドの有効な戻り値は次のとおりです。

意味
S_OK
操作は成功しました。
E_INVALIDARG
いずれかのパラメーター値が無効です。
E_OUTOFMEMORY
呼び出し側のメモリまたはその他のシステムリソースが不足しています。

解説(Remarks)

GetRestoreName メソッドは、復元操作中にのみ呼び出すことができます。

GetRestoreName の呼び出しが成功した場合、pbstrName パラメーターで返される文字列は、SysFreeString 関数を呼び出して解放する責任が呼び出し側にあります。

ライターは、バックアップスキーママスクに VSS_BS_RESTORE_RENAME フラグを設定することで、このメソッドをサポートすることを示します。

詳細については、VSS 復元オプションの設定 を参照してください。

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