Создание эффективных WIN32-приложений с учетом специфики 64-разрядной версии 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_INFOR MATION, инициализирую ее и вызываю функцию SetInformationJobObject. Данная струк тура выглядит так:

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

    DWORD MaximumWorkingSetSize;



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