Поделиться через


Object-Based

Операционная система microsoft Windows NT основана на объектах. Различные компоненты в исполнительной власти определяют один или несколько типов объектов. Каждый компонент экспортирует подпрограммы поддержки режима ядра, которые управляют экземплярами своих типов объектов. Ни один компонент не может напрямую обращаться к объектам другого компонента. Чтобы использовать объекты другого компонента, компонент должен вызывать экспортированные подпрограммы поддержки.

Такая конструкция позволяет операционной системе быть как переносимой, так и гибкой. Например, в будущем выпуске операционной системы может содержаться перекодированный компонент ядра, который определяет те же типы объектов, но с совершенно разными внутренними структурами. Если эта гипотетическая перекодированная версия ядра экспортирует набор подпрограмм поддержки с теми же именами и параметрами, что и существующий набор, внутренние изменения не повлияют на переносимость любого другого исполнительного компонента в существующей системе.

Аналогичным образом, чтобы оставаться переносимыми и настраиваемыми, драйверы должны взаимодействовать с операционной системой и друг с другом, используя только подпрограммы поддержки и другие интерфейсы, описанные в WDK.

Как и операционная система, драйверы также основаны на объектах. Пример:

  • Объекты file представляют подключение приложения пользовательского режима к устройству.

  • Объекты устройств представляют логические, виртуальные или физические устройства каждого драйвера.

  • Объекты driver представляют образ загрузки каждого драйвера.

Диспетчер ввода-вывода определяет структуру и интерфейсы для файловых объектов, объектов устройств и объектов драйверов.

Как и любой другой исполнительный компонент, драйверы используют объекты, вызывая подпрограммы поддержки режима ядра, экспортируемые диспетчером ввода-вывода и другими системными компонентами. Подпрограммы поддержки режима ядра обычно имеют имена, определяющие конкретный объект, которым управляет каждая подпрограмма, и операцию, выполняемую каждой подпрограммой с этим объектом. Эти имена подпрограмм поддержки имеют следующую форму:

PrefixOperationObject

where

Префикс Идентифицирует компонент режима ядра, экспортирующий подпрограмму поддержки, и, как правило, компонент, определяющий тип объекта. Большинство префиксов имеют две буквы.

Операции Описывает, что делается с объектом .

Объекта Определяет тип объекта .

Например, подпрограмма IoCreateDevice диспетчера операций ввода-вывода создает объект устройства для представления физического, логического или виртуального устройства в качестве целевого объекта запросов ввода-вывода.

Один системный компонент может экспортировать подпрограммы, вызывающие подпрограммы поддержки другого компонента. Это может сократить количество вызовов, которые должен выполнять драйвер. В частности, менеджер ввода-вывода экспортирует определенные процедуры, которые упрощают разработку драйверов. Например, IoConnectInterruptEx, который вызывается драйверами низкого уровня для регистрации своих ISR, вызывает подпрограммы поддержки ядра для объектов прерывания.

Прозрачность объекта

Некоторые системные объекты являются непрозрачными: только определяющий системный компонент знает о внутренней структуре такого объекта и может напрямую получить доступ ко всем данным, содержащимся в объекте. Системный компонент, определяющий экспорт непрозрачного объекта, поддерживает подпрограммы, которые могут вызывать драйверы и другие компоненты режима ядра для управления этим объектом. Драйверы никогда не обращаются к непрозрачным структурам объектов напрямую.

Примечание Чтобы обеспечить переносимость драйверов, драйверы должны использовать предоставляемые системой подпрограммы поддержки для управления системными объектами. Определяющий системный компонент может в любое время изменить внутреннюю структуру своих типов объектов.