Windows для профессионалов


Определение ограничений, налагаемых на процессы в задании


Создав задание, Вы обычно строите "песочницу" (набор ограничений) для включаемых в него процессов. Ограничения бывают нескольких видов:

  • базовые и расширенные базовые ограничения — не дают процессам в задании монопольно захватывать системные ресурсы;
  • базовые ограничения по пользовательскому интерфейсу (UI) — блокируют возможность его изменения;
  • ограничения, связанные с защитой, — перекрывают процессам в задании доступ к защищенным ресурсам (файлам, подразделам реестра и т.д.).

Ограничения на задание вводятся вызовом:

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_INFORMATION, инициализирую ее и вызываю функцию SetInformationJobObject. Данная структура выглядит так:

typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION
{
LARGE_INTEGER PerProcessUserTimeLimit;
LARGE_INTEGER PorJobUserTimeLimit;
DWORD LimitFlags;
DWORD MinimumWorkingSetSize;

DWORD MaximumWorkingSetSize;



Начало  Назад  Вперед