runasservice
Goto Top

Prozess-ID im Task-Manager

Hallo,

eine Frage in die Runde, weiß jemand zufällig warum die Prozess-ID (PID) unter Windows immer ein Vielfaches von 4 ist (0, 4, 8, 12, 16, 20 usw.) ?
Wurde das willkürlich von Microsoft festgelegt oder gibt dafür eine Logik?


MfG

Content-ID: 352704

Url: https://administrator.de/forum/prozess-id-im-task-manager-352704.html

Ausgedruckt am: 22.12.2024 um 14:12 Uhr

Kraemer
Kraemer 24.10.2017 um 14:54:30 Uhr
Goto Top
Moin,

die PID ist vom Typ DWORD

Gruß
emeriks
emeriks 24.10.2017 aktualisiert um 16:45:17 Uhr
Goto Top
Hi,
Zitat von @Kraemer:
die PID ist vom Typ DWORD
Und? Das hat welchen Bezug auf die Frage?

Es ist mir bisher noch gar nicht aufgefallen, dass diese ID's je ein Vielfaches von 4 sind. Ich könnte mir vorstellen, dass das mit der internen Struktur zu tun hat, mit welcher solche Prozesse erzeugt und kontrolliert werden. Also mutmaßlich, dass Windows je Benutzerprozess intern 3 Steuerprozesse erzeugt, welche aber in der Taskliste nicht erscheinen.
Vielleicht kann man das ja im Procmon sehen.

E.
AndreasHoster
Lösung AndreasHoster 25.10.2017 um 09:38:59 Uhr
Goto Top
Kurze Google Suche findet:
https://blogs.msdn.microsoft.com/oldnewthing/20080228-00/?p=23283

Auszug:
Process and thread IDs are multiples of four as a side-effect of code re-use. The same code the allocates kernel handles is also used to allocate process and thread IDs. Since kernel handles are a multiple of four, so too are process and thread IDs. This is an implementation detail, so don't write code that relies on it. I'm just telling you to satify your curiosity.

Und hier der Link warum Kernel Handles immer ein vielfaches von 4 sind:
https://blogs.msdn.microsoft.com/oldnewthing/20050121-00/?p=36633/

Auszug:
The availability of the bottom two bits is buried in the ntdef.h header file:
Low order two bits of a handle are ignored by the system and available
for use by application code as tag bits. The remaining bits are opaque
and used to store a serial number and table index.
//

#define OBJ_HANDLE_TAGBITS 0x00000003L