/*++ Copyright (c) 1999 Microsoft Corporation Abstract: @doc @module VolDlg.cpp | Implementation of the IsVolumeXXX dialog @end Author: Adi Oltean [aoltean] 10/22/2000 Revision History: Name Date Comments aoltean 10/22/2000 Created --*/ ///////////////////////////////////////////////////////////////////////////// // Includes #include "stdafx.hxx" #include "resource.h" #include "vsswprv.h" #include "GenDlg.h" #include "VssTest.h" #include "VolDlg.h" #include "vswriter.h" #include "vsbackup.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #define STR2W(str) ((LPTSTR)((LPCTSTR)(str))) ///////////////////////////////////////////////////////////////////////////// // CVolDlg dialog CVolDlg::CVolDlg( IVssCoordinator *pICoord, CWnd* pParent /*=NULL*/ ) : CVssTestGenericDlg(CVolDlg::IDD, pParent), m_pICoord(pICoord) { //{{AFX_DATA_INIT(CVolDlg) m_strObjectId.Empty(); m_strVolumeName.Empty(); //}}AFX_DATA_INIT } CVolDlg::~CVolDlg() { } void CVolDlg::DoDataExchange(CDataExchange* pDX) { CVssTestGenericDlg::DoDataExchange(pDX); //{{AFX_DATA_MAP(CVolDlg) DDX_Text(pDX, IDC_VOLUME_OBJECT_ID, m_strObjectId); DDX_Text(pDX, IDC_VOLUME_NAME, m_strVolumeName); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CVolDlg, CVssTestGenericDlg) //{{AFX_MSG_MAP(CVolDlg) ON_BN_CLICKED(IDC_NEXT, OnNext) ON_BN_CLICKED(IDC_VOLUME_IS_VOL_SUPPORTED, OnIsVolumeSupported) ON_BN_CLICKED(IDC_VOLUME_IS_VOL_SNAPSHOTTED,OnIsVolumeSnapshotted) ON_BN_CLICKED(IDC_VOLUME_IS_VOL_SUPPORTED2, OnIsVolumeSupported2) ON_BN_CLICKED(IDC_VOLUME_IS_VOL_SNAPSHOTTED2,OnIsVolumeSnapshotted2) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CVolDlg message handlers BOOL CVolDlg::OnInitDialog() { CVssFunctionTracer ft( VSSDBG_VSSTEST, L"CVolDlg::OnInitDialog" ); try { CVssTestGenericDlg::OnInitDialog(); m_eCallType = VSS_IS_VOL_SUPPORTED; BOOL bRes = ::CheckRadioButton( m_hWnd, IDC_VOLUME_IS_VOL_SUPPORTED, IDC_VOLUME_IS_VOL_SUPPORTED, IDC_VOLUME_IS_VOL_SUPPORTED ); _ASSERTE( bRes ); // Initializing Snapshot Set ID VSS_ID ObjectId = VSS_SWPRV_ProviderId; LPOLESTR strGUID; ft.hr = ::StringFromCLSID( ObjectId, &strGUID ); if ( ft.HrFailed() ) ft.ErrBox( VSSDBG_VSSTEST, E_UNEXPECTED, L"Error on calling StringFromCLSID. hr = 0x%08lx", ft.hr); m_strObjectId = OLE2T(strGUID); ::CoTaskMemFree(strGUID); UpdateData( FALSE ); } VSS_STANDARD_CATCH(ft) return TRUE; // return TRUE unless you set the focus to a control } void CVolDlg::OnNext() { CVssFunctionTracer ft( VSSDBG_VSSTEST, L"CVolDlg::OnNext" ); USES_CONVERSION; const nBuffLen = 2048; // including the zero character. WCHAR wszBuffer[nBuffLen]; try { UpdateData(); // Get the provider Id. LPTSTR ptszObjectId = const_cast(LPCTSTR(m_strObjectId)); VSS_ID ProviderId; ft.hr = ::CLSIDFromString(T2OLE(ptszObjectId), &ProviderId); if (ft.HrFailed()) ft.Throw( VSSDBG_COORD, E_UNEXPECTED, L"Error on converting the object Id %s to a GUID. lRes == 0x%08lx", T2W(ptszObjectId), ft.hr ); // Get the enumerator BS_ASSERT(m_pICoord); BOOL bResult = FALSE; LPWSTR pwszFunctionName = L""; switch (m_eCallType) { case VSS_IS_VOL_SUPPORTED: ft.hr = m_pICoord->IsVolumeSupported( ProviderId, T2W(LPTSTR((LPCTSTR)m_strVolumeName)), &bResult ); pwszFunctionName = L"IsVolumeSupported"; break; case VSS_IS_VOL_SNAPSHOTTED: ft.hr = m_pICoord->IsVolumeSnapshotted( ProviderId, T2W(LPTSTR((LPCTSTR)m_strVolumeName)), &bResult ); pwszFunctionName = L"IsVolumeSnapshotted"; break; case VSS_IS_VOL_SUPPORTED2: { CComPtr pComp; ft.hr = CreateVssBackupComponents(&pComp); ft.hr = pComp->IsVolumeSupported( ProviderId, T2W(LPTSTR((LPCTSTR)m_strVolumeName)), &bResult ); pwszFunctionName = L"IsVolumeSupported2"; } break; case VSS_IS_VOL_SNAPSHOTTED2: ft.hr = IsVolumeSnapshotted( T2W(LPTSTR((LPCTSTR)m_strVolumeName)), &bResult ); pwszFunctionName = L"IsVolumeSnapshotted2"; break; default: ft.ErrBox( VSSDBG_VSSTEST, E_UNEXPECTED, L"Invalid call type %s().", pwszFunctionName); } if (ft.HrFailed()) ft.ErrBox( VSSDBG_VSSTEST, ft.hr, L"Error on calling %s(). [0x%08lx]", pwszFunctionName, ft.hr); ft.MsgBox(L"Function result", L"Function %s("WSTR_GUID_FMT L", %s, ...) returned %s", pwszFunctionName, GUID_PRINTF_ARG(ProviderId), T2W(LPTSTR((LPCTSTR)m_strVolumeName)), bResult? L"TRUE":L"FALSE"); } VSS_STANDARD_CATCH(ft) } void CVolDlg::OnIsVolumeSupported() { m_eCallType = VSS_IS_VOL_SUPPORTED; } void CVolDlg::OnIsVolumeSnapshotted() { m_eCallType = VSS_IS_VOL_SNAPSHOTTED; } void CVolDlg::OnIsVolumeSupported2() { m_eCallType = VSS_IS_VOL_SUPPORTED; } void CVolDlg::OnIsVolumeSnapshotted2() { m_eCallType = VSS_IS_VOL_SNAPSHOTTED; }