Windows Kernel-Mode Object Manager
The Windows kernel-mode object manager component manages objects. Files, devices, synchronization mechanisms, registry keys, and so on, are all represented as objects in kernel mode. Each object has a header (containing information about the object such as its name, type, and location), and a body (containing data in a format determined by each type of object).
Windows has more than 25 types of objects. A few of the types are:
The object manager manages the objects in Windows by performing the following major tasks:
Managing the creation and destruction of objects.
Keeping an object namespace database for tracking object information.
Keeping track of resources assigned to each process.
Tracking access rights for specific objects to provide security.
Managing the lifetime of an object and determining when an object will be automatically destroyed to recycle resource space.
For more information about objects in Windows, see Managing Kernel Objects.
Routines that provide a direct interface to the object manager are usually prefixed with the letters «Ob«; for example, ObGetObjectSecurity. For a list of object manager routines, see Object Manager Routines.
Note that Windows uses objects as an abstraction for resources. However, Windows is not object-oriented in the classical C++ meaning of the term. Windows is object-based. For more information on what object-based means for Windows, see Object-Based.
Диспетчер объектов (Windows) — Object Manager (Windows)
Диспетчер объектов (внутреннее название Ob ) — это подсистема, реализованная как часть Windows Executive, которая управляет ресурсами Windows . Ресурсы, которые отображаются как логические объекты , находятся в пространстве имен для категоризации. Ресурсы могут быть физическими устройствами, файлами или папками на томах, записями реестра или даже запущенными процессами. Все объекты, представляющие ресурсы, имеют Object Type свойство и другие метаданные о ресурсе. Диспетчер объектов — это общий ресурс, и все подсистемы, которые имеют дело с ресурсами, должны проходить через диспетчер объектов.
Содержание
Архитектура
Диспетчер объектов — это централизованный брокер ресурсов в линейке операционных систем Windows NT , который отслеживает ресурсы, выделенные процессам. Он не зависит от ресурсов и может управлять любым типом ресурсов, включая дескрипторы устройств и файлов. Все ресурсы представлены как объекты, каждый из которых принадлежит к логическому пространству имен для категоризации и имеет тип, который представляет тип ресурса, который раскрывает возможности и функциональные возможности через свойства. Объект остается доступным до тех пор, пока с ним не будут выполнены все процессы; Диспетчер объектов поддерживает запись о том, какие объекты в настоящее время используются, посредством подсчета ссылок , а также информацию о владельце. Любой системный вызов, который изменяет состояние выделения ресурсов процессам, проходит через диспетчер объектов.
Объекты могут быть объектами ядра или исполнительными объектами . Объекты ядра представляют собой примитивные ресурсы, такие как физические устройства, или службы, такие как синхронизация, которые требуются для реализации любого другого типа службы ОС. Объекты ядра не доступны коду пользовательского режима , но ограничены кодом ядра. Приложения и службы, работающие вне ядра, используют объекты Executive , которые предоставляются Windows Executive вместе с его компонентами, такими как диспетчер памяти, планировщик и подсистема ввода-вывода. Исполнительные объекты инкапсулируют один или несколько объектов ядра и предоставляют не только ядро и ресурсы, опосредованные ядром, но также расширенный набор служб, которые выполняет ядро. Сами приложения могут заключать в оболочку один или несколько объектов Executive и поверхностных объектов, которые предлагают определенные услуги. Исполнительные объекты также используются подсистемами среды (такими как подсистема Win32, подсистема OS / 2, подсистема POSIX и т. Д.) Для реализации функциональности соответствующих сред.
Каждый раз, когда объект создается или открывается, создается ссылка на экземпляр, называемая дескриптором . Диспетчер объектов индексирует объекты как по их именам, так и по ручкам. Но обращение к объектам по ручкам происходит быстрее, потому что перевод имени можно пропустить. Дескрипторы связаны с процессами (путем внесения записи в таблицу дескрипторов процесса, в которой перечислены принадлежащие им дескрипторы) и также могут передаваться между процессами. Процесс должен владеть дескриптором объекта перед его использованием. Одновременно процессу может принадлежать не более 16 000 000 дескрипторов. Во время создания процесс получает дескрипторы набора объектов по умолчанию. В то время как существует различные типы ручек — дескрипторы файлов , дескрипторы событий и процессов ручки — они только помочь в определении типа целевых объектов; не в различении операций, которые могут быть выполнены с их помощью, что обеспечивает единообразие программной обработки различных типов объектов. Создание дескрипторов и разрешение объектов из дескрипторов осуществляется исключительно через диспетчер объектов, поэтому никакое использование ресурсов не остается незамеченным им.
Типы исполнительных объектов, предоставляемых Windows NT:
Процесс | Набор исполняемых потоков вместе с виртуальной адресацией и управляющей информацией. |
---|---|
Нить | Сущность, содержащая код в процессе выполнения. |
Работа | Набор процессов. |
файл | Открытый файл или устройство ввода-вывода . |
Раздел | Область памяти, необязательно поддерживаемая файлом или файлом подкачки . |
Токен доступа | Права доступа к объекту. |
Событие | Объект, который инкапсулирует некоторую информацию, которая будет использоваться для уведомления процессов о чем-либо. |
Семафор / Мьютекс | Объекты, которые сериализуют доступ к другим ресурсам. |
Таймер | Объект, который уведомляет процессы через фиксированные промежутки времени. |
Ключ | Реестра ключ. |
Рабочий стол | Логическая поверхность отображения, содержащая элементы графического интерфейса . |
Буфер обмена | Временное хранилище для других объектов. |
WindowStation | Объект, содержащий группу объектов рабочего стола, один буфер обмена и другие пользовательские объекты. |
Символическая ссылка | Ссылка на другие объекты, через которые можно использовать указанный объект. |
Структура объекта
Каждый объект, управляемый диспетчером объектов, имеет заголовок и тело; заголовок содержит информацию о состоянии, используемую диспетчером объектов, тогда как тело содержит данные об объекте и предоставляемые им службы. Заголовок объекта содержит определенные данные, представленные как Properties , например, Object Name (идентифицирующий объект), Object Directory (категория, к которой принадлежит объект), Security Descriptors (права доступа для объекта), Quota Charges (информация об использовании ресурсов для объекта), Open handle count (число раз открывался дескриптор, идентификатор объекта), Open handle list (список процессов, которые имеют активную ссылку на объект), его Reference count (количество активных ссылок на объект) и Type (объект, который идентифицирует структура тела объекта) объекта.
Type Объект содержит свойство , уникальное для типа объекта, а также статических методов , которые реализуют услуги , предлагаемые в объекте. Объекты, управляемые диспетчером объектов, должны, по крайней мере, предоставлять предопределенный набор служб: Close (который закрывает дескриптор объекта), Duplicate (создавать другой дескриптор объекта, с помощью которого другой процесс может получить общий доступ к объекту), Query object (собирать информацию о своем атрибуты и свойства), Query security (получить дескриптор безопасности объекта), Set security (изменить доступ безопасности) и Wait (для синхронизации с одним или несколькими объектами через определенные события). Объекты типа также имеют некоторые общие атрибуты, включая имя типа, то, должны ли они быть выделены в невыгружаемой памяти, права доступа и информацию о синхронизации. Все экземпляры одного и того же типа совместно используют один и тот же объект типа, и объект типа создается только один раз. Новый тип объекта может быть создан путем наделения объекта свойствами, чтобы раскрыть его состояние и методы для предоставления услуг, которые он предлагает.
Object name используется для придания объекту описательной идентичности, чтобы помочь в поиске объекта. Диспетчер объектов поддерживает список имен, уже назначенных управляемым объектам, и сопоставляет имена экземплярам. Поскольку доступ к объектам в большинстве случаев осуществляется через дескрипторы, не всегда необходимо искать имя для преобразования в ссылку на объект. Поиск выполняется только при создании объекта (чтобы убедиться, что новый объект имеет уникальное имя) или когда процесс обращается к объекту по его имени явно. Object directories используются для их категоризации по типам. Предопределенные каталоги включают \?? (имена устройств), \BaseNamedObjects (мьютексы, события, семафоры, waitable таймеры и раздел объектов), \Callback (функции обратного вызова), \Device , \Drivers , \FileSystem , \KnownDlls , \Nls (языковые таблицы), \ObjectTypes (объекты типа), \RPC Controls ( RPC порты), \Security (подсистема безопасности объекты) и \Window (объекты оконной подсистемы). Объекты также принадлежат пространству имен . Каждому пользовательскому сеансу назначается другое пространство имен. Объекты, общие для всех сеансов, находятся в ГЛОБАЛЬНОМ пространстве имен, а объекты, относящиеся к сеансу, находятся в определенных пространствах имен сеанса.
Член Attributes может быть нулем или сочетанием следующих флагов:
Применение
Пути диспетчера объектов доступны для многих файловых функций Windows API, хотя имена Win32, такие как \\? \ И \\. \ Для локальных пространств имен, достаточны для большинства применений. Использование первого в функциях пользовательского режима Win32 преобразуется непосредственно в \ ?? , но используя \ ?? по-прежнему отличается, поскольку эта форма NT не отключает раскрытие имени пути.
Доступны инструменты, которые служат в качестве исследователей в пространствах имен диспетчера объектов. К ним относятся 32-разрядный WinObj от Sysinternals и 64-разрядный WinObjEx64.
Object Manager (Windows)
Object Manager (internally called Ob) is a subsystem implemented as part of the Windows Executive which manages Windows resources. Each resource, which are surfaced as logical objects, resides 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.
Contents
Architecture
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 the 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 exposes not only the kernel and kernel-mediated resources but also an expanded set of services than the kernel does. Applications themselves can wrap one or more Executive objects and surface objects 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, called a handle, is created. Object Manager indexes the objects both by their names as well as the handles. But, referencing the objects by the handles is faster because the name translation can be skipped. Handles are associated with processes (by making an entry into the process’ Handle table that lists the handles it owns), and can be transferred between processes as well. A process must own a handle to an object before using it. A process can own a maximum of 16,000,000 handles at one time. During creation, a process gains handles to a default set of objects. While there exists different types of handles — file handles, event handles and process handles — they only help in identifying the type of the target objects; not in distinguishing the operations that can be performed through them, thus providing consistency to how various object types are handled programmatically. Handle creation and resolution of objects from handles are solely mediated by Object Manager, so no resource usage goes unnoticed by it.
The types of Executive objects exposed by Windows NT are:
Process | A collection of executable threads along with virtual addressing and control information. |
---|---|
Thread | An entity containing code in execution, inside a process. |
Job | A collection of processes. |
File | An open file or an I/O device. |
File mapping object | A region of memory mapped to a file. |
Access token | The access rights for an object. |
Event | An object which encapsulates some information, to be used for notifying processes of something. |
Semaphore/Mutex | Objects which serialize access to other resources. |
Timer | An objects which notifies processes at fixed intervals. |
Key | A registry key. |
Desktop | A logical display surface to contain GUI elements. |
Clipboard | A temporary repository for other objects. |
WindowStation | An object containing a group of Desktop objects, one Clipboard and other user objects. |
Symbolic link | A reference to other objects, via which the referred object can be used. |
Object structure
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 \?? (device names), \BaseNamedObjects (Mutexes, events, semaphores, waitable timers, and section objects), \Callback (callback functions), \Device , \Drivers , \FileSystem , \KnownDlls , \Nls (language tables), \ObjectTypes (type objects), \RPC Controls (RPC ports), \Security (security subsystem objects), and \Window (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
The Attributes member can be zero, or a combination of the following flags: