BOOL CNdasDeviceRegistrar::Unregister(DWORD SlotNo) { InstanceAutoLock autolock(this); DeviceSlotMap::iterator slot_itr = m_deviceSlotMap.find(SlotNo); if (m_deviceSlotMap.end() == slot_itr) { // TODO: Make more specific error code ::SetLastError(NDASSVC_ERROR_DEVICE_ENTRY_NOT_FOUND); return FALSE; } CNdasDevicePtr pDevice = slot_itr->second; if (NDAS_DEVICE_STATUS_DISABLED != pDevice->GetStatus()) { // TODO: ::SetLastError(NDAS_ERROR_CANNOT_UNREGISTER_ENABLED_DEVICE); // TODO: Make more specific error code ::SetLastError(NDASSVC_ERROR_CANNOT_UNREGISTER_ENABLED_DEVICE); return FALSE; } DeviceIdMap::iterator id_itr = m_deviceIdMap.find(pDevice->GetDeviceId()); XTLASSERT(m_deviceIdMap.end() != id_itr); m_deviceIdMap.erase(id_itr); m_deviceSlotMap.erase(slot_itr); m_slotbit[SlotNo] = FALSE; XTL::CStaticStringBuffer<30> containerName(_T("Devices\\%04d"), SlotNo); BOOL fSuccess = _NdasSystemCfg.DeleteContainer(containerName, FALSE); if (!fSuccess) { XTLTRACE2(NDASSVC_NDASDEVICEREGISTRAR, TRACE_LEVEL_WARNING, "Deleting registration entry from the registry failed at %ls, error=0x%X\n", containerName, GetLastError()); } (void) m_service.GetEventPublisher().DeviceEntryChanged(); return TRUE; }
BOOL CNdasDeviceRegistrar::Unregister(const NDAS_DEVICE_ID& DeviceId) { InstanceAutoLock autolock(this); XTLTRACE2(NDASSVC_NDASDEVICEREGISTRAR, TRACE_LEVEL_INFORMATION, "Unregister device %s\n", CNdasDeviceId(DeviceId).ToStringA()); DeviceIdMap::iterator itrId = m_deviceIdMap.find(DeviceId); if (m_deviceIdMap.end() == itrId) { ::SetLastError(NDASSVC_ERROR_DEVICE_ENTRY_NOT_FOUND); } CNdasDevicePtr pDevice = itrId->second; if (pDevice->GetStatus() != NDAS_DEVICE_STATUS_DISABLED) { ::SetLastError(NDASSVC_ERROR_CANNOT_UNREGISTER_ENABLED_DEVICE); return FALSE; } DWORD SlotNo = pDevice->GetSlotNo(); XTLASSERT(0 != SlotNo); DeviceSlotMap::iterator itrSlot = m_deviceSlotMap.find(SlotNo); m_deviceIdMap.erase(itrId); m_deviceSlotMap.erase(itrSlot); m_slotbit[SlotNo] = false; XTL::CStaticStringBuffer<30> containerName(_T("Devices\\%04d"), SlotNo); BOOL fSuccess = _NdasSystemCfg.DeleteContainer(containerName, TRUE); if (!fSuccess) { XTLTRACE2(NDASSVC_NDASDEVICEREGISTRAR, TRACE_LEVEL_WARNING, "Deleting registration entry from the registry failed at %ls, error=0x%X\n", containerName, GetLastError()); } (void) m_service.GetEventPublisher().DeviceEntryChanged(); return TRUE; }