Processmiljöblock

Vid beräkning är Process Environment Block (förkortat PEB ) en datastruktur i Windows NT- operativsystemfamiljen. Det är en ogenomskinlig datastruktur som används av operativsystemet internt, vars de flesta fält inte är avsedda att användas av något annat än operativsystemet. Microsoft noterar i sin MSDN Library- dokumentation - som bara dokumenterar ett fåtal av fälten - att strukturen "kan komma att ändras i framtida versioner av Windows". PEB innehåller datastrukturer som gäller över en hel process , inklusive global kontext, startparametrar, datastrukturer för programbildladdaren, programmets bildbasadress och synkroniseringsobjekt som används för att tillhandahålla ömsesidig uteslutning för processomfattande datastrukturer.

PEB är nära associerad med kärnläget EPROCESS datastruktur , såväl som med per-process datastrukturer som hanteras inom adressutrymmet för Client-Server Runtime Sub-System processen. Men (liksom CSRSS-datastrukturerna) är PEB inte en datastruktur i kärnläge i sig. Den finns i applikationslägets adressutrymme för processen som den relaterar till. Detta beror på att den är designad för att användas av applikationslägeskoden i operativsystemets bibliotek, såsom NTDLL , som körs utanför kärnläget, såsom koden för programbildsläsaren och heaphanteraren.

I WinDbg är kommandot som dumpar innehållet i en PEB kommandot !peb , som skickas till adressen till PEB inom en process applikationsadressutrymme. Den informationen erhålls i sin tur av !process , som visar informationen från EPROCESS -datastrukturen, vars ett fält är adressen till PEB.

Fält i PEB som är dokumenterade av Microsoft
Fält menande anteckningar
BeingDebugged Huruvida processen felsöks Microsoft rekommenderar att du inte använder det här fältet utan använder den officiella Win32 CheckRemoteDebuggerPresent () biblioteksfunktionen istället.
Ldr En pekare till en PEB_LDR_DATA -struktur som ger information om laddade moduler Innehåller basadressen för kernel32 och ntdll .
Processparametrar En pekare till en RTL_USER_PROCESS_PARAMETERS -struktur som ger information om processstartparametrar RTL_USER_PROCESS_PARAMETERS - strukturen är också mestadels ogenomskinlig och kan inte garanteras vara konsekvent över flera versioner av Windows.
PostProcessInitRoutine En pekare till en återuppringningsfunktion som anropas efter DLL-initiering men innan den körbara huvudkoden anropas Denna återuppringningsfunktion används på Windows 2000 , men det är inte garanterat att den kommer att användas på senare versioner av Windows NT.
SessionId Sessions-ID för Terminal Services-sessionen som processen är en del av Systemanropet NtCreateUserProcess () initierar detta genom att anropa kärnans interna MmGetSessionId () funktion.

Innehållet i PEB initieras av NtCreateUserProcess () systemanropet, Native API -funktionen som implementerar en del av, och understödjer, Win32 CreateProcess () , CreateProcessAsUser () , CreateProcessWithTokenW () och CreateProcessWithLogonW () biblioteksfunktioner som finns i biblioteken kernel32.dll och advapi32.dll samt underbygga funktionen fork() i Windows NT POSIX- biblioteket, posix.dll.

För Windows NT POSIX-processer initieras innehållet i den nya processens PEB av NtCreateUserProcess () som helt enkelt en direkt kopia av den överordnade processens PEB, i linje med hur gaffelfunktionen () fungerar. För Win32-processer är det initiala innehållet i en ny process PEB huvudsakligen hämtat från globala variabler som underhålls i kärnan. Emellertid kan flera fält istället hämtas från information som tillhandahålls i processens bildfil, i synnerhet information som tillhandahålls i IMAGE_OPTIONAL_HEADER32 -datastrukturen inom PE -filformatet (PE+ eller PE32+ i 64-bitars exekverbara bilder).

Fält från en PEB som initieras från kärnans globala variabler
Fält initieras från åsidosätts av PE-information?
Antal processorer KeNumberOfProcessors Nej
NtGlobalFlagga NtGlobalFlagga Nej
CriticalSectionTimeout MmCriticalSectionTimeout Nej
HeapSegmentReserv MmHeapSegmentReserve Nej
HeapSegmentCommit MmHeapSegmentCommit Nej
HeapDeCommitTotalFreeThreshold MmHeapDeCommitTotalFreeThreshold Nej
HeapDeCommitFreeBlockThreshold MmHeapDeCommitFreeBlockThreshold Nej
MinimumStackCommit MmMinimumStackCommitInBytes Nej
ImageProcessAffinityMask KeActiveProcessors ImageLoadConfigDirectory . ProcessAffinityMask
OSMajorVersion NtMajorVersion Valfri Header . Win32VersionValue & 0xFF
OSMinorVersion NtMinorVersion ( OptionalHeader . Win32VersionValue >> 8 ) & 0xFF
OSBuildNumber NtBuildNumber & 0x3FFF kombinerat med CmNtCSDVersion ( OptionalHeader . Win32VersionValue >> 16 ) & 0x3FFF kombinerat med ImageLoadConfigDirectory . CmNtCSDVersion
OSPlatformId VER_PLATFORM_WIN32_NT ( OptionalHeader . Win32VersionValue >> 30 ) ^ 0x2

WineHQ - projektet ger en fullständigare PEB-definition i sin version av winternl.h. Senare versioner av Windows har justerat antalet och syftet med vissa fält.

  1. ^ a b   Rajeev Nagar (1997). Windows NT-filsystemets interna delar: en utvecklarguide . O'Reilly-serien. O'Reilly. s. 129 . ISBN 9781565922495 .
  2. ^ a b c d "Bearbeta och trådstrukturer: PEB-struktur" . MSDN bibliotek . Microsoft . 2010-07-15. Arkiverad från originalet 2012-10-22 . Hämtad 2010-07-15 .
  3. ^ a b c d e f   Mark E. Russinovich , David A. Solomon och Alex Ionescu (2009). Windows inre delar . Microsoft Press Series (5:e upplagan). Microsoft Press. s. 335–336, 341–342, 348, 357–358. ISBN 9780735625303 . {{ citera bok }} : CS1 underhåll: flera namn: lista över författare ( länk )
  4. ^ "Process- och trådstrukturer: RTL_USER_PROCESS_PARAMETERS-struktur" . MSDN bibliotek . Microsoft . 2010-07-15 . Hämtad 2010-07-15 .
  5. ^ "vin vinternl.h: typedef struct _PEB" . GitHub . vin-spegel. 29 oktober 2019.
  6. ^ Chappel, Geoff. "PEB" . Hämtad 30 oktober 2019 .

externa länkar