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

       

Роль Системного Реестра


Совсем еще недавно, общепринятым образом поведения для аппаратного обеспечения было оставаться в состоянии молчания до тех пор, пока программное обеспечение неким магическим образом не узнает о его существовании и не примется стимулировать эту аппаратуру. Методы, которыми действовали драйверы или операционная система NT, можно было разделить на три группы:

  • Драйвер получал список потенциально возможных ресурсов аппаратуры (адреса портов ввода/выводов, используемых каналов прямого доступа к памяти, DMA, и номера прерываний) для каждого устройства, с которым возможно взаимодействие. Путем "подергивания" за каждый потенциально возможный ресурс во время исполнения DriverEntry, драйвер создавал приемлемый объект устройства (вызовом IoCreateDevice).
  • Драйвер полагался на инсталляционную программу, которая методом проб и ошибок или при активном участии пользователя производила приемлемое описание ресурсов и устройств, которыми мог бы управлять драйвер впоследствии. Список таких устройств и их ресурсов сохранялся в Системном Реестре.
  • Операционная система NT выполняла как часть загрузочного процесса (см. Приложение Б) испытание стандартных устройств и ресурсов. Например, параллельные порты представлены обычно по адресам 0x378 или 0x278, что и проверяется в процессе загрузки. Все обнаруженное заносилось в Системный Реестр.
  • Разработчики компьютерных систем признали правомерной потребность в более упорядоченном процессе конфигурирования аппаратного обеспечения. Новые шины и протоколы проектируются так, чтобы автоматически сообщать о появлении или удалении устройств. Все типы шин поддерживают теперь такую форму автоматического определения.

    Промежуточным решением для получения автоматически распознаваемых шин и аппаратуры было в ранних версиях NT расширение загрузочного процесса, во время которого в Системный Реестр включается информация об обнаруженном оборудовании. Таким образом, проходящий инициализацию драйвер в ходе работы DriverEntry получал возможность увидеть список автоматически обнаруженных на данный момент устройств и создать подходящие объекты устройств.


    Записи, появившиеся в результате в Системном Реестре, позволяли драйверу загрузиться (в момент загрузки системы или позже), чтобы тот мог затем заняться конфигурированием устройства. Первична в таком подходе загрузка драйвера, выполненная хотя бы один раз. Вполне естественно, что такой подход называется иногда "драйверо-центричным".

    С выходом Windows 95, а затем и Windows 98, и Windows 2000, данная модель была преобразована в обратную. Устройства объявляли о себе сами, либо во время загрузки, либо во время "горячего" подключения (hot plug), таким образом, настаивая на установке соответствующего регистрируемого драйвера. Такой метод получил название "аппаратно-центричного".

    Следует отметить, что в настоящий момент пользователь может самостоятельно инициировать установку драйвера для устройств, не поддерживающих PnP (или даже &#8212 "как бы" устройств "как бы" не поддерживающих, что было в примере драйвера Example.sys несуществующего устройства, глава 3). Соответствующая информация будет сохранена в Системном Реестре для последующих загрузок &#8212 иными словами, старый "драйверо-центричный" механизм сохранен.

    Более того, информация о PnP устройствах, однажды обнаруженных системой полностью из Системного Реестра не удаляется, даже если устройство не будет подключено при следующей загрузке системы &#8212 система "помнит" обо всех ранее произведенных подключениях и установленных драйверах, что позволяет ей экономить время, если вдруг, после длительного перерыва, пользователь решит использовать это устройство снова (см. раздел HKLM\System\CurrentControlSet\Enum).

    Изначально предназначенная для Windows 95, WDM модель поддерживала методологию PnP, что существенно отличало ее от драйверной модели Windows NT. Компания Microsoft настойчиво продвигалась к достижению совместимости драйверных сред, и в результате NT модель была дополнена поддержкой PnP. Родился обобщенный подход к драйверной среде для Windows 98 и Windows NT 5, а новая общая модель получила наименование Windows Driver Model (WDM).


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