Función AssignProcessToJobObject (jobapi2.h)
Asigna un proceso a un objeto de trabajo existente.
Sintaxis
BOOL AssignProcessToJobObject(
[in] HANDLE hJob,
[in] HANDLE hProcess
);
Parámetros
[in] hJob
Identificador del objeto de trabajo al que se asociará el proceso. La función CreateJobObject o OpenJobObject devuelve este identificador. El identificador debe tener el derecho de acceso JOB_OBJECT_ASSIGN_PROCESS. Para obtener más información, vea Derechos de acceso y seguridad de objetos de trabajo.
[in] hProcess
Identificador del proceso que se va a asociar al objeto de trabajo. El identificador debe tener los derechos de acceso PROCESS_SET_QUOTA y PROCESS_TERMINATE. Para obtener más información, consulte Derechos de acceso y seguridad de procesos.
Si el proceso ya está asociado a un trabajo, el trabajo especificado por hJob debe estar vacío o debe estar en la jerarquía de trabajos anidados a los que pertenece el proceso y no puede tener límites de interfaz de usuario establecidos (SetInformationJobObject con JobObjectBasicUIRestrictions). Para obtener más información, vea la sección Comentarios.
Windows 7, Windows Server 2008 R2, Windows XP con SP3, Windows Server 2008, Windows Vista y Windows Server 2003: El proceso aún no debe asignarse a un trabajo; Si es así, se produce un error en la función con ERROR_ACCESS_DENIED. Este comportamiento cambió a partir de Windows 8 y Windows Server 2012.
Terminal Services: Todos los procesos de un trabajo deben ejecutarse dentro de la misma sesión que el trabajo.
Valor devuelto
Si la función se realiza correctamente, el valor devuelto es distinto de cero.
Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.
Comentarios
Después de asociar un proceso a un objeto de trabajo mediante AssignProcessToJobObject, el proceso está sujeto a los límites establecidos para el trabajo. Para establecer límites para un trabajo, use la función SetInformationJobObject .
Si el trabajo tiene un límite de tiempo de modo de usuario y el límite de tiempo se ha agotado, AssignProcessToJobObject produce un error y se finaliza el proceso especificado. Si el límite de tiempo se superaría asociando el proceso, AssignProcessToJobObject sigue siendo correcto. Sin embargo, se notificará la infracción del límite de tiempo. Si el trabajo tiene un límite de proceso activo y el límite se superaría asociando este proceso, Se produce un error en AssignProcessToJobObject y se finaliza el proceso especificado.
Las operaciones de memoria realizadas por un proceso asociado a un trabajo que tiene un límite de memoria están sujetos al límite de memoria. AssignProcessToJobObject no examina las operaciones de memoria realizadas por el proceso antes de que se asociara con el trabajo.
Si el proceso ya se está ejecutando y el trabajo tiene limitaciones de seguridad, puede producirse un error en AssignProcessToJobObject . Por ejemplo, si el token principal del proceso contiene el grupo de administradores locales, pero el objeto de trabajo tiene la limitación de seguridad JOB_OBJECT_SECURITY_NO_ADMIN, se produce un error en la función. Si el trabajo tiene la limitación de seguridad JOB_OBJECT_SECURITY_ONLY_TOKEN, se debe crear el proceso suspendido. Para crear un proceso suspendido, llame a la función CreateProcess con la marca CREATE_SUSPENDED.
Un proceso se puede asociar a más de un trabajo en una jerarquía de trabajos anidados. Para la clase de prioridad, la afinidad, el cargo de confirmación, el límite de tiempo de ejecución por proceso, el límite de clases de programación y el conjunto de trabajo mínimo y máximo, el proceso hereda un límite efectivo que es el límite más restrictivo de todos los trabajos de su cadena de trabajos primaria. Para otros límites de recursos, el proceso hereda los límites de su trabajo inmediato en la jerarquía. La información de contabilidad se agrega al trabajo inmediato y se agrega en cada trabajo primario de la cadena de trabajos. De forma predeterminada, todos los procesos secundarios están asociados al trabajo inmediato y a todos los trabajos de la cadena de trabajos primarios. Para crear un proceso secundario que no forme parte de la misma cadena de trabajos, llame a la función CreateProcess con la marca CREATE_BREAKAWAY_FROM_JOB. El proceso secundario se separa de todos los trabajos de la cadena de trabajos a menos que un trabajo de la cadena no permita la separación. En este caso, el proceso secundario no se separa de ese trabajo ni de ningún trabajo por encima de él en la cadena de trabajos. Para obtener más información, vea Trabajos anidados.
Windows 7, Windows Server 2008 R2, Windows XP con SP3, Windows Server 2008, Windows Vista y Windows Server 2003: Un proceso solo se puede asociar a un único trabajo. Un proceso hereda los límites del trabajo al que está asociado y agrega su información contable al trabajo. Si un proceso está asociado a un trabajo, todos los procesos secundarios que crea se asocian a ese trabajo de forma predeterminada. Para crear un proceso secundario que no forme parte del mismo trabajo, llame a la función CreateProcess con la marca CREATE_BREAKAWAY_FROM_JOB. Un proceso se puede asociar a más de un trabajo a partir de Windows 8 y Windows Server 2012.
Windows 7, Windows Server 2008 R2, Windows Server 2008 y Windows Vista: Si el Asistente de compatibilidad de programas (PCA) supervisa el proceso, se coloca en un trabajo de compatibilidad. Por lo tanto, el proceso debe crearse con CREATE_BREAKAWAY_FROM_JOB para poder colocarlo en otro trabajo. Como alternativa, puede insertar un manifiesto de aplicación que especifique un nivel de Control de cuentas de usuario (UAC) en la aplicación y PCA no agregará el proceso al trabajo de compatibilidad. Para obtener más información, vea Requisitos de desarrollo de aplicaciones para la compatibilidad con el control de cuentas de usuario.
Si el trabajo o cualquiera de sus trabajos primarios de la cadena de trabajos finaliza cuando se llama a AssignProcessToJob , se produce un error en la función.
Para compilar una aplicación que use esta función, defina _WIN32_WINNT como 0x0500 o posterior. Para obtener más información, vea Usar los encabezados de Windows.
Requisitos
Cliente mínimo compatible | Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | jobapi2.h (incluir Windows.h) |
Library | Kernel32.lib |
Archivo DLL | Kernel32.dll |