2011-01-04 5 views

Antwort

1

Prozessbezeichner sind nicht über verschiedene Maschinen hinweg eindeutig. Sie können für spätere Prozesse auf derselben Maschine wiederverwendet werden und sind normalerweise nicht zwischen zwei Aufrufen derselben ausführbaren Datei identisch.

Sie sollten sich nicht darum kümmern, wie es generiert wird - Sie können nur sicher sein, dass der Prozessbezeichner einen einzelnen laufenden Prozess eindeutig identifiziert, dh es gibt nur einen Prozess mit diesem Bezeichner einmal.

+0

Nun, wissen Sie, auf welcher Grundlage es generiert wird? –

+1

Nein, das ist nicht dokumentiert und kann zwischen Windows-Versionen oder Service Packs oder Updates oder abhängig von der Tageszeit oder der Mondphase wechseln. :) – villintehaspam

+0

Es war so informativ, vor allem die "Phase des Mondes" Abschnitt :) –

3

Eine PID-Generierung ist meist ein Geheimnis, das Microsoft nicht offiziell dokumentiert - weil sie sich an diese Implementierung halten müssen, sobald sie sie dokumentiert haben. Es ist jedoch immer ein Vielfaches von 4 - aber das ist kein Verhalten, auf das Sie sich verlassen sollten. Sie sind nicht eindeutig und können wiederverwendet werden.

Raymond Chen erwähnt dies in seiner blog.

+0

Sie sind nur ein Vielfaches von 4 wegen einer Nebenwirkung; Das ist nicht beabsichtigt und könnte sich theoretisch ändern. – Joe

+0

Ja - genau das sagt Raymond in seinem Blog. Ich werde meine Antwort aktualisieren, um zu klären. – vcsjones

1

Prozess-, Thread- und Kernel-Handle-IDs stammen aus einer gemeinsamen Routine. Technisch gesehen ist dies ein DWORD, obwohl ich mich nicht mehr an das letzte Mal erinnere, als ich sie über 65.536 gesehen habe. Sie können wiederverwendet werden, und es ist nur ein Zähler-basierten Mechanismus.

+0

Ich habe solche Prozesse einmal unter Windows 10 gesehen, mit einigen 6-stelligen PIDs. Aber das ist eine Seltenheit. –

0

Prozesse werden als Objekte im Kernel verwaltet und als solche über HANDLE in den Benutzermodus auf die gleiche Weise wie jedes andere Objekt im System (d. H. Ereignisse, Mutexe, Semaphore, Timer usw.) exportiert.

Daher sind die Prozess-IDs wirklich nur HANDLE, um Objekte zu bearbeiten, die in einer globalen Handle-Tabelle (der PspCidTable, als Implementierungsdetail) verwaltet werden. Als interessante Nebensache werden Threads auch als Objekte gepflegt und auch in diese Tabelle eingefügt. Die Thread-IDs sind dann wirklich nur HANDLE, um Objekte zu fädeln.

-scott