Диспетчер объектов (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.
Диспетчер объектов (Windows) — Object Manager (Windows)
Диспетчер объектов (внутреннее название Обь) — подсистема, реализованная как часть Окна Исполнительного который управляет Windows Ресурсы. Ресурсы, которые кажутся логичными объекты, каждый из них находится в пространстве имен для категоризации. Ресурсы могут быть физическими устройствами, файлами или папками на томах, Реестр записи или даже запущенные процессы. Все объекты, представляющие ресурсы, имеют Тип объекта свойство и другие метаданные о ресурсе. Диспетчер объектов — это общий ресурс, и все подсистемы, которые имеют дело с ресурсами, должны проходить через диспетчер объектов.
Содержание
Архитектура
Диспетчер объектов — это централизованный брокер ресурсов в Windows NT Линия операционных систем, которая отслеживает ресурсы, выделенные процессам. Он не зависит от ресурсов и может управлять любым типом ресурсов, включая дескрипторы устройств и файлов. Все ресурсы представлены как объекты, каждый из которых принадлежит к логическому пространству имен для категоризации и имеет тип, представляющий тип ресурса, который раскрывает возможности и функциональные возможности через свойства. Объект остается доступным до тех пор, пока с ним не будут выполнены все процессы; Диспетчер объектов хранит записи о том, какие объекты используются в настоящее время, через подсчет ссылок, а также информацию о владельце. Любой системный вызов который изменяет состояние выделения ресурсов процессам, проходит через диспетчер объектов.
Объекты могут быть Объекты ядра или же Исполнительные объекты. Объекты ядра представляют собой примитивные ресурсы, такие как физические устройства, или службы, такие как синхронизация, которые требуются для реализации любого другого типа службы ОС. Объекты ядра не подвергаются пользовательский режим код, но ограничены кодом ядра. Приложения и службы, работающие вне ядра, используют Исполнительные объекты, которые выставлены Окна Исполнительноговместе с его компонентами, такими как диспетчер памяти, планировщик и подсистема ввода-вывода. Исполнительные объекты инкапсулируют один или несколько объектов ядра и предоставляют не только ядро и ресурсы, опосредованные ядром, но также расширенный набор служб, которые выполняет ядро. [ требуется разъяснение ] Сами приложения могут заключать в оболочку один или несколько объектов Executive и объектов поверхности. [ необходимо определение ] которые предлагают определенные услуги. Исполнительные объекты также используются подсистемами среды (такими как подсистема Win32, подсистема OS / 2, подсистема POSIX и т. Д.) Для реализации функциональности соответствующих сред.
Всякий раз, когда объект создается или открывается, ссылка на экземпляр, называемая ручка, создано. Диспетчер объектов индексирует объекты как по их именам, так и по ручкам. Но обращение к объектам с помощью дескрипторов происходит быстрее, поскольку перевод имени можно пропустить. Дескрипторы связаны с процессами (путем входа в процесс) Стол с ручкой который перечисляет принадлежащие ему дескрипторы), а также может передаваться между процессами. Процесс должен владеть дескриптором объекта перед его использованием. Одновременно процессу может принадлежать не более 16 000 000 дескрипторов. Во время создания процесс получает дескрипторы набора объектов по умолчанию. Хотя существуют разные типы ручек — файловые ручки, обработчики событий и обрабатывает процесс — они помогают только определить тип целевых объектов; не в различении операций, которые могут быть выполнены с их помощью, тем самым обеспечивая единообразие программной обработки различных типов объектов. Создание дескрипторов и разрешение объектов из дескрипторов осуществляется исключительно через диспетчер объектов, поэтому никакое использование ресурсов не остается незамеченным им.
Типы исполнительных объектов, предоставляемых Windows NT:
Процесс | Коллекция исполняемых файлов потоки вместе с виртуальная адресация и контрольная информация. |
---|---|
Нить | Сущность, содержащая код в процессе выполнения. |
Работа | Набор процессов. |
Файл | Открытый файл или Ввод / вывод устройство. |
Раздел | Область памяти, необязательно поддерживаемая файлом или Файл подкачки. |
Токен доступа | Права доступа к объекту. |
Мероприятие | Объект, который инкапсулирует некоторую информацию, которая будет использоваться для уведомления процессов о чем-либо. |
Семафор/Мьютекс | Объекты, которые сериализовать доступ к другим ресурсам. |
Таймер | Объект, который уведомляет процессы через фиксированные промежутки времени. |
Ключ | А реестр ключ. |
Рабочий стол | Логическая поверхность отображения, содержащая GUI элементы. |
Буфер обмена | Временное хранилище для других объектов. |
WindowStation | Объект, содержащий группу объектов рабочего стола, один буфер обмена и другие пользовательские объекты. |
Символическая ссылка | Ссылка на другие объекты, через которые можно использовать указанный объект. |
Структура объекта
Каждый объект, управляемый диспетчером объектов, имеет заголовок и тело; заголовок содержит информацию о состоянии, используемую диспетчером объектов, тогда как тело содержит данные об объекте и предоставляемые им службы. Заголовок объекта содержит определенные данные, представленные как Характеристики , Такие как Имя объекта (который идентифицирует объект), Каталог объектов (категория, к которой принадлежит объект), Дескрипторы безопасности (права доступа к объекту), Квотные сборы (информация об использовании ресурса для объекта), Количество открытых дескрипторов (количество раз, когда дескриптор, идентификатор объекта, был открыт), Открыть список дескрипторов (список процессов, которые имеют прямую ссылку на объект), его Количество ссылок (количество живых ссылок на объект), а Тип (объект, определяющий структуру тела объекта) объекта.
А Тип Объект содержит свойства, уникальные для типа объекта, а также статические методы, реализующие услуги, предлагаемые объектом. Объекты, управляемые Диспетчером объектов, должны, по крайней мере, предоставлять предопределенный набор услуг: Закрывать (закрывающий дескриптор объекта), Дубликат (создать другой дескриптор объекта, с помощью которого другой процесс может получить общий доступ к объекту), Объект запроса (собрать информацию о его атрибутах и свойствах), Безопасность запросов (получить дескриптор безопасности объекта), Установить безопасность (изменить безопасный доступ) и Ждать (для синхронизации с одним или несколькими объектами через определенные события). Объекты типа также имеют некоторые общие атрибуты, включая имя типа, то, должны ли они быть выделены в невыгружаемой памяти, права доступа и информацию о синхронизации. Все экземпляры одного и того же типа совместно используют один и тот же объект типа, и объект типа создается только один раз. Новый тип объекта может быть создан путем наделения объекта свойствами, чтобы раскрыть его состояние и методы для предоставления услуг, которые он предлагает.
Имя объекта используется для придания объекту описательной идентичности, чтобы помочь в поиске объекта. Диспетчер объектов поддерживает список имен, уже назначенных управляемым объектам, и сопоставляет имена экземплярам. Поскольку большинство обращений к объектам происходит через дескрипторы, не всегда необходимо искать имя для преобразования в ссылку на объект. Поиск выполняется только тогда, когда объект создается (чтобы убедиться, что новый объект имеет уникальное имя), или когда процесс обращается к объекту по его имени явно. Каталоги объектов используются для их категоризации по типам. Предопределенные каталоги включают ?? (названия устройств), BaseNamedObjects (Мьютексы, события, семафоры, таймеры ожидания и объекты разделов), Перезвоните (функции обратного вызова), Устройство , Драйверы , Файловая система , KnownDlls , Nls (языковые таблицы), Типы объектов (тип объектов), Элементы управления RPC (RPC порты), Безопасность (объекты подсистемы безопасности), и Окно (объекты оконной подсистемы). Объекты также принадлежат Пространство имен. Каждому пользовательскому сеансу назначается другое пространство имен. Объекты, общие для всех сеансов, находятся в ГЛОБАЛЬНЫЙ пространство имен, а объекты, относящиеся к сеансу, находятся в определенных пространствах имен сеанса
Член Attributes может быть нулем или сочетанием следующих флагов:
использование
Пути диспетчера объектов доступны для многих файловых функций Windows API, хотя имена Win32, например ? и
Доступны инструменты, которые служат в качестве исследователей в пространствах имен диспетчера объектов. К ним относятся 32-битный WinObj от Sysinternals [3] и 64-битный WinObjEx64. [4]