Функция AssignProcessToJobObject (jobapi2.h)
Назначает процесс существующему объекту задания.
Синтаксис
BOOL AssignProcessToJobObject(
[in] HANDLE hJob,
[in] HANDLE hProcess
);
Параметры
[in] hJob
Дескриптор объекта задания, с которым будет связан процесс. Функция CreateJobObject или OpenJobObject возвращает этот дескриптор. Дескриптор должен иметь право доступа JOB_OBJECT_ASSIGN_PROCESS. Дополнительные сведения см. в разделе Безопасность объектов задания и права доступа.
[in] hProcess
Дескриптор процесса, который необходимо связать с объектом задания. Дескриптор должен иметь права доступа PROCESS_SET_QUOTA и PROCESS_TERMINATE. Дополнительные сведения см. в разделе Управление правами на доступ и безопасность процесса.
Если процесс уже связан с заданием, задание, указанное в hJob , должно быть пустым или находиться в иерархии вложенных заданий, к которым уже принадлежит процесс, и для него не могут быть установлены ограничения пользовательского интерфейса (SetInformationJobObject with JobObjectBasicUIRestrictions). Дополнительные сведения см. в подразделе "Примечания".
Windows 7, Windows Server 2008 R2, Windows XP с пакетом обновления 3 (SP3), Windows Server 2008, Windows Vista и Windows Server 2003: Процесс не должен быть назначен заданию; Если это так, функция завершается сбоем с ERROR_ACCESS_DENIED. Это поведение изменилось, начиная с Windows 8 и Windows Server 2012.
Службы терминалов: Все процессы в задании должны выполняться в том же сеансе, что и задание.
Возвращаемое значение
Если функция выполняется успешно, возвращается ненулевое значение.
Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Комментарии
После связывания процесса с объектом задания с помощью AssignProcessToJobObject на процесс распространяются ограничения, установленные для задания. Чтобы задать ограничения для задания, используйте функцию SetInformationJobObject .
Если задание имеет ограничение времени в пользовательском режиме и ограничение времени было исчерпано, AssignProcessToJobObject завершается сбоем и указанный процесс завершается. Если ограничение времени будет превышено путем связывания процесса, AssignProcessToJobObject по-прежнему будет выполнено успешно. Однако будет сообщено о нарушении ограничения по времени. Если задание имеет ограничение активного процесса и ограничение будет превышено путем связывания этого процесса, AssignProcessToJobObject завершается сбоем и указанный процесс завершается.
Операции с памятью, выполняемые процессом, связанным с заданием с ограничением памяти, регулируются ограничением памяти. Операции памяти, выполненные процессом до того, как он был связан с заданием, не проверяются Методом AssignProcessToJobObject.
Если процесс уже запущен и задание имеет ограничения безопасности, assignProcessToJobObject может завершиться ошибкой. Например, если основной маркер процесса содержит группу локальных администраторов, но объект задания имеет ограничение безопасности JOB_OBJECT_SECURITY_NO_ADMIN, функция завершается ошибкой. Если задание имеет ограничение безопасности JOB_OBJECT_SECURITY_ONLY_TOKEN, процесс должен быть приостановлен. Чтобы создать приостановленный процесс, вызовите функцию CreateProcess с флагом CREATE_SUSPENDED.
Процесс может быть связан с несколькими заданиями в иерархии вложенных заданий. Для класса приоритета, сходства, платы за фиксацию, ограничения времени выполнения для каждого процесса, ограничения класса планирования, минимального и максимального рабочих наборов процесс наследует эффективное ограничение, которое является наиболее ограничивающим ограничением всех заданий в родительской цепочке заданий. Для других ограничений ресурсов процесс наследует ограничения от своего непосредственного задания в иерархии. Учетные данные добавляются в непосредственное задание и агрегируются в каждом родительском задании в цепочке заданий. По умолчанию все дочерние процессы связаны с непосредственным заданием и каждым заданием в родительской цепочке заданий. Чтобы создать дочерний процесс, который не является частью одной цепочки заданий, вызовите функцию CreateProcess с флагом CREATE_BREAKAWAY_FROM_JOB. Дочерний процесс отрывается от каждого задания в цепочке заданий, если задание в цепочке не допускает отколоваться. В этом случае дочерний процесс не отрывается от этого задания или от любого задания над ним в цепочке заданий. Дополнительные сведения см. в разделе Вложенные задания.
Windows 7, Windows Server 2008 R2, Windows XP с пакетом обновления 3 (SP3), Windows Server 2008, Windows Vista и Windows Server 2003: Процесс может быть связан только с одним заданием. Процесс наследует ограничения от задания, с которым он связан, и добавляет в задание свои учетные данные. Если процесс связан с заданием, все создаваемые им дочерние процессы связаны с этим заданием по умолчанию. Чтобы создать дочерний процесс, который не является частью одного задания, вызовите функцию CreateProcess с флагом CREATE_BREAKAWAY_FROM_JOB. Процесс может быть связан с несколькими заданиями, начиная с Windows 8 и Windows Server 2012.
Windows 7, Windows Server 2008 R2, Windows Server 2008 и Windows Vista: Если процесс отслеживается помощником по совместимости программ (PCA), он помещается в задание совместимости. Поэтому процесс необходимо создать с помощью CREATE_BREAKAWAY_FROM_JOB, прежде чем его можно будет поместить в другое задание. Кроме того, можно внедрить манифест приложения, указывающий уровень контроля учетных записей (UAC) в приложение, и PCA не добавит этот процесс в задание совместимости. Дополнительные сведения см. в разделе Требования к разработке приложений для совместимости контроля учетных записей пользователей.
Если задание или любое из его родительских заданий в цепочке заданий завершается при вызове AssignProcessToJob , функция завершается сбоем.
Чтобы скомпилировать приложение, использующее эту функцию, определите _WIN32_WINNT как 0x0500 или более поздней версии. Дополнительные сведения см. в разделе Использование заголовков Windows.
Требования
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | jobapi2.h (включая Windows.h) |
Библиотека | Kernel32.lib |
DLL | Kernel32.dll |