Comment puis-je obtenir l’object de travail (le cas échéant) pour mon processus en cours?

Dans le contexte des objects de travail Windows, comment puis-je obtenir l’object de travail pour le processus en cours (au cas où il se trouve dans un object de travail)? La fonction IsProcessInJob me permet de tester si un processus donné (par exemple, le processus en cours) se trouve dans un travail donné (ou un travail quelconque), mais ne génère pas le descripteur du travail correspondant.

Si vous souhaitez simplement connaître les quotas / limites sous lesquels vous travaillez ou énumérer tous les autres processus du travail, vous n’avez pas besoin d’obtenir l’object Job pour le processus en cours.

Vous pouvez appeler QueryInformationJobObject avec NULL, qui sera l’object Job du processus en cours.

Pour répondre à la question spécifique, appelez IsProcessInJob pour savoir si vous travaillez.

Vous pouvez tout savoir sur le Job en transmettant NULL à QueryInformationJobObject

Vos processus enfants hériteront automatiquement de votre travail, sauf si vous passez CREATE_BREAKAWAY_FROM_JOB et que le travail sur JOB_OBJECT_LIMIT_BREAKAWAY_OK ou JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK est défini est défini. Dans ce cas, vous pouvez affecter le processus à un nouveau travail si vous le souhaitez.

Ainsi, sans connaître le descripteur, vous pouvez en savoir plus sur votre Job en cours et affecter des processus enfants au travail en cours ou, si vous en avez l’autorisation, sans le travail en cours. C’est-à-dire que vous pouvez faire presque tout ce que la poignée vous permet de faire.

La seule exception est la duplication vers un autre processus frère. Si vous devez le faire, vous devrez demander au processus parent de vous communiquer la valeur du handle.