CUnitDiskObjectList CDiskObjectBuilder::BuildDiskObjectList( const CDeviceInfoList listDevice, LPREFRESH_STATUS pFuncRefreshStatus, void *context) { CUnitDiskObjectList listDiskObj; CDeviceInfoList::const_iterator itr; UINT number = 0; for ( itr = listDevice.begin(); itr != listDevice.end(); ++itr ) { if(pFuncRefreshStatus) { if(!pFuncRefreshStatus(number++, context)) return listDiskObj; } CUnitDiskObjectPtr diskObj; UINT nDiskCount; CLanSession session( (*itr)->GetDeviceID()->Node ); // AING : should be replaced with disconnected disk in future if(NDAS_DEVICE_STATUS_DISCONNECTED == (*itr)->GetDeviceStatus()) continue; // Get number of disks in the device try { session.Connect(); nDiskCount = session.GetDiskCount(); session.Disconnect(); } catch( CNDASException &e ) { (*itr)->SetDeviceStatus(NDAS_DEVICE_STATUS_DISCONNECTED); e.PrintStackTrace(); continue; } // Create disk object by retrieving information from the device. for ( UINT i=0; i < nDiskCount; i++ ) { try { diskObj = CreateDiskObject( *itr, static_cast<unsigned _int8>(i) ); listDiskObj.push_back( diskObj ); } catch( CNDASException &e ) { e.PrintStackTrace(); continue; } } } return listDiskObj; }