Диспетчер объектов в windows

From Wikipedia, the free encyclopedia

This article is about the Windows Executive subsystem. For the general concept, see Object manager.

Object Manager in Windows, categorized hierarchically using namespaces

Object Manager (internally called Ob) is a subsystem implemented as part of the Windows Executive which manages Windows resources. Resources, which are surfaced as logical objects, each reside in a namespace for categorization. Resources can be physical devices, files or folders on volumes, Registry entries or even running processes. All objects representing resources have an Object Type property and other metadata about the resource. Object Manager is a shared resource, and all subsystems that deal with the resources have to pass through the Object Manager.

The Object Manager in the architecture of Windows NT

Object Manager is the centralized resource broker in the Windows NT line of operating systems, which keeps track of the resources allocated to processes. It is resource-agnostic and can manage any type of resource, including device and file handles. All resources are represented as objects, each belonging to a logical namespace for categorization and having a type that represents the type of the resource, which exposes the capabilities and functionalities via properties. An object is kept available until all processes are done with it; Object Manager maintains the record of which objects are currently in use via reference counting, as well as the ownership information. Any system call that changes the state of resource allocation to processes goes via the Object Manager.

Objects can either be Kernel objects or Executive objects. Kernel objects represent primitive resources such as physical devices, or services such as synchronization, which are required to implement any other type of OS service. Kernel objects are not exposed to user mode code, but are restricted to kernel code. Applications and services running outside the kernel use Executive objects, which are exposed by the Windows Executive, along with its components such as the memory manager, scheduler and I/O subsystem. Executive objects encapsulate one or more kernel objects and expose not only the kernel and kernel-mediated resources, but also an expanded set of services that the kernel does.[clarification needed] Applications themselves can wrap one or more Executive objects and surface objects[definition needed] that offer certain services. Executive objects are also used by the environment subsystems (such as the Win32 subsystem, the OS/2 subsystem, the POSIX subsystem, etc.) to implement the functionality of the respective environments.

Whenever an object is created or opened, a reference to the instance, known as a handle, is created. The Object Manager indexes objects by both their names and handles. Referencing objects by handles is faster since it bypasses name translation. Handles are associated with processes by making an entry in the process’s Handle table, which lists the handles it owns, and can be transferred between processes. A process must own a handle to an object to use it, and can own up to 16,000,000 handles at one time. During creation, a process gains handles to a default set of objects. There are different types of handles, such as file handles, event handles, and process handles, which identify the type of target objects but do not distinguish the operations that can be performed through them. This consistency ensures uniform handling of various object types programmatically. Handle creation and resolution of objects from handles are exclusively managed by the Object Manager, ensuring that no resource usage goes unnoticed.

The types of Executive objects exposed by Windows NT are:

Type Description System call to get handle
Directory A container holds other kernel objects. Multiple levels of nested directories organize all kernel objects into a single tree. NtCreateDirectoryObject
NtOpenDirectoryObject
Process A collection of executable threads along with virtual addressing and control information. NtCreateProcess
NtOpenProcess
Thread An entity containing code in execution, inside a process. NtCreateThread
NtOpenThread
Job A collection of processes. NtCreateJobObject
NtOpenJobObject
File An open file or an I/O device. NtCreateFile
NtOpenFile
Section A region of memory optionally backed by a file or the page file. NtCreateSection
NtOpenSection
Access token The access rights for an object. NtCreateToken
NtDuplicateToken
NtOpenProcessToken
NtOpenThreadToken
Event An object which encapsulates some information, to be used for notifying processes of something. NtCreateEvent
NtOpenEvent
Semaphore/Mutex Objects which serialize access to other resources. NtCreateSemaphore
NtOpenSemaphore
Timer An objects which notifies processes at fixed intervals. NtCreateTimer
NtOpenTimer
Key A registry key. NtCreateKey
NtOpenKey
Desktop A logical display surface to contain GUI elements. None
Clipboard A temporary repository for other objects. None
WindowStation An object containing a group of Desktop objects, one Clipboard and other user objects. None
Symbolic link A reference to another object, via which the referred object can be used. NtCreateSymbolicLinkObject
NtOpenSymbolicLinkObject

Each object managed by the Object Manager has a header and a body; the header contains state information used by Object Manager, whereas the body contains the object-specific data and the services it exposes. An object header contains certain data, exposed as Properties, such as Object Name (which identifies the object), Object Directory (the category the object belongs to), Security Descriptors (the access rights for an object), Quota Charges (the resource usage information for the object), Open handle count (the number of times a handle, an identifier to the object, has been opened), Open handle list (the list of processes which has a live reference to the object), its Reference count (the number of live references to the object), and the Type (an object that identifies the structure of the object body) of the object.

A Type object contains properties unique to the type of the object as well as static methods that implement the services offered by the object. Objects managed by Object Manager must at least provide a predefined set of services: Close (which closes a handle to an object), Duplicate (create another handle to the object with which another process can gain shared access to the object), Query object (gather information about its attributes and properties), Query security (get the security descriptor of the object), Set security (change the security access), and Wait (to synchronize with one or more objects via certain events). Type objects also have some common attributes, including the type name, whether they are to be allocated in non-paged memory, access rights, and synchronization information. All instances of the same type share the same type object, and the type object is instantiated only once. A new object type can be created by endowing an object with Properties to expose its state and methods to expose the services it offers.

Object name is used to give a descriptive identity to an object, to aid in object lookup. Object Manager maintains the list of names already assigned to objects being managed, and maps the names to the instances. Since most object accesses occur via handles, it is not always necessary to look up the name to resolve into the object reference. Lookup is only performed when an object is created (to make sure the new object has a unique name), or a process accesses an object by its name explicitly. Object directories are used to categorize them according to the types. Predefined directories include \?? alias \DosDevices (device names), \BaseNamedObjects (Mutexes, events, semaphores, waitable timers, and section objects), \Callback (callback functions), \Device, \Driver, \FileSystem, \KnownDlls, \Nls (language tables), \ObjectTypes (type objects), \RPC Control (RPC ports), \Security (security subsystem objects), and \Windows (windowing subsystem objects). Objects also belong to a Namespace. Each user session is assigned a different namespace. Objects shared between all sessions are in the GLOBAL namespace, and session-specific objects are in the specific session namespaces

OBJECT_ATTRIBUTES structure:

typedef struct _OBJECT_ATTRIBUTES {
  ULONG Length;
  HANDLE RootDirectory;
  PUNICODE_STRING ObjectName;
  ULONG Attributes;
  PSECURITY_DESCRIPTOR SecurityDescriptor;
  PSECURITY_QUALITY_OF_SERVICE SecurityQualityOfService;
} OBJECT_ATTRIBUTES *POBJECT_ATTRIBUTES;

The Attributes member can be zero, or a combination of the following flags:

OBJ_INHERIT
OBJ_PERMANENT
OBJ_EXCLUSIVE
OBJ_CASE_INSENSITIVE
OBJ_OPENIF
OBJ_OPENLINK
OBJ_KERNEL_HANDLE

Object Manager paths are available to many Windows API file functions, although Win32 names like \\?\ and \\.\ for the local namespaces suffice for most uses.[1] Using the former in Win32 user-mode functions translates directly to \??, but using \?? is still different as this NT form does not turn off pathname expansion.[2]

Tools that serve as explorers in the Object Manager namespaces are available. These include the 32-bit WinObj from Sysinternals[3] and the 64-bit WinObjEx64.[4]

  • Architecture of Windows NT
  • Process groups and cgroups – the equivalent POSIX and Linux concepts to the ‘Job’ object type discussed above
  1. ^ «Naming Files, Paths, and Namespaces — Win32 apps». docs.microsoft.com. 28 August 2024.
  2. ^ «winapi — Is there a difference between \??\ and \\?\ paths?». Stack Overflow.
  3. ^ «WinObj — Windows Sysinternals». docs.microsoft.com. 26 July 2023.
  4. ^ «hfiref0x/WinObjEx64: Windows Object Explorer 64-bit». GitHub. 20 February 2020.
  • Russinovich, Mark; David Solomon (2005). «Chapter 3: System Mechanisms». Microsoft Windows Internals (4th ed.). Microsoft Press. pp. 124–149. ISBN 0-7356-1917-4.
  • Object Manager Routines (Windows Drivers)
  • Channel9 Interview

Диспетчер объектов в Windows с иерархической категорией пространства имен

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

Архитектура

Диспетчер объектов — это централизованный брокер ресурсов в Windows NT Линия операционных систем, которая отслеживает ресурсы, выделенные процессам. Он не зависит от ресурсов и может управлять любым типом ресурсов, включая дескрипторы устройств и файлов. Все ресурсы представлены как объекты, каждый из которых принадлежит к логическому пространству имен для категоризации и имеет тип, представляющий тип ресурса, который раскрывает возможности и функциональные возможности через свойства. Объект остается доступным до тех пор, пока с ним не будут выполнены все процессы; Диспетчер объектов хранит записи о том, какие объекты используются в настоящее время, через подсчет ссылок, а также информацию о владельце. Любой системный вызов который изменяет состояние выделения ресурсов процессам, проходит через диспетчер объектов.

Объекты могут быть Объекты ядра или же Исполнительные объекты. Объекты ядра представляют собой примитивные ресурсы, такие как физические устройства, или службы, такие как синхронизация, которые требуются для реализации любого другого типа службы ОС. Объекты ядра не подвергаются пользовательский режим код, но ограничены кодом ядра. Приложения и службы, работающие вне ядра, используют Исполнительные объекты, которые выставлены Окна Исполнительного вместе с его компонентами, такими как диспетчер памяти, планировщик и подсистема ввода-вывода. Исполнительные объекты инкапсулируют один или несколько объектов ядра и предоставляют не только ядро ​​и ресурсы, опосредованные ядром, но также расширенный набор служб, которые выполняет ядро.[требуется разъяснение ] Сами приложения могут заключать в оболочку один или несколько объектов Executive и объектов поверхности.[необходимо определение ] которые предлагают определенные услуги. Исполнительные объекты также используются подсистемами среды (такими как подсистема Win32, подсистема OS / 2, подсистема POSIX и т. Д.) Для реализации функциональности соответствующих сред.

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

Типы исполнительных объектов, предоставляемых Windows NT:

Процесс Коллекция исполняемых файлов потоки вместе с виртуальная адресация и контрольная информация.
Нить Сущность, содержащая код в процессе выполнения.
Работа Набор процессов.
Файл Открытый файл или Ввод / вывод устройство.
Раздел Область памяти, необязательно поддерживаемая файлом или Файл подкачки.
Токен доступа Права доступа к объекту.
Мероприятие Объект, который инкапсулирует некоторую информацию, которая будет использоваться для уведомления процессов о чем-либо.
Семафор /Мьютекс Объекты, которые сериализовать доступ к другим ресурсам.
Таймер Объект, который уведомляет процессы через фиксированные промежутки времени.
Ключ А реестр ключ.
Рабочий стол Логическая поверхность отображения, содержащая GUI элементы.
Буфер обмена Временное хранилище для других объектов.
WindowStation Объект, содержащий группу объектов рабочего стола, один буфер обмена и другие пользовательские объекты.
Символическая ссылка Ссылка на другие объекты, через которые можно использовать указанный объект.

Структура объекта

Каждый объект, управляемый диспетчером объектов, имеет заголовок и тело; заголовок содержит информацию о состоянии, используемую диспетчером объектов, тогда как тело содержит данные об объекте и предоставляемые им службы. Заголовок объекта содержит определенные данные, представленные как Характеристики, Такие как Имя объекта (который идентифицирует объект), Каталог объектов (категория, к которой принадлежит объект), Дескрипторы безопасности (права доступа к объекту), Квотные сборы (информация об использовании ресурса для объекта), Количество открытых дескрипторов (количество раз, когда дескриптор, идентификатор объекта, был открыт), Открыть список дескрипторов (список процессов, которые имеют прямую ссылку на объект), его Количество ссылок (количество живых ссылок на объект), а Тип (объект, определяющий структуру тела объекта) объекта.

А Тип Объект содержит свойства, уникальные для типа объекта, а также статические методы, реализующие услуги, предлагаемые объектом. Объекты, управляемые Диспетчером объектов, должны, по крайней мере, предоставлять предопределенный набор услуг: Закрывать (закрывающий дескриптор объекта), Дубликат (создать другой дескриптор объекта, с помощью которого другой процесс может получить общий доступ к объекту), Объект запроса (собрать информацию о его атрибутах и ​​свойствах), Безопасность запросов (получить дескриптор безопасности объекта), Установить безопасность (изменить безопасный доступ) и Ждать (для синхронизации с одним или несколькими объектами через определенные события). Объекты типа также имеют некоторые общие атрибуты, включая имя типа, то, должны ли они быть выделены в невыгружаемой памяти, права доступа и информацию о синхронизации. Все экземпляры одного и того же типа совместно используют один и тот же объект типа, и объект типа создается только один раз. Новый тип объекта может быть создан путем наделения объекта свойствами, чтобы раскрыть его состояние и методы для предоставления услуг, которые он предлагает.

Имя объекта используется для придания объекту описательной идентичности, чтобы помочь в поиске объекта. Диспетчер объектов поддерживает список имен, уже назначенных управляемым объектам, и сопоставляет имена экземплярам. Поскольку большинство обращений к объектам происходит через дескрипторы, не всегда необходимо искать имя для преобразования в ссылку на объект. Поиск выполняется только тогда, когда объект создается (чтобы убедиться, что новый объект имеет уникальное имя), или когда процесс обращается к объекту по его имени явно. Каталоги объектов используются для их категоризации по типам. Предопределенные каталоги включают ?? (названия устройств), BaseNamedObjects (Мьютексы, события, семафоры, таймеры ожидания и объекты разделов), Перезвоните (функции обратного вызова), Устройство, Драйверы, Файловая система, KnownDlls, Nls (языковые таблицы), Типы объектов (тип объектов), Элементы управления RPC (RPC порты), Безопасность (объекты подсистемы безопасности), и Окно (объекты оконной подсистемы). Объекты также принадлежат Пространство имен. Каждому пользовательскому сеансу назначается другое пространство имен. Объекты, общие для всех сеансов, находятся в ГЛОБАЛЬНЫЙ пространство имен, а объекты, относящиеся к сеансу, находятся в определенных пространствах имен сеанса

Структура OBJECT_ATTRIBUTES:

typedef структура _OBJECT_ATTRIBUTES {  ULONG Длина;  РУЧКА Корневая директория;  PUNICODE_STRING ObjectName;  ULONG Атрибуты;  PSECURITY_DESCRIPTOR SecurityDescriptor;  PSECURITY_QUALITY_OF_SERVICE SecurityQualityOfService;} OBJECT_ATTRIBUTES *POBJECT_ATTRIBUTES;

Член Attributes может быть нулем или сочетанием следующих флагов:

OBJ_INHERITOBJ_PERMANENTOBJ_EXCLUSIVEOBJ_CASE_INSENSITIVEOBJ_OPENIFOBJ_OPENLINKOBJ_KERNEL_HANDLE

использование

Пути диспетчера объектов доступны для многих файловых функций Windows API, хотя имена Win32, например ? и . для локальных пространств имен достаточно для большинства применений.[1] Использование первого в функциях пользовательского режима Win32 напрямую преобразуется в ??, но используя ?? по-прежнему отличается, поскольку эта форма NT не отключает раскрытие имени пути.[2]

Доступны инструменты, которые служат в качестве исследователей в пространствах имен диспетчера объектов. К ним относятся 32-битный WinObj от Sysinternals[3] и 64-битный WinObjEx64.[4]

Смотрите также

  • Архитектура Windows NT

Рекомендации

  • Руссинович Марк; Давид Соломон (2005). «Глава 3: Системные механизмы». Внутреннее устройство Microsoft Windows (4-е изд.). Microsoft Press. стр.124–149. ISBN  0-7356-1917-4.

внешняя ссылка

  • Подпрограммы диспетчера объектов (драйверы Windows)
  • Channel9 интервью
  1. ^ «Именование файлов, путей и пространств имен — приложения Win32». docs.microsoft.com.
  2. ^ «winapi — Есть ли разница между путями ?? и ??». Переполнение стека.
  3. ^ «WinObj — Windows Sysinternals». docs.microsoft.com.
  4. ^ «hfiref0x / WinObjEx64: 64-разрядный обозреватель объектов Windows». GitHub. 20 февраля 2020.

При создании нового типа объектов компонент исполнительной системы может зарегистрировать у диспетчера объектов один или несколько методов. После этого диспетчер объектов вызывает методы на определенных этапах жизненного цикла объектов данного типа — обычно при их создании, удалении или модификации. Поддерживаемые диспетчером объектов методы перечислены в таблице 3–7.

1.Внутреннее устройство Windows (гл. 1-4) pic_107.png

Диспетчер объектов вызывает метод open всякий раз, когда создает описатель объекта (что происходит при создании или открытии объекта). Однако метод open определен только в одном типе объектов — WindowStation. Этот метод необходим таким объектам для того, чтобы Win32k.sys мог использовать часть памяти совместно с процессом, который служит в качестве пула памяти, связанного с объектом «рабочий стол».

Пример использования метода close можно найти в подсистеме ввода-вывода. Диспетчер ввода-вывода регистрирует метод close для объектов типа «файл», а диспетчер объектов вызывает метод close при закрытии каждого описателя объекта этого типа. Метод close проверяет, не осталось ли у процесса, закрывающего описатель файла, каких-либо блокировок для файла, и, если таковые есть, снимает их. Диспетчер объектов не может и не должен самостоятельно проверять наличие блокировок для файла.

Перед удалением временного объекта из памяти диспетчер объектов вызывает метод delete, если он зарегистрирован. Например, диспетчер памяти регистрирует для объектов типа «раздел» метод delete, освобождающий физические страницы, используемые данным разделом. Перед удалением объекта «раздел» этот метод также проверяет различные внутренние структуры данных, выделенные для раздела диспетчером памяти. Диспетчер объектов не мог бы сделать эту работу, поскольку он ничего не знает о внутреннем устройстве диспетчера памяти. Методы delete других объектов выполняют аналогичные функции.

Если диспетчер объектов находит существующий вне его пространства имен объект, метод parse (по аналогии с методом query name) позволяет этому диспетчеру передавать управление вторичному диспетчеру объектов. Когда диспетчер объектов анализирует имя объекта, он приостанавливает анализ, встретив объект с сопоставленным методом parse, и вызывает метод parse, передавая ему оставшуюся часть строки с именем объекта. Кроме пространства имен диспетчера объектов, в Windows есть еще два пространства имен: реестра (реализуемое диспетчером конфигурации) и файловой системы (реализуемое диспетчером ввода-вывода через драйверы файловой системы). O диспетчере конфигурации см. главу 5; о диспетчере ввода-вывода и драйверах файловой системы см. главу 9.

Например, когда процесс открывает описатель объекта с именем \Device\ Floppy0\docs\resume.doc, диспетчер объектов просматривает свое дерево имен и ищет объект с именем FloppyO. Обнаружив, что с этим объектом сопоставлен метод parse, он вызывает его, передавая ему остаток строки с именем объекта (в данном случае — строку \docs\resume.doc). Метод parse объектов «устройство» (device objects) является процедурой ввода-вывода, которая регистрируется диспетчером ввода-вывода при определении типа объекта «устройство». Процедура parse диспетчера ввода-вывода принимает строку с именем и передает ее соответствующей файловой системе, которая ищет файл на диске и открывает его.

Подсистема ввода-вывода также использует метод security, аналогичный методу parse. Он вызывается каждый раз, когда поток пытается запросить или изменить параметры защиты файла. Эта информация для файлов отличается от таковой для других объектов, поскольку хранится в самом файле, а не в памяти. Поэтому для поиска, считывания или изменения параметров защиты нужно обращаться к подсистеме ввода-вывода.

Описатели объектов и таблица описателей, принадлежащая процессу

Когда процесс создает или открывает объект по имени, он получает описатель (handle), который дает ему доступ к объекту. Ссылка на объект по описателю работает быстрее, чем по имени, так как при этом диспетчер объектов может сразу найти объект, не просматривая список имен. Процессы также могут получать описатели объектов, во-первых, путем их наследования в момент своего создания (если процесс-создатель разрешает это, указывая соответствующий флаг при вызове CreateProcess, и если описатель помечен как наследуемый либо в момент создания, либо позднее, вызовом Windows-функции SetHandleInformation), а во-вторых, за счет приема дублированного описателя от другого процесса (см. описание Windows-функции DuplicateHandle).

Чтобы потоки процесса пользовательского режима могли оперировать объектом, им нужен описатель этого объекта. Идея применения описателей для управления ресурсами сама по себе не нова. Например, стандартные библиотеки языков С, Pascal (и других) при открытии файла возвращают его описатель. Описатели служат косвенными указателями на системные ресурсы, что позволяет прикладным программам избегать прямого взаимодействия с системными структурами данных.

ПРИМЕЧАНИЕ Компоненты исполнительной системы и драйверы устройств могут обращаться к объектам напрямую, поскольку выполняются в режиме ядра и ввиду этого имеют доступ к структурам объектов в системной памяти. Однако они должны объявлять о своем использовании объектов, увеличивая значение счетчика ссылок, что гарантирует сохранность нужного объекта (см. раздел «Хранение объектов в памяти» далее в этой главе).

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

ЭКСПЕРИМЕНТ: просмотр открытых описателей

Запустите Process Explorer и убедитесь, что в его окне нижняя секция включена и настроена на отображение открытых описателей. (Выберите View, Lower Pane View и Handles.) Затем откройте окно командной строки и просмотрите таблицу описателей для нового процесса Cmd.exe. Вы должны увидеть открытый описатель файла — текущего каталога. Например, если текущий каталог — C: \, Process Explorer выводит следующее.

1.Внутреннее устройство Windows (гл. 1-4) pic_108.png

Если вы теперь смените текущий каталог командой CD, то Process Explorer покажет, что описатель предыдущего каталога закрыт и открыт описатель нового текущего каталога. Предыдущий описатель ненадолго выделяется красным цветом, а новый — зеленым. Длительность подсветки настраивается щелчком кнопки Options и регулировкой параметра Difference Highlight Duration.

Такая функциональность Process Explorer упрощает наблюдение за изменениями в таблице описателей. Например, если в процессе происходит утечка описателей, просмотр таблицы описателей в Process Explorer позволяет быстро увидеть, какой описатель (или описатели) открывается, но не закрывается. Эта информация помогает программисту обнаружить утечку описателей.

Таблицу открытых описателей также можно вывести, используя командную строку утилиты Handle. Например, обратите внимание на следующий фрагмент вывода Handle, где показана таблица описателей для процесса Cmd.exe до и после смены каталога:

1.Внутреннее устройство Windows (гл. 1-4) pic_109.png

Описатель объекта представляет собой индекс в таблице описателей, принадлежащей процессу. Ha нее указывает блок процесса исполнительной системы (EPROCESS), рассматриваемый в главе 6. Индекс первого описателя равен 4, второго — 8 и т. д. Таблица содержит указатели на все объекты, описатели которых открыты данным процессом. Эти таблицы реализованы по трехуровневой схеме аналогично тому, как блок управления памятью в системах типа x86 реализует трансляцию виртуальных адресов в физические, поддерживая более 16 000 000 описателей на каждый процесс (см. главу 7).


wwwsysinternals.com
сообщает более детальную информацию об объектах (например, счетчик ссылок, число открытых описателей, дескрипторы защиты и т. д.).
   
(o)Process Explorer и Handle
.Отображают открытые описатели для процесса.
   
(o)Oh.exe (имеется в ресурсах Windows) выводит открытые описатели для процесса, но требует предварительной установки специального глобального флага.
   
(o)Команда
Openfiles /query(в Windows XP и Windows Server 2003) отображает открытые описатели для процесса, но требует предварительной установки специального глобального флага.
   
(o)Команда
!handleотладчика ядра отображает открытые описатели для процесса.

    Средство просмотра объектов позволяет изучить пространство имен, поддерживаемое диспетчером объектов (имена есть не у всех объектов). Попробуйте запустить нашу версию утилиты WinObj и проанализировать полученный результат (см. иллюстрацию ниже).

   Как уже отмечалось, утилита OH и команда
Openfiles /queryтребуют установки глобального флага «поддержка списка объектов» (maintain objects list). (O глобальных флагах см. соответствующий раздел далее в этой главе.) OH установит этот флаг, если он еще не задан. Чтобы узнать, включен ли данный флаг, введите
Openfiles /Local.Вы можете включить его командой
Openfiles /Local ON.B любом случае нужно перезагрузить систему, чтобы новый параметр вступил в силу. Ни Process Explorer, ни Handle не требуют включения слежения за объектами, потому что для получения соответствующей информации они используют драйвер устройства.

    При разработке диспетчера объекта был выдвинут ряд требований, в соответствии с которыми он должен:
   
(o)реализовать общий, унифицированный механизм использования системных ресурсов;
   
(o)изолировать защиту объектов в одном участке операционной системы для соответствия требованиям безопасности класса C2;
   
(o)предоставлять механизм учета использования объектов процессами, позволяющий устанавливать лимиты на выделение процессам системных ресурсов;
   
(o)поддерживать такую схему именования объектов, которая позволяла бы легко включать как существующие объекты (устройства, файлы и каталоги файловой системы), так и независимые наборы объектов;
   
(o)соответствовать требованиям различных подсистем окружения операционной системы — например, поддерживать наследование ресурсов родительских процессов дочерними (необходимо в Windows и POSIX) и имена файлов, чувствительные к регистру букв (требуется в POSIX);
   
(o)устанавливать единообразные правила сохранения объектов в памяти (т. е.
   объект должен быть доступен, пока используется какими-либо процессами).

    B Windows существует два вида внутренних объектов:
объекты исполнительной системы(executive objects) и
объекты ядра(kernel objects). Первые реализуются различными компонентами исполнительной системы (диспетчером процессов, диспетчером памяти, подсистемой ввода-вывода и т. д.). Вторые являются более примитивными объектами, которые реализуются ядром Windows. Эти объекты, невидимые коду пользовательского режима, создаются и используются только в исполнительной системе. Объекты ядра поддерживают фундаментальную функциональность (например, синхронизацию), на которую опираются объекты исполнительной системы. Так, многие объекты исполнительной системы содержат (инкапсулируют) один или несколько объектов ядра, как показано на рис. 3-17.

   Структура объектов ядра и способы их применения для синхронизации других объектов будут рассмотрены в этой главе несколько позже. A сейчас мы сосредоточимся на принципах работы диспетчера объектов, а также на структуре объектов исполнительной системы, описателях и таблицах описателей. Вопросы, связанные с использованием этих объектов для управления доступом в Windows, здесь затрагиваются лишь вскользь — подробнее на эту тему см. главу 8.

Объекты исполнительной системы

 

   Каждая подсистема окружения проецирует на свои приложения разные образы операционной системы. Объекты исполнительной системы и сервисы объектов — именно те примитивы, из которых подсистемы окружения конструируют собственные версии объектов и других ресурсов.
   Как правило, объекты исполнительной системы создаются подсистемой окружения в интересах пользовательских приложений или компонентов операционной системы в процессе обычной работы. Так, для создания файла Windows-приложение вызывает Windows-функцию
CreateFile,реализованную в DLL подсистемы Windows, Kernel32.dll. После проверки и инициализации
CreateFileв свою очередь вызывает
NtCreateFile, встроенный сервис Windows, для создания объекта «файл» исполнительной системы.
   Набор объектов, предоставляемый приложениям подсистемой окружения, может быть больше или меньше того набора, который предоставляется исполнительной системой. Подсистема Windows использует объекты исполнительной системы для экспорта собственных объектов, многие из которых прямо соответствуют объектам исполнительной системы. Например, Windows-объекты «мьютекс и «семафор» основаны непосредственно на объектах исполнительной системы (которые в свою очередь базируются на соответствующих объектах ядра). Кроме того, подсистема Windows предоставляет именованные каналы и почтовые ящики — ресурсы, созданные на основе объектов «файл» исполнительной системы. Некоторые подсистемы вроде POSIX вообще не поддерживают объекты как таковые. Подсистема POSIX использует объекты и сервисы исполнительной системы просто как основу для POSIX-процессов, каналов и других ресурсов, которые она предоставляет своим приложениям.
   B таблице 3-3 кратко описываются основные объекты, предоставляемые исполнительной системой. Подробнее об объектах исполнительной системы см. главы, в которых рассматриваются соответствующие компоненты исполнительной системы (а также справочную документацию Windows API, если речь идет об объектах исполнительной системы, напрямую экспортируемых в Windows).

    

ПРИМЕЧАНИЕ

B Windows 2000 исполнительная система реализует в общей сложности 27 типов объектов, а в Windows XP и Windows Server 2003 — 29- (B эти более новые версии Windows добавлены объекты DebugObject и KeyedEvent.) Многие из таких объектов предназначены только для использования компонентами исполнительной системы, которая и определяет их. Эти объекты недоступны Windows API напрямую. Пример таких объектов — Driver, Device и EventPair.

    


ПРИМЕЧАНИЕМьютекс — это название объектов «мутант» (mutants) в Windows API; объект ядра, на котором основан мьютекс, имеет внутреннее имя мутант.

Структура объектов

 

   Как показано на рис. 3-18, у каждого объекта есть заголовок и тело. Диспетчер объектов управляет заголовками объектов, а телами объектов управляют владеющие ими компоненты исполнительной системы. Кроме того, каждый заголовок объекта указывает на список процессов, которые открыли этот объект, и на специальный объект, называемый
объектом типа(type object), — он содержит общую для всех экземпляров информацию.

 

Заголовки и тела объектов

 

   Диспетчер объектов использует данные, хранящиеся в заголовке, для управления объектами независимо от их типа. Стандартные атрибуты заголовка кратко описываются в таблице 3-4.

   Кроме заголовка у каждого объекта имеется тело, чей формат и содержимое уникальны для данного типа объектов; все объекты одного типа имеют одинаковый формат тела. Создавая тип объектов и предоставляя для него сервисы, компонент исполнительной системы может контролировать манипуляции с данными в телах всех объектов этого типа.
   Диспетчер объектов предоставляет небольшой набор базовых сервисов, которые работают с атрибутами заголовка объекта и применимы к объектам любого типа (хотя некоторые базовые сервисы не имеют смысла для отдельных объектов). Эти сервисы, часть которых доступна Windows-приложениям через подсистему Windows, перечислены в таблице 3-5.

    Базовые сервисы поддерживаются для всех типов объектов, но у каждого объекта есть свои сервисы для создания, открытия и запроса. Так, подсистема ввода-вывода реализует сервис создания файлов для объектов «файл», а диспетчер процессов — сервис создания процессов для объектов «процесс». Конечно, можно было бы реализовать единый сервис создания объектов, но подобная процедура оказалась бы весьма сложной, так как набор параметров, необходимых для инициализации объекта «файл», значительно отличается, скажем, от параметров инициализации объекта «процесс». A при вызове потоком сервиса объекта для определения его типа и обращении к соответствующей версии сервиса диспетчер объектов каждый раз сталкивался бы с необходимостью обработки дополнительных данных. B силу этих и иных причин сервисы, обеспечивающие создание, открытие и запросы, для каждого типа объектов реализованы отдельно.

 

Объекты типа

 

   B заголовках объектов содержатся общие для всех объектов атрибуты, но их значения могут меняться у конкретных экземпляров данного объекта. Так, у каждого объекта есть уникальное имя и может быть уникальный дескриптор защиты. Однако некоторые атрибуты объектов остаются неизменными для всех объектов данного типа. Например, при открытии описателя объекта можно выбрать права доступа из набора, специфичного для объектов данного типа. Исполнительная система предоставляет в том числе атрибуты доступа «завершение» (terminate) и «приостановка» (suspend) для объектов «поток», а также «чтение» (read), «запись» (write), «дозапись» (append) и «удаление» (delete) для объектов «файл». Другой пример атрибута, специфичного для типа объектов, — синхронизация, о которой мы кратко расскажем ниже.
   Чтобы сэкономить память, диспетчер объектов сохраняет статические атрибуты, специфичные для конкретного типа объектов, только при создании нового типа объектов. Для записи этих данных он использует собственный объект типа. Как показано на рис. 3-19, если установлен отладочный флаг отслеживания объектов (описываемый в разделе «Глобальные флаги Windows» далее в этой главе), все объекты одного типа (в данном случае — «процесс») связываются между собой с помощью объекта типа, что позволяет диспетчеру объектов при необходимости находить их и перечислять.

    

ЭКСПЕРИМЕНТ: просмотр заголовков объектов и объектов типа

   Вы можете увидеть список объектов типа, объявленных диспетчеру объектов, с помощью утилиты Winobj
.Далее в Winobj откройте каталог \ObjectTypes, как показано на следующей иллюстрации.
   Чтобы просмотреть структуру данных типа объектов «процесс» в отладчике ядра, сначала идентифицируйте этот объект командой
!process:

   Этот вывод показывает, что структура типа включает имя типа объекта, счетчики активных объектов этого типа, а также счетчики пикового числа описателей и объектов данного типа. B поле TypeInfo хранится указатель на структуру данных, в которой содержатся атрибуты, общие для всех объектов этого типа, а также указатели на методы типа:

 

   Объектами типов нельзя управлять из пользовательского режима из-за отсутствия соответствующих сервисов диспетчера объектов. Ho некоторые из определяемых ими атрибутов видимы через отдельные системные сервисы и функции Windows API. Атрибуты, хранящиеся в объектах типа, описываются в таблице 3-6.

   Синхронизация, один из атрибутов, видимых Windows-приложениям, относится к способности потока синхронизировать свое выполнение, ожидая изменения состояния определенного объекта. Поток можно синхронизировать по таким объектам исполнительной системы, как задание, процесс, поток, файл, событие, семафор, мьютекс и таймер. Другие объекты исполнительной системы не поддерживают синхронизацию. Способность объекта к синхронизации зависит от того, содержит ли он встроенный объект диспетчера — объект ядра, который будет рассмотрен далее в этой главе.

Методы объекта

 

   Атрибут «методы», последний из перечисленных в таблице 3-6, состоит из набора внутренних процедур, похожих на конструкторы и деструкторы C++, т. е. на процедуры, автоматически вызываемые при создании или уничтожении объекта. B диспетчере объектов эта идея получила дальнейшее развитие: он вызывает методы объекта и в других ситуациях, например при открытии или закрытии описателя объекта или при попытке изменения параметров защиты объекта. B некоторых типах объектов методы определяются в зависимости от того, как должен использоваться данный тип объектов.
   При создании нового типа объектов компонент исполнительной системы может зарегистрировать у диспетчера объектов один или несколько методов. После этого диспетчер объектов вызывает методы на определенных этапах жизненного цикла объектов данного типа — обычно при их создании, удалении или модификации. Поддерживаемые диспетчером объектов методы перечислены в таблице 3-7.

   Диспетчер объектов вызывает метод open всякий раз, когда создает описатель объекта (что происходит при создании или открытии объекта). Однако метод open определен только в одном типе объектов — WindowStation. Этот метод необходим таким объектам для того, чтобы Win32k.sys мог использовать часть памяти совместно с процессом, который служит в качестве пула памяти, связанного с объектом «рабочий стол».
   Пример использования метода close можно найти в подсистеме ввода-вывода. Диспетчер ввода-вывода регистрирует метод close для объектов типа «файл», а диспетчер объектов вызывает метод close при закрытии каждого описателя объекта этого типа. Метод close проверяет, не осталось ли у процесса, закрывающего описатель файла, каких-либо блокировок для файла, и, если таковые есть, снимает их. Диспетчер объектов не может и не должен самостоятельно проверять наличие блокировок для файла.
   Перед удалением временного объекта из памяти диспетчер объектов вызывает метод delete, если он зарегистрирован. Например, диспетчер памяти регистрирует для объектов типа «раздел» метод delete, освобождающий физические страницы, используемые данным разделом. Перед удалением объекта «раздел» этот метод также проверяет различные внутренние структуры данных, выделенные для раздела диспетчером памяти. Диспетчер объектов не мог бы сделать эту работу, поскольку он ничего не знает о внутреннем устройстве диспетчера памяти. Методы delete других объектов выполняют аналогичные функции.
   Если диспетчер объектов находит существующий вне его пространства имен объект, метод parse (по аналогии с методом query name) позволяет этому диспетчеру передавать управление вторичному диспетчеру объектов. Когда диспетчер объектов анализирует имя объекта, он приостанавливает анализ, встретив объект с сопоставленным методом parse, и вызывает метод parse, передавая ему оставшуюся часть строки с именем объекта. Кроме пространства имен диспетчера объектов, в Windows есть еще два пространства имен: реестра (реализуемое диспетчером конфигурации) и файловой системы (реализуемое диспетчером ввода-вывода через драйверы файловой системы). O диспетчере конфигурации см. главу 5; о диспетчере ввода-вывода и драйверах файловой системы см. главу 9.
   Например, когда процесс открывает описатель объекта с именем \Device\
Floppy0\docs\resume.doc, диспетчер объектов просматривает свое дерево имен и ищет объект с именем FloppyO. Обнаружив, что с этим объектом сопоставлен метод parse, он вызывает его, передавая ему остаток строки с именем объекта (в данном случае — строку
\docs\resume.doc). Метод parse объектов «устройство» (device objects) является процедурой ввода-вывода, которая регистрируется диспетчером ввода-вывода при определении типа объекта «устройство». Процедура parse диспетчера ввода-вывода принимает строку с именем и передает ее соответствующей файловой системе, которая ищет файл на диске и открывает его.
   Подсистема ввода-вывода также использует метод security, аналогичный методу parse. Он вызывается каждый раз, когда поток пытается запросить или изменить параметры защиты файла. Эта информация для файлов отличается от таковой для других объектов, поскольку хранится в самом файле, а не в памяти. Поэтому для поиска, считывания или изменения параметров защиты нужно обращаться к подсистеме ввода-вывода.

Описатели объектов и таблица описателей, принадлежащая процессу

 

   Когда процесс создает или открывает объект по имени, он получает
описатель(handle), который дает ему доступ к объекту. Ссылка на объект по описателю работает быстрее, чем по имени, так как при этом диспетчер объектов может сразу найти объект, не просматривая список имен. Процессы также могут получать описатели объектов, во-первых, путем их наследования в момент своего создания (если процесс-создатель разрешает это, указывая соответствующий флаг при вызове
CreateProcess,и если описатель помечен как наследуемый либо в момент создания, либо позднее, вызовом Windows-функции
SetHandleInformation),а во-вторых, за счет приема дублированного описателя от другого процесса (см. описание Windows-функции
DuplicateHandle).
   Чтобы потоки процесса пользовательского режима могли оперировать объектом, им нужен описатель этого объекта. Идея применения описателей для управления ресурсами сама по себе не нова. Например, стандартные библиотеки языков С, Pascal (и других) при открытии файла возвращают его описатель. Описатели служат косвенными указателями на системные ресурсы, что позволяет прикладным программам избегать прямого взаимодействия с системными структурами данных.

    

ПРИМЕЧАНИЕ

Компоненты исполнительной системы и драйверы устройств могут обращаться к объектам напрямую, поскольку выполняются в режиме ядра и ввиду этого имеют доступ к структурам объектов в системной памяти. Однако они должны объявлять о своем использовании объектов, увеличивая значение счетчика ссылок, что гарантирует сохранность нужного объекта (см. раздел «Хранение объектов в памяти» далее в этой главе).

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

    
ЭКСПЕРИМЕНТ: просмотр открытых описателей

   Запустите Process Explorer и убедитесь, что в его окне нижняя секция включена и настроена на отображение открытых описателей. (Выберите View, Lower Pane View и Handles.) Затем откройте окно командной строки и просмотрите таблицу описателей для нового процесса Cmd.exe. Вы должны увидеть открытый описатель файла — текущего каталога. Например, если текущий каталог — C:\, Process Explorer выводит следующее.

   Если вы теперь смените текущий каталог командой CD, то Process Explorer покажет, что описатель предыдущего каталога закрыт и открыт описатель нового текущего каталога. Предыдущий описатель ненадолго выделяется красным цветом, а новый — зеленым. Длительность подсветки настраивается щелчком кнопки Options и регулировкой параметра Difference Highlight Duration.
   Такая функциональность Process Explorer упрощает наблюдение за изменениями в таблице описателей. Например, если в процессе происходит утечка описателей, просмотр таблицы описателей в Process Explorer позволяет быстро увидеть, какой описатель (или описатели) открывается, но не закрывается. Эта информация помогает программисту обнаружить утечку описателей.
   Таблицу открытых описателей также можно вывести, используя командную строку утилиты Handle
.Например, обратите внимание на следующий фрагмент вывода Handle, где показана таблица описателей для процесса Cmd.exe до и после смены каталога:

   Описатель объекта представляет собой индекс в
таблице описателей,принадлежащей процессу. Ha нее указывает блок процесса исполнительной системы (EPROCESS), рассматриваемый в главе 6. Индекс первого описателя равен 4, второго — 8 и т. д. Таблица содержит указатели на все объекты, описатели которых открыты данным процессом. Эти таблицы реализованы по трехуровневой схеме аналогично тому, как блок управления памятью в системах типа x86 реализует трансляцию виртуальных адресов в физические, поддерживая более 16 000 000 описателей на каждый процесс (см. главу 7).
   При создании процесса в Windows 2000 диспетчер объектов формирует верхний уровень таблицы описателей, содержащий указатели на таблицы среднего уровня; средний уровень содержит первый массив указателей на таблицы вторичных описателей, а нижний — первую таблицу вторичных описателей. Ha рис. 3-20 показана структура таблицы описателей в Windows 2000. B этой операционной системе диспетчер объектов интерпретирует младшие 24 бита описателя объекта как три 8-битных поля, являющиеся индексами для каждого из трех уровней таблицы описателей. B Windows XP и Windows Server 2003 при создании процесса создается лишь таблица описателей нижнего уровня — остальные уровни формируются по мере необходимости. B Windows 2000 таблица вторичных описателей состоит из 255 элементов. B Windows XP и Windows Server 2003 такая же таблица включает столько элементов, сколько помещается на страницу памяти минус один элемент, который используется для аудита описателей (handle auditing). Например, на х86-системах размер страницы составляет 4096 байтов. Делим это значение на размер элемента (8 байтов), вычитаем 1 и получаем всего 511 элементов в таблице описателей нижнего уровня. Наконец, таблица описателей среднего уровня в Windows XP и Windows Server 2003 содержит полную страницу указателей на таблицы вторичных описателей, поэтому количество таблиц вторичных описателей зависит от размеров страницы и указателя на конкретной аппаратной платформе.

    

ЭКСПЕРИМЕНТ: создание максимального количества описателей

   Тестовая программа Testlimit
(

www.sysmternals.com/windowsintemals

.sbtml)позволяет открывать описатели объекта до тех пор, пока не будет исчерпан их лимит. C ее помощью вы увидите, сколько описателей можно создать в одном процессе в вашей системе. Поскольку память под таблицу описателей выделяется из пула подкачиваемых страниц, этот пул может быть исчерпан до того, как вы достигнете предельного числа описателей, допустимых в одном процессе.
   1. Скачайте файл Testlimit.zip по только что упомянутой ссылке и раз-архивируйте его в какой-нибудь каталог.
   2. Запустите Process Explorer, щелкните View, затем System Information. Обратите внимание на текущий и максимальный размеры пула подкачиваемой памяти. (Для вывода максимальных размеров пулов Process Explorer нужно настроить на доступ к символам для образа ядра, Ntoskrnl.exe.) Пусть эта информация отображается, когда вы запустите программу Testlimit.
   3. Откройте окно командной строки.
   4. Запустите программу Testlimit с ключом
~h(для этого введите
testlimit -h).Когда Testlimit не удастся открыть очередной описатель, она сообщит общее число созданных ею описателей. Если это значение окажется меньше, чем около 16 миллионов, то, вероятно, вы исчерпали пул подкачиваемой памяти до достижения теоретически предельного числа описателей.
   5. Закройте окно командной строки; это приведет к завершению процесса Testlimit и автоматическому закрытию всех открытых описателей.
   Как показано на рис. 3-21, в х8б-системах каждый элемент таблицы описателей состоит из структуры с двумя 32-битными элементами: указателем на объект (с флагами) и маской доступа. B б4-разрядных системах каждый элемент имеет размер 12 байтов и состоит из 64-битного указателя на заголовок объекта и 32-битной маски доступа (маски доступа описываются в главе 8).
   B Windows 2000 первый 32-битный элемент содержит указатель на заголовок объекта и четыре флага. Поскольку заголовки объектов всегда выравниваются по границе 8 байтов, в качестве флагов используются младшие 3 бита и один старший. Старший бит является флагом блокировки (lock). Когда диспетчер объектов транслирует описатель в указатель на объект, он блокирует соответствующую запись на время трансляции. Так как все объекты находятся в системном адресном пространстве, старший бит указателя на объект устанавливается в 1. (Гарантируется, что адреса всегда будут превышать 0x80000000 даже на системах, запускаемых с ключом загрузки /3GB.) Так что, пока элемент таблицы описателей не заблокирован, диспетчер объектов может сбросить старший бит в 0. При блокировке элемента таблицы диспетчер объектов устанавливает этот бит и получает корректное значение указателя. Диспетчер блокирует всю таблицу описателей (используя специальную блокировку, сопоставляемую с каждым процессом), только если процесс создает новый описатель или закрывает существующий. B Windows XP и Windows Server 2003 флаг блокировки хранится в младшем бите указателя на объект. A флаг, который в Windows 2000 хранился в этом бите, теперь хранится в ранее зарезервированном бите маски доступа.

   Первый флаг указывает, имеет ли право вызывающая программа закрывать данный описатель. Второй определяет, получат ли процессы, созданные данным процессом, копию этого описателя. (Как уже отмечалось, наследование описателя можно указать при его создании или позже, через Windows-функцию

  1. Диспетчер объектов

Диспетчер
объектов (Object
Manager)
Windows
NT
предоставляет свои услуги другим
компонентам Windows
NT,
включая непосредственно выпол­няемый
модуль (элементом которого диспетчер
и является). Диспетчер объ­ектов
предоставляет службы для именования,
создания, удаления, манипу­лирования
и совместного использования объектов.
Он активно сотрудничает
с
монитором ссылок безопасности, чтобы
обеспечить соответствующий до­ступ
к определенным объектам только
пользователям и процессам с доста­точными
разрешениями.

Соответствующий
означает,
что предоставляется доступ определенного
типа, например доступ только для чтения.
Каждый объект,
созданный диспетчером объектов, имеет
связанный с ним список управления
доступом (access
control
list
— ACL).
На самом деле этот список представляет
собой группу объектов, которые указывают
разрешения, явно или
неявно предоставленные пользователю
или группе;

2. Монитор ссылок безопасности

Монитор
ссылок безопасности (Security
Reference
Monitor)
заведует про­веркой
доступа и протоколированием ресурсов.

Проверка
доступа выполня­ется на самом низком
уровне, включая не только предоставление
доступа, но и
определение его типа, например доступ
только для чтения или доступ для чтения
и записи. Функциональность подсистемы
безопасности обеспечивает­ся
объектно-ориентированной структурой
Windows
NT.

При
предоставлении доступа
к объекту монитор ссылок безопасности
сравнивает список управле­ния
доступом, который связан с объектом, с
маркером (token)
безопасности процесса
перед тем, как предоставить или запретить
доступ.

Списки
управле­ния
доступом бывают двух типов: явно или
неявно разрешающие или запре­щающие
доступ. Монитор ссылок безопасности
активно используется други­ми
подсистемами выполняемого модуля
Windows
NT,
например диспетчером объектов.

3. Диспетчер процессов

Диспетчер
процессов (Process
Manager)
обеспечивает создание и удале­ние
процессов и потоков, а также управление
ими. Диспетчер не поддержи­вает
иерархию компонентов; например, отношения
между процессами вида «родитель-потомок»
не отслеживаются. Эта работа ложится
на компонент, который
создал процесс.

По
аналогии представьте диспетчер файлов,
кото­рый
предоставляет возможность создания
файла, однако внедрением этого файла
в структуру каталогов должен заниматься
пользователь диспетчера файлов.
Диспетчер процессов пользуется услугами
как диспетчера объектов, так
и подсистемы безопасности.

Для
каждого запущенного процесса пере­дается,
как минимум, два вызова диспетчеру
процессов: первый вызов для создания
процесса, второй — для создания потока
в пределах процесса, так как
каждый процесс должен содержать хотя
бы один поток.

4. Подсистема Plug and Play

На
рис. 1 управление питанием и подсистема
Plug
and
Play
схематически размещены
в едином прямоугольнике, что сделано
для упрощения структу­ры
диаграммы. На самом’же деле это различные
подсистемы, хотя и тесно взаимодействующие
друг с другом.

Термин
Plug
and
Play
используется для
описания программно и аппа-ратно
реализованных функциональных возможностей,
которые позволяют Windows
динамически распознавать аппаратное
обеспечение и реализовать программную
поддержку для корректной работы
устройства.

В
частности, это
программное обеспечение отвечает за
выполнение следующих функций:

  • корректное
    определение аппаратного обеспечения;

  • корректное
    определение динамического подключения
    или отключения аппаратного
    обеспечения;

  • выделение
    и настройка ресурсов для работы
    аппаратного обеспечения;

  • поиск
    и загрузка драйверов устройств;

  • поддержка
    механизма уведомления, с помощью
    которого определяет­ся появление и
    удаление аппаратного обеспечения; этот
    механизм мо­жет
    использоваться программным обеспечением
    как в режиме ядра, так и
    в пользовательском режиме.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Software raid for windows
  • Synology программа для windows
  • Яркие обои windows 10
  • Клавиша win на клавиатуре где находится на компьютере windows 10
  • Npm install for windows