ReadProcessMemory读取内存的一个有关问题

ReadProcessMemory读取内存的一个问题
#include<stdio.h>
#include<windows.h>
#include<tlhelp32.h>


HANDLE process;
DWORD list[1024];
int listcnt;

int main()
{

DWORD *pdw;
const DWORD dwOneGB=1024*1024*1024;
const DWORD dwOnePage=4*1024;
DWORD d,dwBase=1024*1024;//读取内存的开始地址。。我改成了从1MB开始
BYTE arBytes[4096];
int id;
DWORD ad;
int value;
PROCESSENTRY32 pe32;
BOOL bmore;
CHAR name[]="QQ.exe";
process=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
bmore=Process32First(process,&pe32);

while(bmore)
{
if(lstrcmpi(pe32.szExeFile,name)==0)
{
MessageBox(NULL,TEXT("zhaodao"),TEXT("a"),MB_OK);
id=pe32.th32ProcessID;
process = OpenProcess(PROCESS_VM_READ , 0, id) ;


printf("请输入值");
scanf("%d",&value);
for(;dwBase<2*dwOneGB;dwBase+=dwOnePage)
{
if(!ReadProcessMemory(process,(LPVOID)dwBase,arBytes,4096,NULL))
{
MessageBox(NULL,TEXT("不可读"),TEXT("BIAOTI"),MB_OK);
continue;
}
for(int i=0;i<(int)4*1024-3;i++)
{
pdw=(DWORD*)&arBytes[i];
if(pdw[0]==value)
{
list[listcnt++]=dwBase+i;
printf("%d\n",listcnt);
printf("%d",list[0]);
}

}

}
break;
}
bmore=::Process32Next(process,&pe32);
}

::CloseHandle(process);
return 0;
}

为什么这个程序ReadProcessMemory只能读一次。。其他的全都是读取失败运行不可读!只有第一次可以读取成功
还有就是我把dwBas改成640*1024就一下也读不了了。。我用的是WIN7。。进程是从64KB开始的吗?

------解决方案--------------------
应该是访问到系统所保留的内存空间里了,如果容许用户访问可能会导致系统崩溃。