Jump to content

Диспетчер объектов (Windows)

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

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

Архитектура

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

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

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

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

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

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

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

[ редактировать ]

Каждый объект, управляемый диспетчером объектов, имеет заголовок и тело; заголовок содержит информацию о состоянии, используемую диспетчером объектов, тогда как тело содержит данные, специфичные для объекта, и службы, которые он предоставляет. Заголовок объекта содержит определенные данные, представленные как 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 (Мьютексы, события, семафоры, таймеры ожидания и объекты разделов), \Callback (функции обратного вызова), \Device, \Driver, \FileSystem, \KnownDlls, \Nls (языковые таблицы), \ObjectTypes (типовые объекты), \RPC Control ( порты RPC ), \Security (объекты подсистемы безопасности) и \Windows (объекты оконной подсистемы). Объекты также принадлежат пространству имен . Каждому пользовательскому сеансу назначается другое пространство имен. Объекты, совместно используемые всеми сеансами, находятся в пространстве имен GLOBAL , а объекты, специфичные для сеанса, находятся в определенных пространствах имен сеанса.

Структура OBJECT_ATTRIBUTES:

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;

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

OBJ_INHERIT
OBJ_PERMANENT
OBJ_EXCLUSIVE
OBJ_CASE_INSENSITIVE
OBJ_OPENIF
OBJ_OPENLINK
OBJ_KERNEL_HANDLE

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

[ редактировать ]

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

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

См. также

[ редактировать ]
  1. ^ «Именование файлов, путей и пространств имен — приложения Win32» . docs.microsoft.com .
  2. ^ "winapi - Есть ли разница между путями \??\ и \\?\?" . Переполнение стека .
  3. ^ «WinObj — системные компоненты Windows» . docs.microsoft.com .
  4. ^ «hfiref0x/WinObjEx64: 64-разрядная версия обозревателя объектов Windows» . Гитхаб . 20 февраля 2020 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 36297e13d1b9964995b6799977917dfa__1721291340
URL1:https://arc.ask3.ru/arc/aa/36/fa/36297e13d1b9964995b6799977917dfa.html
Заголовок, (Title) документа по адресу, URL1:
Object Manager (Windows) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)