Унифицированная модель драйвера
В исполнительной системе драйвер устройства и файловая
система строятся и выглядят для остальной части ОС одинаково. Более того,
именованные каналы и сетевые редиректоры рассматриваются, как файловые
системы, и реализованы в виде соответствующих драйверов. Каждый драйвер
- это автономный компонент, который можно динамически загружать и выгружать
из системы в зависимости от потребностей пользователя.
Унифицированный модульный интерфейс, предоставляемый драйверами, позволяет
диспетчеру ввода/вывода не видеть их структуру или внутренние детали.
Драйверы могут вызывать друг друга через диспетчер ввода/вывода, что обеспечивает
независимую обработку запроса ввода/вывода на нескольких уровнях.
Драйверы являются модульными и могут располагаться слоями один над другим,
что позволяет, например, драйверам разных файловых систем использовать
для доступа к файлам один и тот же драйвер диска. Послойная модель драйверов
позволяет также вставлять в иерархию новые драйверы.
Драйвер - это особый тип динамически подключаемой библиотеки. Фактически,
это DLL, удовлетворяющая ряду дополнительных требований и имеющая расширение
«.sys».
Как и любая DLL, драйвер имеет свою точку входа — функцию, вызываемую
при загрузке исполняемого файла в память. Адрес этой точки входа содержится
в служебной информации в самом модуле. При создании модуля в процессе
компиляции настройки среды разработки предполагают, что имя соответствующей
функции будет DriverEntry, хотя оно может
быть заменено на любое другое. Момент загрузки драйвера определяется соответствующими
данному драйверу настройками в реестре (ключ Start). Этими настройками
управляет Service Control Manager (SCM), хотя они могут быть изменены
и вручную.
Прежде чем перейти к описанию структуры драйвера желательно ознакомиться
с такими важными понятиями как объект-файл, объект-драйвер и объект-устройство.
|