в приложении или драйвере разбивать пересылку на N частей по границам страниц. Попробуйте ради эксперимента так считать буфер в приложении: int total=4*1024*1024; while(total>0) { int len=0x1000-(int)dst&0xfff; if (len>total) len=total; MasterTrnsfer(src,dst,len); src+=len; dst+=len; total-=len; }