stringtranslate.com

Менеджер объектов

Диспетчер объектов в Windows, иерархически классифицированный с использованием пространств имен

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

Архитектура

Диспетчер объектов в архитектуре Windows NT

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

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

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

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

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

Каждый объект, управляемый диспетчером объектов, имеет заголовок и тело; заголовок содержит информацию о состоянии, используемую диспетчером объектов, тогда как тело содержит данные, специфичные для объекта, и службы, которые он предоставляет. Заголовок объекта содержит определенные данные, представленные как Properties, такие как Object Name(который идентифицирует объект), Object Directory(категория, к которой принадлежит объект), Security Descriptors(права доступа для объекта), Quota Charges(информация об использовании ресурсов для объекта), Open handle count(количество раз, когда дескриптор, идентификатор объекта, был открыт), Open handle list(список процессов, имеющих живую ссылку на объект), его Reference count(количество живых ссылок на объект) и Type(объект, который идентифицирует структуру тела объекта) объекта.

Объект Typeсодержит свойства, уникальные для типа объекта, а также статические методы, реализующие службы, предлагаемые объектом. Объекты, управляемые Object Manager, должны как минимум предоставлять предопределенный набор служб: Close(который закрывает дескриптор объекта), Duplicate(создает другой дескриптор объекта, с помощью которого другой процесс может получить общий доступ к объекту), Query object(собирает информацию о его атрибутах и ​​свойствах), Query security(получает дескриптор безопасности объекта), Set security(изменяет доступ безопасности) и Wait(синхронизируется с одним или несколькими объектами через определенные события). Объекты типа также имеют некоторые общие атрибуты, включая имя типа, должны ли они быть выделены в невыгружаемой памяти, права доступа и информацию о синхронизации. Все экземпляры одного типа совместно используют один и тот же объект типа, и объект типа создается только один раз. Новый тип объекта можно создать, наделив объект свойствами для раскрытия его состояния и методами для раскрытия предлагаемых им служб.

Object nameиспользуется для придания объекту описательной идентичности, чтобы помочь в поиске объектов. Диспетчер объектов поддерживает список имен, уже назначенных управляемым объектам, и сопоставляет имена с экземплярами. Поскольку большинство обращений к объектам происходит через дескрипторы, не всегда необходимо искать имя для преобразования в ссылку на объект. Поиск выполняется только при создании объекта (чтобы убедиться, что новый объект имеет уникальное имя) или когда процесс явно обращается к объекту по его имени. Object directoriesиспользуются для их категоризации в соответствии с типами. Предопределенные каталоги включают \??(имена устройств), \BaseNamedObjects(мьютексы, события, семафоры, таймеры ожидания и объекты разделов), \Callback(функции обратного вызова), \Device, \Driver, \FileSystem, \KnownDlls, \Nls(языковые таблицы), \ObjectTypes(объекты типов), \RPC Control( порты RPC\Security ) , (объекты подсистемы безопасности) и \Windows(объекты подсистемы окон). Объекты также принадлежат пространству имен. Каждому сеансу пользователя назначается другое пространство имен. Объекты, общие для всех сеансов, находятся в глобальном пространстве имен, а объекты, специфичные для сеанса, находятся в конкретных пространствах имен сеанса.

Структура OBJECT_ATTRIBUTES:

typedef struct _OBJECT_ATTRIBUTES { Длина ULONG ; HANDLE Корневой каталог ; PUNICODE_STRING Имя объекта ; Атрибуты ULONG ; PSECURITY_DESCRIPTOR Дескриптор безопасности ; PSECURITY_QUALITY_OF_SERVICE Качество безопасности обслуживания ; } OBJECT_ATTRIBUTES * POBJECT_ATTRIBUTES ;                 

Член Attributes может быть равен нулю или представлять собой комбинацию следующих флагов:

OBJ_INHERITОБЪЕКТ_ПЕРМАНЕНТНЫЙОБЪЕКТ_ЭКСКЛЮЗИВOBJ_CASE_INSENSITIVEOBJ_OPENIFOBJ_OPENLINKOBJ_KERNEL_HANDLE

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

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

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

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

Ссылки

  1. ^ «Именование файлов, путей и пространств имен — приложения Win32». docs.microsoft.com .
  2. ^ "winapi - Есть ли разница между путями \??\ и \\?\?". Stack Overflow .
  3. ^ "WinObj - Windows Sysinternals". docs.microsoft.com .
  4. ^ "hfiref0x/WinObjEx64: Windows Object Explorer 64-bit". GitHub . 20 февраля 2020 г.

Внешние ссылки