Exemplo n.º 1
0
void
CMainFrame::OnCmdMountDeviceRW(NDAS_LOGICALDEVICE_ID logDeviceId)
{
	ndas::LogicalDevicePtr pLogDevice;
	if (!ndas::FindLogicalDevice(pLogDevice, logDeviceId))
	{
		ATLTRACE("Invalid logical device id specified: %d\n", logDeviceId);
		return;
	}
	if (!pLogDevice->PlugIn(TRUE))
	{
		if (NDASSVC_ERROR_MULTIPLE_WRITE_ACCESS_NOT_ALLOWED == ::GetLastError())
		{
			int response = AtlMessageBox(
				m_hWnd, 
				IDS_REQUEST_SURRENDER_RW_ACCESS, 
				IDS_MAIN_TITLE,
				MB_YESNO | MB_ICONEXCLAMATION);
			if (IDYES == response) 
			{
				pRequestSurrenderAccess(m_hWnd,pLogDevice);
			}
		}
		else
		{
			ErrorMessageBox(IDS_ERROR_MOUNT_DEVICE_RW);
		}
		return;
	}

	//
	// Wait Mount Dialog
	//
	if (!pLogDevice->UpdateStatus())
	{
		// Service Communication failure?
		return;
	}
	if (NDAS_LOGICALDEVICE_STATUS_MOUNT_PENDING == pLogDevice->GetStatus())
	{
		CWaitMountDialog().DoModal(m_hWnd, pLogDevice);
	}
}
Exemplo n.º 2
0
void
CMainFrame::OnCmdMountLogicalUnit(NDAS_LOGICALDEVICE_ID NdasLogicalUnitId, BOOL WriteAccess)
{
	TASKDIALOGCONFIG taskConfig;

	ndas::LogicalDevicePtr pNdasLogicalUnit;
	if (!ndas::FindLogicalDevice(pNdasLogicalUnit, NdasLogicalUnitId))
	{
		ATLTRACE("Invalid logical device id specified: %d\n", NdasLogicalUnitId);
		return;
	}

	if (pNdasLogicalUnit->GetNdasLogicalUnitError() == NDAS_LOGICALDEVICE_ERROR_DEGRADED_MODE) 
	{
		int response = pTaskDialogVerify(
			m_hWnd,
			IDS_MAIN_TITLE,
			IDS_CONFIRM_DEGRADED_MOUNT,
			IDS_CONFIRM_DEGRADED_MOUNT_DESC,
			_T("DontConfirmDegradedMode"), 
			TDCBF_YES_BUTTON | TDCBF_NO_BUTTON,
			IDNO, 
			IDYES);

		if (IDNO == response)
		{
			return;
		}
	}

	CMountTaskDialog dlg(pNdasLogicalUnit, WriteAccess);

retry:

	dlg.DoModal(GetDesktopWindow());

	HRESULT hr = dlg.GetTaskResult();

	if (NDASSVC_ERROR_MULTIPLE_WRITE_ACCESS_NOT_ALLOWED == hr)
	{
		int response = pTaskDialogVerify(
			m_hWnd,
			IDS_MAIN_TITLE,
			IDS_REQUEST_SURRENDER_RW_ACCESS,
			IDS_REQUEST_SURRENDER_RW_ACCESS_DESC,
			static_cast<LPCTSTR>(NULL),
			TDCBF_YES_BUTTON | TDCBF_NO_BUTTON,
			IDYES,
			IDYES);

		if (IDYES == response) 
		{
			pRequestSurrenderAccess(m_hWnd,pNdasLogicalUnit);
		}
	}
	else if (
		NDASSVC_ERROR_NDAS_LOGICALUNIT_HAS_BAD_DISK == hr ||
		NDASSVC_ERROR_NDAS_LOGICALUNIT_HAS_BAD_SECTOR == hr ||
		NDASSVC_ERROR_NDAS_LOGICALUNIT_REPLACED_DEVICE_WITH_SPARE == hr ||
		NDASSVC_ERROR_NDAS_LOGICALUNIT_ASK_EMREGENCY_MOUNT == hr)
	{
		CString formattedWarningMessage = pFormatErrorString(hr);

		CTaskDialogEx taskDialog(m_hWnd);
		taskDialog.SetCommonButtons(TDCBF_YES_BUTTON | TDCBF_NO_BUTTON);
		taskDialog.SetWindowTitle(IDS_MAIN_TITLE);
		taskDialog.SetMainIcon(IDR_MAINFRAME);
		taskDialog.SetMainInstructionText(IDS_WARNING_MOUNT_ASK_IGNORE);
		taskDialog.SetContentText(static_cast<LPCTSTR>(formattedWarningMessage));
		
		int selected;
		HRESULT hr = taskDialog.DoModal(GetDesktopWindow(), &selected);
		ATLASSERT(SUCCEEDED(hr));

		if (SUCCEEDED(hr) && IDYES == selected)
		{
			dlg.SetIgnoreWarning(TRUE);
			goto retry;
		}
	}
	else if (FAILED(hr))
	{
		CString formattedMessage = pFormatErrorString(hr);

		CTaskDialogEx taskDialog(m_hWnd);
		taskDialog.SetCommonButtons(TDCBF_RETRY_BUTTON | TDCBF_CANCEL_BUTTON);
		taskDialog.SetWindowTitle(IDS_MAIN_TITLE);
		taskDialog.SetMainIcon(IDR_MAINFRAME);
		if (WriteAccess)
		{
			taskDialog.SetMainInstructionText(IDS_ERROR_MOUNT_DEVICE_RW);
		}
		else
		{
			taskDialog.SetMainInstructionText(IDS_ERROR_MOUNT_DEVICE_RO);			
		}
		taskDialog.SetContentText(static_cast<LPCTSTR>(formattedMessage));

		int selected;
		HRESULT hr = taskDialog.DoModal(GetDesktopWindow(), &selected);
		ATLASSERT(SUCCEEDED(hr));

		if (SUCCEEDED(hr) && IDRETRY == selected)
		{
			goto retry;
		}
	}
	else
	{
		pNdasLogicalUnit->UpdateInfo();

		//
		// Check for uninitialized disks
		//

		const NDASUSER_LOGICALDEVICE_INFORMATION* info = 
			pNdasLogicalUnit->GetLogicalDeviceInfo();

		DWORD abnorm = info->LogicalDeviceParams.Abnormalities;

		if (NDAS_LOGICALUNIT_ABNORM_NONE != abnorm)
		{
			pWarnUninitalizedDisks(NdasLogicalUnitId);
		}
	}

	return;
}