#include "precomp.h"

#include "ReiserDiskAccess.h"

#include "reiserfs.h"


ReiserDiskAccess::ReiserDiskAccess(DWORD disk, LONGLONG startingOffset, LONGLONG length)
    :   m_PI(disk, startingOffset, length)
{
}

ReiserDiskAccess::~ReiserDiskAccess()
{
}

bool ReiserDiskAccess::IsReiserFS(DWORD disk, LONGLONG startingOffset, LONGLONG length)
{
    bool success = false;

    TRACE(("IsReiserFS(%d,%I64d,%I64d)\n", disk,startingOffset, length)) 
    ReiserDiskAccess* rda = new ReiserDiskAccess(disk, startingOffset, length);
    if( rda )
    {
        ReiserFsPartition partition(rda);
        success = partition.CheckReiserFsPartition();
        delete rda;
    }
    return success;
}

BOOL ReiserDiskAccess::Open(int)
{
    return TRUE;
}

void ReiserDiskAccess::Close()
{
}

BOOL ReiserDiskAccess::GetDriveGeometry( DISK_GEOMETRY* lpDG )
{
    ZeroMemory( lpDG, sizeof(DISK_GEOMETRY));
    lpDG->BytesPerSector = m_PI.GetBytesPerSector();
    return TRUE;
}

BOOL ReiserDiskAccess::GetDriveLayout( LPBYTE lpbMemory, DWORD dwSize )
{
    return FALSE;
}

BOOL ReiserDiskAccess::ReadAbsolute( LPBYTE lpbMemory, DWORD dwSize, INT64 OffsetInBytes )
{
    DWORD dwBytesPerSector = m_PI.GetBytesPerSector();
    DWORD dwSectors =  dwSize / dwBytesPerSector;
    OffsetInBytes /= dwBytesPerSector;
	m_PI.ReadSectors(OffsetInBytes, lpbMemory, dwSectors);
    return TRUE;
}




syntax highlighted by Code2HTML, v. 0.9.1