→ Пошук по сайту       Увійти / Зареєструватися

Объектная модель

Как и в большинстве ОС, единицей работы в NT является процесс. Каждому процессу выделяется набор ресурсов, позволяющих ему выполнять свою работу: поток, чтобы можно было выполнять программы, и адресное пространство для хранения кода и данных. В процессе работы поток может запросить для своего процесса дополнительные ресурсы путем создания объектов или открытия описателей существующих объектов. Описатели объекта уникальны для процесса и указывают на доступ процесса к системным ресурсам. Они могут быть использованы для вызова базовых сервисов объекта, осуществляющих действия с ресурсами.

Подсистема Win32 — это процесс NT, который выступает как сервер для приложений Win32. Когда приложение вызывает функцию API Win32, которая прямо или косвенно создает объект, подсистема Win32 обращается к некоему объектному сервису NT. Здесь в дело вступает диспетчер объектов NT, который выполняет следующие функции:

  • Выделяет память для объекта.
  • Присоединяет к объекту дескриптор защиты (security descriptor), который определяет; кому и как разрешено использовать объект.
  • Создает и поддерживает структуру каталога объектов, где хранятся имена объектов.
  • Создает описатель объекта и возвращает его вызывающей программе.

Все процессы пользовательского режима, включая подсистемы среды, должны получить описатель объекта, прежде чем их потоки смогут использо-вать этот объект. Идея применения описателей для манипулирования систем-ными ресурсами отнюдь не нова. Библиотеки периода выполнения С и Паскаля (а также других языков), например, возвращают описатели при открытии файлов. Аналогично, приложения Win32 используют различные типы описателей для управления окнами, курсором мыши и значками. В обоих случаях описатели служат косвенными указателями на системные ресурсы; эта косвенность предотвращает непосредственный доступ приложений к сис-темным структурам данных.

Для исполнительной системы NT описатели объектов создают дополнительные преимущества. Во-первых, нет никаких различий между описателем файла, описателем события и описателем процесса (за исключением того, на что они ссылаются). Не нужно запоминать десять разных механизмов для ра-боты с десятью разными типами объектов. Во-вторых, диспетчеру объектов принадлежит исключительное право создания описателей и поиска объекта по его описателю. Это означает, что любое действие в пользовательском режиме, затрагивающее некоторый объект, может контролироваться диспетчером объектов. Благодаря этому эффекту шлюза диспетчер объектов отвечает трем важным целям проекта Windows NT:

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

Первая задача, защита объектов, и составляет суть системы защиты Windows NT. Ее реализация многое заимствует из файловой модели и до некоторой степени видима программам, использующим API Win32. Ниже дается краткое введение в тему защиты объектов исполнительной системы NT, к которой мы еще обратимся далее в этой главе.

Вернемся к аналогии с файлами; при открытии файла необходимо указать, собираетесь ли Вы использовать его для чтения или для записи. Если Вы попытаетесь записать в файл, который открыт только для чтения, то получите ошибку. Аналогично, в исполнительной системе NT, когда процесс создает объект или открывает описатель существующего объекта, он должен задать набор запрашиваемых прав доступа (desired access rights) — т.е. указать, что он намерен делать с объектом. Можно запросить либо набор стандартных прав доступа (таких как чтение, запись или исполнение), применимых к объектам всех типов, либо специфических прав доступа, состав которых зависит от типа объекта. Например, процесс может запросить доступ для удаления файлового объекта или дописывания к его концу. Аналогично, он может запросить возможность приостанавливать или завершать объект-поток.

Когда процесс открывает описатель объекта, диспетчер объектов вызывает справочный монитор защиты (security reference monitor) — часть системы защиты, работающую в режиме ядра — и посылает ей набор запрашиваемых процессом прав доступа. Справочный монитор защиты проверяет, разрешает ли дескриптор защиты объекта (security descriptor) доступ, запрашиваемый процессом 3. Если да, то справочный монитор защиты возвращает набор прав доступа, предоставленных процессу (granted access rights), и диспетчер объектов сохраняет их в создаваемом описателе объекта4.

После этого всякий раз, когда потоки процесса используют описатель, диспетчер объектов быстро проверяет, соответствует ли хранящийся в описателе набор предоставленных прав доступа типу использования, который подразумевается объектным сервисом, вызванным потоком. Например, если процесс запрашивал доступ по чтению к объекту-секции, а затем вызвал сервис для записи в эту секцию, то данный вызов завершится с ошибкой. Способ, которым система защиты определяет, кто к каким объектам имеет доступ, рассматривается в разд. 3.3.

Вторая и третья задача, решаемые с использованием описателей объектов, — удержание объектов и учет ресурсов — описаны в разд. 3.2.2.1 и 3.2,2.2.


3 Подсистема Win32 позволяет прикладному процессу назначать объектам дескрипторы защиты, но не требует этого. Если дескриптор защиты не назначен приложением, то подсистема Win32 делает это за него.

4 Это упрощенное представление об истинном механизме сохранения, который более подробно описан далее в этой главе.

загрузка...
Сторінки, близькі за змістом