Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску
Диспетчер объектов в Windows с иерархической категорией с использованием пространств имен

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

Архитектура [ править ]

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

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

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

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

Структура объекта [ править ]

Каждый объект, управляемый диспетчером объектов, имеет заголовок и тело; заголовок содержит информацию о состоянии, используемую диспетчером объектов, тогда как тело содержит данные об объекте и предоставляемые им службы. Заголовок объекта содержит определенные данные, представленные как 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(объекты оконной подсистемы). Объекты также принадлежат пространству имен . Каждому пользовательскому сеансу назначается другое пространство имен. Объекты, общие для всех сеансов, находятся в пространстве имен GLOBAL , а объекты, относящиеся к сеансу, находятся в определенных пространствах имен сеанса.

Структура OBJECT_ATTRIBUTES:

typedef  struct  _OBJECT_ATTRIBUTES  {  ULONG  Length ;  HANDLE  RootDirectory ;  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 Internals (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.