Программирование драйверов Windows

         

Менеджер (диспетчер) объектов


Object Manager. Практически все услуги, предоставляемые операционной системой, оперируют с такой распространенной абстракцией, как объекты, хотя это и не стопроцентные объекты, по некоторым признакам, известным из объектно-ориентированного программирования. Например, программа, выполняемая в пользовательском режиме, которой необходимо синхронизировать несколько собственных потоков, может запросить у операционной системы объект синхронизации Event (событие), а на самом деле — просто особым образом обслуживаемую структуру данных. Система предоставляет Event в форме системного объекта, на который из программы пользовательского режима можно ссылаться только по дескриптору (handle). Файлы, процессы, потоки, события (Events), секции памяти (Memory Sections) и даже подразделы Системного Реестра (Registry Keys) поддерживаются операционной системой как системные объекты. Все объекты создаются и уничтожаются централизованно &#8212 Менеджером Объектов. Это позволяет получить унификацию (единообразие) доступа к объектам, контроля над их временем жизни и обеспечивать безопасность и права доступа к ним.

Всем исполнительным компонентам дозволено вступать в работу только на определенном уровне приоритета IRQL &#8212 для обеспечения слаженности в их совместной работе. В результате, функции, предоставляемые этими компонентами, так же могут быть вызваны не с любого произвольного уровня IRQL. В частности, функции Менеджера объектов (например, ObDereferenceObject) следует вызывать с уровня IRQL не выше DISPATCH_LEVEL. Нарушение этого правила ставит систему в двусмысленное положение. В самом деле, поток с более высоким IRQL может ожидать окончания работы кода, который должен работать на более низком IRQL (в силу своей медлительности или других внутренних вызовов). Чтобы не приводить систему к деградации, соблюдение такого типа правил жестко контролируется операционной системой.



Содержание раздела