Beispiel #1
0
BOOL
CNdasUnitDeviceCreator::ReadDIBv1AndConvert(PNDAS_DIB_V2 pDIBv2)
{
    BOOL fSuccess = FALSE;
    NDAS_DIB DIBv1 = {0};
    PNDAS_DIB pDIBv1 = &DIBv1;

    fSuccess = m_devComm.ReadDiskBlock(
                   reinterpret_cast<PBYTE>(pDIBv1),
                   NDAS_BLOCK_LOCATION_DIB_V1);

    if (!fSuccess)
    {
        XTLTRACE2(NDASSVC_NDASUNITDEVICE, TRACE_LEVEL_ERROR,
                  "ReadDiskBlock(DIBv1) failed, error=0x%X\n",
                  GetLastError());
        return FALSE;
    }

    //
    // If there is no DIB in the disk,
    // create a pseudo DIBv2
    //
    if (NDAS_DIB_SIGNATURE != pDIBv1->Signature ||
            IS_NDAS_DIBV1_WRONG_VERSION(*pDIBv1))
    {
        //
        // Create a pseudo DIBv2
        //
        InitializeDIBv2AsSingle(pDIBv2);
        return TRUE;
    }

    //
    // Convert V1 to V2
    //
    fSuccess = ConvertDIBv1toDIBv2(
                   pDIBv1,
                   pDIBv2,
                   m_udinfo.SectorCount.QuadPart);

    if (!fSuccess) {
        //
        // Create a pseudo DIBv2 again!
        //
        InitializeDIBv2AsSingle(pDIBv2);
        return TRUE;
    }

    return TRUE;
}
BOOL 
CNdasUnitDeviceCreator::ReadDIBv1AndConvert(PNDAS_DIB_V2 pDIBv2)
{
	BOOL fSuccess = FALSE;
	NDAS_DIB DIBv1 = {0};
	PNDAS_DIB pDIBv1 = &DIBv1;

	fSuccess = m_devComm.ReadDiskBlock(
		reinterpret_cast<PBYTE>(pDIBv1), 
		NDAS_BLOCK_LOCATION_DIB_V1);

	if (!fSuccess) {
		DBGPRT_ERR_EX(_FT("Reading DIBv1 block failed: "));
		return FALSE;
	}

	//
	// If there is no DIB in the disk,
	// create a pseudo DIBv2
	//
	if (NDAS_DIB_SIGNATURE != pDIBv1->Signature ||
		IS_NDAS_DIBV1_WRONG_VERSION(*pDIBv1)) 
	{
		//
		// Create a pseudo DIBv2
		//
		InitializeDIBv2AsSingle(pDIBv2);		
		return TRUE;
	}

	//
	// Convert V1 to V2
	//
	fSuccess = ConvertDIBv1toDIBv2(
		pDIBv1, 
		pDIBv2, 
		m_udinfo.SectorCount.QuadPart);

	if (!fSuccess) {
		//
		// Create a pseudo DIBv2 again!
		//
		InitializeDIBv2AsSingle(pDIBv2);		
		return TRUE;
	}

	return TRUE;
}