Создание эффективных 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;



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