VOID CNdasLogicalDevice::SetStatus(NDAS_LOGICALDEVICE_STATUS newStatus) { ximeta::CAutoLock autolock(this); // // Ignore duplicate status change // if (m_status == newStatus) { return; } NDAS_LOGICALDEVICE_STATUS oldStatus = m_status; BOOL fValid = pCheckStatusValidity(m_status, newStatus); _ASSERTE(fValid); m_status = newStatus; // Update Unit Device Status for (DWORD i = 0; i < GetUnitDeviceCount(); ++i) { CRefObjPtr<CNdasUnitDevice> pUnitDevice = GetUnitDevice(i); if (NULL == pUnitDevice.p) { DBGPRT_ERR(_FT("Unit Device %s is not found.\n"), CNdasUnitDeviceId(GetUnitDeviceID(i)).ToString()); continue; } // // TODO: Create a status updater with observer // switch (m_status) { case NDAS_LOGICALDEVICE_STATUS_MOUNTED: case NDAS_LOGICALDEVICE_STATUS_MOUNT_PENDING: case NDAS_LOGICALDEVICE_STATUS_UNMOUNT_PENDING: pUnitDevice->SetStatus(NDAS_UNITDEVICE_STATUS_MOUNTED); break; default: // otherwise pUnitDevice->SetStatus(NDAS_UNITDEVICE_STATUS_NOT_MOUNTED); } } // publish a status change event (VOID) pGetNdasEventPublisher()-> LogicalDeviceStatusChanged(m_logicalDeviceId, oldStatus, newStatus); }