The system divides the linear address space into four areas, called arenas, each of which is managed differently.
The DOS arena spans linear addresses in the range MINDOSLADDR through MAXDOSLADDR, and is used for virtual machines (VMs). The DOS arena is itself divided into several areas. For more information about the DOS arena, see V86 Address Space Mapping and Allocation.
The private arena spans linear addresses in the range MINPRIVATELADDR through MAXPRIVATELADDR. This arena is used for code and data that is private to a Win32 process. The mapping of pages in this arena to physical storage depends on the current memory context, as does which pages are reserved.
The shared arena spans linear addresses in the range MINSHAREDLADDR through MAXSHAREDLADDR. This arena is used for ring-3 shared code and data, such as 16-bit Windows applications and DLLs, DPMI memory, and 32-bit system DLLs. The mapping of pages in this arena does not depend on the current VM or memory context.
The system arena spans linear addresses in the range MINSYSTEMLADDR through MAXSYSTEMLADDR. This arena is used for code and data for the VMM and virtual devices.
The last four megabytes of the linear address space is permanently invalid and is not part of any arena. Because zero is a valid address, you should use an address in this permanently invalid region to denote an invalid pointer. To be extra safe, you can use the value 0xFFFE0000, which lies right in the middle of the invalid region.
See also _GetNulPageHandle