in

Pourquoi n’y a-t-il pas d’ID de processus Windows impairs?

Si vous aimez bricoler Windows et apprendre au fur et à mesure, vous avez peut-être remarqué que les ID de processus et de thread Windows sont pairs et multiples de quatre. Pourquoi donc? Le post de questions-réponses des super-utilisateurs d’aujourd’hui contient les réponses aux questions d’un lecteur curieux.

La question

Le lecteur SuperUser Peter Hahndorf veut savoir pourquoi il n’y a pas d’ID de processus Windows impairs:

Il existe de nombreuses façons de consulter les ID de processus dans Windows. Utilisation de PowerShell:

J’obtiens ce résultat:

Comme vous pouvez le voir, tous les ID de processus sont des numéros pairs, non seulement cela, ils sont tous des multiples de quatre. Vous pouvez regarder aussi dur que vous le souhaitez et vous ne trouverez jamais un ID de processus impaire, du moins pas sur une version basée sur Windows NT. Quelle est la raison pour ça?

Pourquoi n’y a-t-il pas d’ID de processus Windows impairs?

La réponse

Le contributeur SuperUser DavidPostill a la réponse pour nous:

Pourquoi n’y a-t-il pas d’ID de processus Windows impairs?

Le même code qui alloue les descripteurs du noyau est également utilisé pour allouer les ID de processus et de thread. Étant donné que les descripteurs du noyau sont un multiple de quatre, les ID de processus et de thread le sont aussi.

Pourquoi les ID de processus et de thread sont-ils des multiples de quatre?

Sur les systèmes d’exploitation Windows NT, les ID de processus et de thread se trouvent toujours être un multiple de quatre. Est-ce juste une coïncidence?

Oui, ce n’est qu’une coïncidence, et vous ne devriez pas vous y fier car cela ne fait pas partie du contrat de programmation. Par exemple, les ID de processus et de thread Windows 95 n’étaient pas toujours des multiples de quatre. Par comparaison, la raison pour laquelle les descripteurs du noyau sont toujours un multiple de quatre fait partie de la spécification et sera garantie dans un avenir prévisible.

Les ID de processus et de thread sont des multiples de quatre en raison de la réutilisation du code. Le même code qui alloue les descripteurs du noyau est également utilisé pour allouer les ID de processus et de thread. Étant donné que les descripteurs du noyau sont des multiples de quatre, les ID de processus et de thread le sont aussi. Il s’agit d’un détail d’implémentation, n’écrivez donc pas de code qui en dépend. Je vous dis juste de satisfaire votre curiosité.

Pourquoi les ID de processus et de thread sont-ils des multiples de quatre?

Pourquoi les descripteurs du noyau sont-ils toujours un multiple de quatre?

Quelque chose qui n’est pas très bien connu, c’est que les deux derniers bits des descripteurs du noyau sont toujours à zéro; en d’autres termes, leur valeur numérique est toujours un multiple de quatre. Notez que cela s’applique uniquement aux descripteurs du noyau; elle ne s’applique pas aux pseudo-poignées ou à tout autre type de handle (poignées USER, poignées GDI, poignées multimédia, etc.). Les poignées du noyau sont des éléments que vous pouvez transmettre à la fonction CloseHandle.

La fonction GetQueuedCompletionStatus, qui indique que vous pouvez définir le bit inférieur du handle d’événement pour supprimer la notification de port d’achèvement, implique qu’au moins le bit inférieur des descripteurs de noyau soit toujours nul. Pour que cela fonctionne, le bit du bas doit normalement être zéro.

Ces informations ne sont pas utiles pour la plupart des développeurs d’applications, qui doivent continuer à traiter les descripteurs comme des valeurs opaques. Les personnes qui seraient intéressées par les bits de balises sont celles qui implémentent des bibliothèques de classes de bas niveau ou qui encapsulent des objets du noyau dans un cadre plus large.

Pourquoi les descripteurs du noyau sont-ils toujours un multiple de quatre?

Lectures complémentaires

The Old New Thing: Développement pratique tout au long de l’évolution de Windows par Raymond Chen ()

Avez-vous quelque chose à ajouter à l’explication? Sonnez dans les commentaires. Vous voulez lire plus de réponses d’autres utilisateurs de Stack Exchange férus de technologie? Consultez le fil de discussion complet ici.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Comment restaurer une icône de batterie manquante sur la barre des tâches de Windows 10

Comment restaurer une icône de batterie manquante sur la barre des tâches de Windows 10

Comment configurer des raccourcis Wink pour un contrôle rapide de Smarthome sur votre téléphone

Comment configurer des raccourcis Wink pour un contrôle rapide de Smarthome sur votre téléphone