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); } }
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; }