Hi all
Code:
SYSTEM_INFO System_Info;
  GetSystemInfo(&System_Info);
  printf("Page size :\t%d\n",System_Info.dwPageSize);
  printf("Allocation granularity :\t%d\n",System_Info.dwAllocationGranularity);
  printf("Processor type :\t%d\n",System_Info.dwProcessorType);
  printf("Maximum application adresse :\t%X\n",System_Info.lpMaximumApplicationAddress);
  printf("Minimum application adresse :\t%X\n",System_Info.lpMinimumApplicationAddress);
  MEMORYSTATUS MemoryStatus;
  GlobalMemoryStatus(&MemoryStatus);
  printf("AvailVirtual :\t%d\n",MemoryStatus.dwAvailVirtual);
  printf("TotalVirtual :\t%d\n",MemoryStatus.dwTotalVirtual);
  printf("AvailPhy :\t%d\t%f%\n",MemoryStatus.dwAvailPhys,floorf(((float)MemoryStatus.dwAvailPhys/(float)MemoryStatus.dwTotalPhys)*100));
  printf("TotalPhy :\t%d\n",MemoryStatus.dwTotalPhys);
  


  VOID* lpvBase;
  lpvBase=VirtualAlloc(NULL,4096*4,MEM_RESERVE,PAGE_NOACCESS);
  if(lpvBase==NULL)
  {
      printf("Cant reserve virtual memory");
      return 0;
  }

  printf("base :\t%x\n",lpvBase);
  MEMORY_BASIC_INFORMATION MemoryBasicInformation;
  DWORD OldProtect;
  
  if(!VirtualProtect(lpvBase,4096*4,PAGE_READONLY,&OldProtect))
  {
       printf("\nVirtualProtec failed %d\n\n",GetLastError());
  }
  
  if(VirtualQuery(lpvBase,&MemoryBasicInformation,sizeof(MEMORY_BASIC_INFORMATION))==0)
  {
      printf("Oooooooops");
  }
  else
  {
      printf("State :\t%x\n",MemoryBasicInformation.State);
      printf("Allocation protect :\t%x\n",MemoryBasicInformation.AllocationProtect);
      printf("Allocation base :\t%x\n",MemoryBasicInformation.AllocationBase);
  }
  VirtualFree(lpvBase,0,MEM_RELEASE);

  printf("\ncontinue\n");
  getchar();
  return 0;
I dont know why VirtualProtect Failed