Поделиться через


Функция 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

См. также

CreateJobObject

CreateProcess

Объекты заданий

OpenJobObject

Функции процессов и потоков

SetInformationJobObject