void WalkUserSpace()
{
SYSTEM_INFO stSysInf;
MEMORY_BASIC_INFORMATION st_MemBasicInfor;
memset(&stSysInf, 0, sizeof(SYSTEM_INFO));
memset(&st_MemBasicInfor, 0, sizeof(MEMORY_BASIC_INFORMATION));
GetSystemInfo(&stSysInf);
DWORD dwUserAddrLow = (DWORD)stSysInf.lpMinimumApplicationAddress;
DWORD dwUserAddrHigh = (DWORD)stSysInf.lpMaximumApplicationAddress;
DWORD dwWalkAddr = dwUserAddrLow;
DWORD dwVQueryRet = 0;
while(dwWalkAddr < dwUserAddrHigh)
{
dwVQueryRet = VirtualQuery((PVOID)dwWalkAddr
, &st_MemBasicInfor
, sizeof(MEMORY_BASIC_INFORMATION));
if(dwVQueryRet == 0) // unaccessable memory;
{
dwWalkAddr += st_MemBasicInfor.RegionSize;
continue;
}
//printf("Section: %-10p, Size: %-10p\n", (PVOID)dwWalkAddr, st_MemBasicInfor.RegionSize);
dwWalkAddr += st_MemBasicInfor.RegionSize;
}