Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
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;
}