public void Read(ulong offsetFileStart, uint bytesToRead, ref uint bytesRead, IntPtr buffer, ref bool eof)
{
if (_stream.Position != (long) offsetFileStart)
_stream.Seek((long) offsetFileStart, SeekOrigin.Begin);
var intBuff = new Byte[bytesToRead];
var read = 0;
var lastRead = 0;
do
{
lastRead = _stream.Read(intBuff, read, ((int) bytesToRead - read));
read += lastRead;
} while (lastRead != 0 && read < bytesToRead);
bytesRead = (uint) read;
Marshal.Copy(intBuff, 0, buffer, (int) bytesRead);
eof = read < bytesRead;
}