Startseite » wie man » Warum gibt es keine ungeradzahligen Windows-Prozess-IDs?

    Warum gibt es keine ungeradzahligen Windows-Prozess-IDs?

    Wenn Sie gerne mit Windows basteln und unterwegs lernen, haben Sie möglicherweise bemerkt, dass Windows-Prozess- und Thread-IDs gerade Zahlen sind und ein Vielfaches von vier sind. Warum das? Der heutige Q & A-Beitrag von SuperUser enthält Antworten auf die Fragen eines neugierigen Lesers.

    Die heutige Question & Answer-Sitzung wird dank SuperUser zur Verfügung gestellt - einer Unterteilung von Stack Exchange, einer Community-basierten Gruppierung von Q & A-Websites.

    Die Frage

    SuperUser-Leser Peter Hahndorf möchte wissen, warum es keine ungeradzahligen Windows-Prozess-IDs gibt:

    Es gibt viele Möglichkeiten, die Prozess-IDs in Windows anzuzeigen. Verwenden von PowerShell:

    Ich bekomme dieses Ergebnis:

    Wie Sie sehen, sind alle Prozess-IDs gerade Zahlen, nicht nur das, sie sind alle Vielfache von vier. Sie können so hart aussehen, wie Sie möchten, und Sie werden niemals eine ungeradzahlige Prozess-ID finden, zumindest nicht in einer Version, die Windows NT-basiert ist. Was ist der Grund dafür??

    Warum gibt es keine ungeradzahligen Windows-Prozess-IDs??

    Die Antwort

    SuperUser-Mitwirkender DavidPostill hat die Antwort für uns:

    Warum gibt es keine ungeradzahligen Windows-Prozess-IDs??

    Der gleiche Code, der Kernel-Handles zuweist, wird auch für die Zuordnung von Prozess- und Thread-IDs verwendet. Da Kernel-Handles ein Vielfaches von vier sind, gilt dies auch für Prozess- und Thread-IDs.

    Warum sind Prozess- und Thread-ID Vielfache von vier?

    Unter Windows NT-basierten Betriebssystemen sind Prozess- und Thread-IDs immer ein Vielfaches von vier. Ist das nur ein Zufall??

    Ja, es ist nur ein Zufall, und Sie sollten sich nicht darauf verlassen, da es nicht Bestandteil des Programmiervertrags ist. Beispielsweise waren Windows 95-Prozess- und Thread-IDs nicht immer ein Vielfaches von vier. Im Vergleich dazu ist der Grund, aus dem Kernel-Handles immer ein Vielfaches von vier sind, Teil der Spezifikation und wird auf absehbare Zeit garantiert.

    Prozess- und Thread-IDs sind Vielfache von vier als Nebeneffekt der Wiederverwendung von Code. Der gleiche Code, der Kernel-Handles zuweist, wird auch für die Zuordnung von Prozess- und Thread-IDs verwendet. Da Kernel-Handles ein Vielfaches von vier sind, gilt dies auch für Prozess- und Thread-IDs. Dies ist ein Implementierungsdetail. Schreiben Sie also keinen Code, der darauf basiert. Ich sage Ihnen nur, um Ihre Neugier zu befriedigen.

    Quelle: Warum sind Prozess- und Thread-ID Vielfache von vier?

    Warum sind Kernel-Handles immer ein Vielfaches von vier?

    Nicht sehr bekannt ist, dass die unteren zwei Bits der Kernel-Handles immer null sind. der numerische Wert ist also immer ein Vielfaches von vier. Beachten Sie, dass dies nur für Kernel-Handles gilt. Es gilt nicht für Pseudo-Handles oder andere Arten von Handles (USER-Handles, GDI-Handles, Multimedia-Handles usw.). Kernel-Handles sind Dinge, die Sie an die CloseHandle-Funktion übergeben können.

    Dass zumindest das unterste Bit der Kernel-Handles immer Null ist, wird von der GetQueuedCompletionStatus-Funktion impliziert, die angibt, dass Sie das unterste Bit des Ereignis-Handles so einstellen können, dass die Fertigstellungsport-Benachrichtigung unterdrückt wird. Damit dies funktioniert, muss das untere Bit normalerweise Null sein.

    Diese Informationen sind für die meisten Anwendungsschreiber nicht nützlich, die Handles weiterhin als undurchsichtige Werte behandeln sollten. Die Leute, die sich für Tag-Bits interessieren würden, sind diejenigen, die Low-Level-Klassenbibliotheken implementieren oder Kernel-Objekte in ein größeres Framework umschließen.

    Quelle: Warum sind Kernel-Handles immer ein Vielfaches von vier?

    Lesen Sie weiter

    Das Alte Neue: Praktische Entwicklung in der gesamten Entwicklung von Windows von Raymond Chen (Principal Software Design Engineer bei Microsoft)


    Haben Sie der Erklärung etwas hinzuzufügen? Sound off in den Kommentaren. Möchten Sie mehr Antworten von anderen technisch versierten Stack Exchange-Benutzern lesen? Hier geht es zum vollständigen Diskussionsthread.