Benutzer:Predatorix/Process Environment Block

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
Dieser Artikel (Process Environment Block) ist im Entstehen begriffen und noch nicht Bestandteil der freien Enzyklopädie Wikipedia.
Wenn du dies liest:
  • Der Text kann teilweise in einer Fremdsprache verfasst, unvollständig sein oder noch ungeprüfte Aussagen enthalten.
  • Wenn du Fragen zum Thema hast, nimm am besten Kontakt mit dem Autor Predatorix auf.
Wenn du diesen Artikel überarbeitest:
  • Bitte denke daran, die Angaben im Artikel durch geeignete Quellen zu belegen und zu prüfen, ob er auch anderweitig den Richtlinien der Wikipedia entspricht (siehe Wikipedia:Artikel).
  • Nach erfolgter Übersetzung kannst du diese Vorlage entfernen und den Artikel in den Artikelnamensraum verschieben. Die entstehende Weiterleitung kannst du schnelllöschen lassen.
  • Importe inaktiver Accounts, die länger als drei Monate völlig unbearbeitet sind, werden gelöscht.
Vorlage:Importartikel/Wartung-2022-11

In der Datenverarbeitung ist der Process Environment Block (abgekürzt PEB) ein Datenstruktur in der Windows NT-Betriebssystemfamilie. Es ist eine opake Datenstruktur die intern vom Betriebssystem verwendet wird und deren meiste Datenfelder auch für keine Verwendung von außen vorgesehen sind. Microsoft vermerkt in seiner MSDN-Bibliotheksdokumentation - in der auch nur einige der Felder beschrieben sind - dass die Struktur "in zukünftigen Windowsversionen geändert werden kann". Der PEB beinhaltet Datenstrukturen die auf den gesamten Prozess angewendet werden, einschließlich des globales Kontextes, Startparametern, Datenstrukturen für den Programmabbild-Lader, die Programmabbild-Basisadresse und Synchronisationsobjekte, die verwendet werden, um wechselseitigen Ausschluss für prozessweite Datenstrukturen zu ermöglichen.

Der PEB ist eng mit der Kernel-Modus-Datenstruktur EPROCESS verbunden, sowie mit den pro-Prozess-Datenstrukturen, die innerhalb des Addressraumes des Client-Server Runtime Sub-System-Prozesses verwaltet werden. Jedoch ist der PEB (wie die CSRSS-Datenstrukturen auch) keine Datenstruktur im Kernel-Modus selbst. Er liegt im Benutzermodus-Adressraum des Prozesses auf den er sich bezieht. Das ist so, weil er entworfen wurde um vom Benutzer-Modus-Befehlen in den Betriebssystembibliotheken verwendet zu werden. wie NTDLL, die außerhalb des Kernel-Modus ausgeführt wird, wie die Befehle des Programmabbild-Laders und des Heap-Verwalters.

In WinDbg, dem Befehl, der die Inhalte eines PEB anzeigt, ist der !peb-Befehl, which is passed the address of the PEB innerhalb eines Benutzer-Adressraumes eines Prozesses. Diese Information, wiederum, erhält der !process-Befehl, der die Information aus der EPROCESS-Datenstruktur anzeigt, von der ein Feld die Adresse des PEB enthält.

Felder des PEB die von Microsoft dokumentiert
Feld Bedeutung notes
BeingDebugged Whether the process is being debugged Microsoft recommends not using this field but using the official Win32 CheckRemoteDebuggerPresent() library function instead.
Ldr A pointer to a PEB_LDR_DATA structure providing information about loaded modules Contains the base address of kernel32 and ntdll.
ProcessParameters A pointer to a RTL_USER_PROCESS_PARAMETERS structure providing information about process startup parameters The RTL_USER_PROCESS_PARAMETERS structure is also mostly opaque and not guaranteed to be consistent across multiple versions of Windows.
PostProcessInitRoutine A pointer to a callback function called after DLL initialization but before the main executable code is invoked This callback function is used on Windows 2000, but is not guaranteed to be used on later versions of Windows NT.
SessionId The session ID of the Terminal Services session that the process is part of The NtCreateUserProcess() system call initializes this by calling the kernel's internal MmGetSessionId() function.

Die Inhalte des PEB werden vom NtCreateUserProcess() Systemaufruf intizialisiert, der Native API-Funktion that implements part of, and underpins, the Win32 CreateProcess(), CreateProcessAsUser(), CreateProcessWithTokenW(), and CreateProcessWithLogonW() library functions that are in the kernel32.dll and advapi32.dll libraries as well as underpinning the fork() function in the Windows NT POSIX library, posix.dll.

For Windows NT POSIX processes, the contents of a new process' PEB are initialized by NtCreateUserProcess() as simply a direct copy of the parent process' PEB, in line with how the fork() 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 IMAGE_OPTIONAL_HEADER32 data structure within the PE file format (PE+ or PE32+ in 64 bit executable images).

Fields from a PEB that are initialized from kernel global variables
Field is initialized from overridable by PE information?
NumberOfProcessors KeNumberOfProcessors Nein
NtGlobalFlag NtGlobalFlag Nein
CriticalSectionTimeout MmCriticalSectionTimeout Nein
HeapSegmentReserve MmHeapSegmentReserve Nein
HeapSegmentCommit MmHeapSegmentCommit Nein
HeapDeCommitTotalFreeThreshold MmHeapDeCommitTotalFreeThreshold Nein
HeapDeCommitFreeBlockThreshold MmHeapDeCommitFreeBlockThreshold Nein
MinimumStackCommit MmMinimumStackCommitInBytes Nein
ImageProcessAffinityMask KeActiveProcessors JaImageLoadConfigDirectory.ProcessAffinityMask
OSMajorVersion NtMajorVersion JaOptionalHeader.Win32VersionValue & 0xFF
OSMinorVersion NtMinorVersion Ja(OptionalHeader.Win32VersionValue >> 8) & 0xFF
OSBuildNumber NtBuildNumber & 0x3FFF combined with CmNtCSDVersion Ja(OptionalHeader.Win32VersionValue >> 16) & 0x3FFF combined with ImageLoadConfigDirectory.CmNtCSDVersion
OSPlatformId VER_PLATFORM_WIN32_NT Ja(OptionalHeader.Win32VersionValue >> 30) ^ 0x2

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]

[[Kategorie:Objektorientierte Programmierung]]