Process Environment Block

In computing the Process Environment Block (abbreviated PEB) is a data structure in the Windows NT operating system family. It is an opaque data structure that is used by the operating system internally, most of whose fields are not intended for use by anything other than the operating system. Microsoft notes, in its MSDN Library documentation — which documents only a few of the fields — that the structure "may be altered in future versions of Windows". The PEB contains data structures that apply across a whole process, including global context, startup parameters, data structures for the program image loader, the program image base address, and synchronization objects used to provide mutual exclusion for process-wide data structures.

The PEB is closely associated with the kernel mode  data structure, as well as with per-process data structures managed within the address space of the Client-Server Runtime Sub-System process. However, (like the CSRSS data structures) the PEB is not a kernel mode data structure itself. It resides in the application mode address space of the process that it relates to. This is because it is designed to be used by the application-mode code in the operating system libraries, such as NTDLL, that executes outside of kernel mode, such as the code for the program image loader and the heap manager.

In WinDbg, the command that dumps the contents of a PEB is the  command, which is passed the address of the PEB within a process' application address space. That information, in turn, is obtained by the  command, which displays the information from the   data structure, one of whose fields is the address of the PEB.

The contents of the PEB are initialized by the  system call, the Native API function that implements part of, and underpins, the Win32 ,  ,  , and   library functions that are in the kernel32.dll and advapi32.dll libraries as well as underpinning the   function in the Windows NT POSIX library, posix.dll.

For Windows NT POSIX processes, the contents of a new process' PEB are initialized by  as simply a direct copy of the parent process' PEB, in line with how the   function operates. For Win32 processes, the initial contents of a new process' PEB are mainly taken from global variables maintained within the kernel. However, several fields may instead be taken from information provided within the process' image file, in particular information provided in the  data structure within the PE file format (PE+ or PE32+ in 64 bit executable images).

The WineHQ project provides a fuller PEB definition in its version of winternl.h. Later versions of Windows have adjusted the number and purpose of some fields.