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;



    Содержание  Назад  Вперед