Partager via


Fonction AssignProcessToJobObject (jobapi2.h)

Affecte un processus à un objet de travail existant.

Syntaxe

BOOL AssignProcessToJobObject(
  [in] HANDLE hJob,
  [in] HANDLE hProcess
);

Paramètres

[in] hJob

Handle de l’objet de travail auquel le processus sera associé. La fonction CreateJobObject ou OpenJobObject retourne ce handle. Le handle doit disposer du droit d’accès JOB_OBJECT_ASSIGN_PROCESS. Pour plus d’informations, consultez Sécurité et droits d’accès aux objets de travail.

[in] hProcess

Handle du processus à associer à l’objet de travail. Le handle doit disposer des droits d’accès PROCESS_SET_QUOTA et PROCESS_TERMINATE. Pour plus d’informations, consultez Traiter les droits de sécurité et d’accès.

Si le processus est déjà associé à un travail, le travail spécifié par hJob doit être vide ou se trouver dans la hiérarchie des travaux imbriqués auxquels le processus appartient déjà, et il ne peut pas avoir de limites d’interface utilisateur définies (SetInformationJobObject avec JobObjectBasicUIRestrictions). Pour plus d'informations, consultez la section Notes.

Windows 7, Windows Server 2008 R2, Windows XP avec SP3, Windows Server 2008, Windows Vista et Windows Server 2003 : Le processus ne doit pas déjà être affecté à un travail ; si c’est le cas, la fonction échoue avec ERROR_ACCESS_DENIED. Ce comportement a changé à partir de Windows 8 et Windows Server 2012.

Services Terminal Server : Tous les processus d’un travail doivent s’exécuter au sein de la même session que le travail.

Valeur retournée

Si la fonction réussit, la valeur de retour est différente de zéro.

Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Notes

Après avoir associé un processus à un objet de travail à l’aide de AssignProcessToJobObject, le processus est soumis aux limites définies pour le travail. Pour définir des limites pour un travail, utilisez la fonction SetInformationJobObject .

Si le travail a une limite de temps en mode utilisateur et que la limite de temps a été épuisée, AssignProcessToJobObject échoue et le processus spécifié est terminé. Si la limite de temps est dépassée en associant le processus, AssignProcessToJobObject réussit toujours. Toutefois, la violation de la limite de temps sera signalée. Si le travail a une limite de processus active et que la limite est dépassée en associant ce processus, AssignProcessToJobObject échoue et le processus spécifié est terminé.

Les opérations de mémoire effectuées par un processus associé à un travail qui a une limite de mémoire sont soumises à la limite de mémoire. Les opérations de mémoire effectuées par le processus avant son association au travail ne sont pas examinées par AssignProcessToJobObject.

Si le processus est déjà en cours d’exécution et que le travail présente des limitations de sécurité, AssignProcessToJobObject peut échouer. Par exemple, si le jeton principal du processus contient le groupe d’administrateurs locaux, mais que l’objet de travail a la limitation de sécurité JOB_OBJECT_SECURITY_NO_ADMIN, la fonction échoue. Si la tâche a la limitation de sécurité JOB_OBJECT_SECURITY_ONLY_TOKEN, le processus doit être créé suspendu. Pour créer un processus suspendu, appelez la fonction CreateProcess avec l’indicateur CREATE_SUSPENDED.

Un processus peut être associé à plusieurs travaux dans une hiérarchie de travaux imbriqués. Pour la classe de priorité, l’affinité, les frais de validation, la limite de temps d’exécution par processus, la limite de classe de planification et l’ensemble de travail minimal et maximal, le processus hérite d’une limite effective qui est la limite la plus restrictive de tous les travaux de sa chaîne de travaux parente. Pour les autres limites de ressources, le processus hérite des limites de son travail immédiat dans la hiérarchie. Les informations comptables sont ajoutées au travail immédiat et agrégées dans chaque travail parent de la chaîne de travaux. Par défaut, tous les processus enfants sont associés au travail immédiat et à chaque travail de la chaîne de travaux parente. Pour créer un processus enfant qui ne fait pas partie de la même chaîne de travaux, appelez la fonction CreateProcess avec l’indicateur CREATE_BREAKAWAY_FROM_JOB. Le processus enfant s’écarte de chaque travail de la chaîne de travail, sauf si un travail dans la chaîne ne permet pas l’interruption. Dans ce cas, le processus enfant ne s’écarte pas de ce travail ou de tout travail au-dessus de celui-ci dans la chaîne de travaux. Pour plus d’informations, consultez Travaux imbriqués.

Windows 7, Windows Server 2008 R2, Windows XP avec SP3, Windows Server 2008, Windows Vista et Windows Server 2003 : Un processus ne peut être associé qu’à un seul travail. Un processus hérite des limites de la tâche à laquelle il est associé et ajoute ses informations comptables au travail. Si un processus est associé à un travail, tous les processus enfants qu’il crée sont associés à ce travail par défaut. Pour créer un processus enfant qui ne fait pas partie du même travail, appelez la fonction CreateProcess avec l’indicateur CREATE_BREAKAWAY_FROM_JOB. Un processus peut être associé à plusieurs travaux à partir de Windows 8 et Windows Server 2012.

Windows 7, Windows Server 2008 R2, Windows Server 2008 et Windows Vista : Si le processus est surveillé par l’Assistant Compatibilité des programmes (PCA), il est placé dans un travail de compatibilité. Par conséquent, le processus doit être créé à l’aide de CREATE_BREAKAWAY_FROM_JOB avant de pouvoir être placé dans un autre travail. Vous pouvez également incorporer un manifeste d’application qui spécifie un niveau de contrôle de compte d’utilisateur (UAC) dans votre application et PCA n’ajoutera pas le processus au travail de compatibilité. Pour plus d’informations, consultez Configuration requise pour le développement d’applications pour la compatibilité du contrôle de compte d’utilisateur.

Si le travail ou l’un de ses travaux parents dans la chaîne de travaux se termine lorsque AssignProcessToJob est appelé, la fonction échoue.

Pour compiler une application qui utilise cette fonction, définissez _WIN32_WINNT comme 0x0500 ou version ultérieure. Pour plus d’informations, consultez Utilisation des en-têtes Windows.

Configuration requise

   
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête jobapi2.h (inclure Windows.h)
Bibliothèque Kernel32.lib
DLL Kernel32.dll

Voir aussi

CreateJobObject

CreateProcess

Objets de travail

OpenJobObject

Fonctions de processus et de thread

SetInformationJobObject