进程环境块

进程环境块（PEB）是 Windows NT操作系统内部使用的数据结构，用以存储每个进程的运行时数据。  Microsoft的MSDN文档中仅公开了PEB的少数几个域，该结构“在未来的Windows版本中可能会修改”。PEB包含的数据结构适用于整个进程，如全局上下文，启动参数，程序image装载器的数据结构，程序image的基地址，进程级互斥同步访问对象等。

PEB与kernel mode EPROCESS数据结构密切相关。也是逐进程数据结构，在客户-服务器运行时子系统(CSRSS)进程地址空间被管理。但是，类似于CSRSS数据结构，PEB自身并不是内核模式数据结构。它驻留在所关联的进程的用户态内存空间中。这是因为它被设计为被操作系统的用户态的程序所使用，如NTDLL，在内核态之外执行，如程序映象的加载器与堆管理器。

WinDbg中，卸载PEB内容的命令是!peb，命令参数是PEB在进程地址空间的地址，它实际上是通过!process命令获取，将显示来自于EPROCESS数据结构的信息，其中一个域是PEB地址。

PEB的内容通过系统调用NtCreateUserProcess()初始化。该系统调用也是Native API的Win32函数 CreateProcess(), CreateProcessAsUser(), CreateProcessWithTokenW(), CreateProcessWithLogonW() （在kernel32.dll 与advapi32.dll中）的实现基础，也是Windows NT POSIX的posix.dll中的API函数Fork()的实现基础.

对于Windows NT POSIX进程，新进程的PEB内容通过简单直接复制父进程的PEB来初始化。NtCreateUserProcess() 这是在fork()函数内部实现。对于Win32进程，新进程的PEB的初始化主要来自内核维护的全局变量。但几个域的初始化来自程序映象，特别是来自PE文件格式(PE+ 或 PE32+在64位)的IMAGE_OPTIONAL_HEADER32数据结构。

参考文献 

 
Windows_NT体系结构