Создав задание, Вы обычно строите "песочницу" (набор ограничений) для включае мых в него процессов. Ограничения бывают нескольких видов:
Ограничения на задание вводятся вызовом:
BOOL SetInformationJobObject( HANDLE hJob, JOBOBJECTINFOCLASS JobObjectInformationClass, PVOID pJobObjectTnformation, DWORD cbJobObjectInformationLength);
Первый параметр определяет нужное Вам задание, второй параметр (перечисли мого типа) — вид ограничений, третий — адрес структуры данных, содержащей под робную информацию о задаваемых ограничениях, а четвертый — размер этой струк туры (используется для указания версии). Следующая таблица показывает, как уста навливаются ограничения.
Вид ограничений |
Значение второго параметра |
Структура, указываемая в третьем параметре |
Базовые ограничения |
JobObjectBasicLimitInformation |
JOBOBJECT_BASIC_ LIMIT_INFORMATION |
Расширенные базовые ограничения |
JobObjectExtendedLimitInformation |
JOBOBJECT_EXTENDED_ LIMIT_INFORMATION |
Базовые ограничения по ользовательскому интерфейсу |
JobObjectBasicUIRestrictions |
JOBOBJECT_BASIC UI_RESTRICTIONS |
Ограничения, связанные с защитой |
JobObjectSecurityLimitInformation |
JOBOBJECT_SECURITY_ LIMIT_INFORMATION |
В функции StartRestrictedProcess я устанавливаю для задания лишь несколько базовых ограничений. Для этого я создаю структуру JOB_OBJECT_BASIC_LIMIT_INFOR MATION, инициализирую ее и вызываю функцию SetInformationJobObject. Данная струк тура выглядит так:
typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION
{
LARGE_INTEGER PerProcessUserTimeLimit;
LARGE_INTEGER PorJobUserTimeLimit;
DWORD LimitFlags;
DWORD MinimumWorkingSetSize;
DWORD MaximumWorkingSetSize;