STDMETHODIMP CNdasDiskUnit::IsBitmapClean() { CAutoInstanceLock autolock(this); CNdasDeviceComm devComm(m_pParentNdasDevice, m_unitDeviceId.UnitNo); HRESULT hr = devComm.Connect(FALSE); if (FAILED(hr)) { return hr; } NDAS_UNITDEVICE_HARDWARE_INFO udinfo = {0}; udinfo.Size = sizeof(NDAS_UNITDEVICE_HARDWARE_INFO); hr = devComm.GetNdasUnitInfo(&udinfo); if (FAILED(hr)) { XTLTRACE2(NDASSVC_NDASUNITDEVICE, TRACE_LEVEL_ERROR, "GetUnitDeviceInformation of %s failed, error=0x%X\n", CNdasUnitDeviceId(m_unitDeviceId).ToStringA(), hr); return hr; } BYTE BitmapData[128 * 512] = {0}; // 1MB from NDAS_BLOCK_LOCATION_BITMAP for (INT i = 0; i < 16; i++) { hr = devComm.ReadDiskBlock( BitmapData, NDAS_BLOCK_LOCATION_BITMAP + (i * 128), 128); if (FAILED(hr)) { return hr; } PULONG pBitmapData = (PULONG)BitmapData; for (INT j = 0; j < 128 * 512 / 4; ++j) { if (*pBitmapData) { return E_FAIL; } pBitmapData++; } } return S_OK; }
BOOL CNdasUnitDiskDevice::IsBitmapClean() { InstanceAutoLock autolock(this); CNdasDevicePtr pParentDevice(m_pParentDevice); CNdasDeviceComm devComm(pParentDevice, m_unitDeviceId.UnitNo); BOOL fSuccess = devComm.Connect(FALSE); if(!fSuccess) { return FALSE; } NDAS_UNITDEVICE_HARDWARE_INFO udinfo = {0}; udinfo.Size = sizeof(NDAS_UNITDEVICE_HARDWARE_INFO); fSuccess = devComm.GetUnitDeviceInformation(&udinfo); if (!fSuccess) { XTLTRACE2(NDASSVC_NDASUNITDEVICE, TRACE_LEVEL_ERROR, "GetUnitDeviceInformation of %s failed, error=0x%X\n", this->ToStringA(), GetLastError()); return FALSE; } BYTE BitmapData[128 * 512] = {0}; // 1MB from NDAS_BLOCK_LOCATION_BITMAP for(INT i = 0; i < 16; i++) { fSuccess = devComm.ReadDiskBlock(BitmapData, NDAS_BLOCK_LOCATION_BITMAP + (i * 128), 128); if(!fSuccess) { return FALSE; } PULONG pBitmapData = (PULONG)BitmapData; for (INT j = 0; j < 128 * 512 / 4; ++j) { if(*pBitmapData) { return FALSE; } pBitmapData++; } } return TRUE; }
BOOL CNdasUnitDiskDevice::IsBitmapClean() { ximeta::CAutoLock autolock(this); CNdasDeviceComm devComm(*m_pParentDevice, m_unitDeviceId.UnitNo); BOOL fSuccess = devComm.Initialize(FALSE); if(!fSuccess) { return FALSE; } NDAS_UNITDEVICE_INFORMATION unitDevInfo; fSuccess = devComm.GetUnitDeviceInformation(&unitDevInfo); if (!fSuccess) { DPErrorEx(_FT("GetUnitDeviceInformation of %s failed: "), this->ToString()); return FALSE; } BYTE BitmapData[128 * 512] = {0}; // 1MB from NDAS_BLOCK_LOCATION_BITMAP for(INT i = 0; i < 16; i++) { fSuccess = devComm.ReadDiskBlock(BitmapData, NDAS_BLOCK_LOCATION_BITMAP + (i * 128), 128); if(!fSuccess) { return FALSE; } INT j = 0; PULONG pBitmapData = (PULONG)BitmapData; for(; j < 128 * 512 / 4; ++j) { if(*pBitmapData) { return FALSE; } pBitmapData++; } } return TRUE; }