Can I return the block of memory between offset 1 and offset 2 in my GetMemory function?
You don't return a 'block of memory'. You return a pointer to a particular memory location which the caller then uses as required.

Based on your example use, I think this test program shows what you want. What has been confusing us is from your original function that you want to return a certain number of bytes. You don't do this and GetMemory does not need to know how many bytes are required as you are not allocating memory as the memory has already been allocated and m_lpdata points to the start of this block of already allocated memory. It is up to the caller of GetMemory how the memory pointer returned is used.

This is a simple test program to demonstate what I think you are after.

Code:
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>

const int noEntry = 30;		//Number of elements for m_lpdata for test purpose
LPVOID	m_lpData;

//Returns pointer to memory, offset bytes from start of m_lpData
LPVOID GetMemory(DWORD offset)
{
BYTE* buffer = (BYTE*)m_lpData;

	buffer += offset;	
	return ((LPVOID)buffer);
}


int main()
{
	//Allocate some memory to m_lpdata for purpose of test
	//noEntry entries of int
	if ((m_lpData = calloc(noEntry, sizeof(int))) == NULL) {
		puts("Cannot allocate memory");
		return 1;
	}

	//Initialise memory pointed to by m_lpData for purpose of test
	//Contains the numbers 1 2 3 4  etc
	for (int m = 0; m < noEntry; ++m) 
		((int*)m_lpData)[m] = m + 1;


DWORD start = 10 * sizeof(int);  // start is after 10th int

LPVOID subblock = GetMemory(start);

//Cast subblock to an array of 4 ints
int* array = (int*)subblock;

	//Array contains 4 ints with values 11, 12, 13, 14
	//Prints 11 12 13 14
	for (int i = 0; i < 4; ++i) {
		//assert(array[i] == 10 + i + 1);
		printf("%i  ", array[i]);
	}

	puts("");
	free(m_lpData);
	return 0;
}