Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
l1_small.doc
Скачиваний:
3
Добавлен:
15.09.2019
Размер:
92 Кб
Скачать
☆

[1.4] Утилита build. Checked и Free Build. Жизненный цикл разработки драйвера.

[1.5] С и С++. Интегрированная среда разработки

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

  • отсутствие библиотеки времени исполнения (runtime library), а следовательно, и определяемых в ней глобальных операторов new и delete

  • отсутствие поддержки исключительных ситуаций С++

  • нет поддержки инициализации глобальных экземпляров классов

В принципе, все эти проблемы разрешимы. Мы не будем описывать конкретные способы, о них вы можете узнать из статьи “C++ Runtime Support for the NT DDK” и из анализа заголовочных файлов в продукте DriverWorks (в особенности файл vdw.h).

[1.6] Установка, удаление, запуск и остановка драйвера.

Подробно установку и управление драйверами мы будем рассматривать на л/р. Сейчас мы рассмотрим эти операции коротко, так, чтобы можно было приступить к выполнению л/р.

Драйверы в NT поддерживают динамическую загрузку и выгрузку. Информация о драйвере, такая, как его имя, тип, местонахождение, способ загрузки и др. находится в реестре в ключе

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Service_name

Подробно обо всех подключах, которые могут там находиться, вы можете узнать в статье “Using The NT Registry for Driver Install” в директории NTInsider, либо в DDK Help\Programmers Guide\Driver Installation\Configuration Registry.

Управлением сервисами и драйверами в системе занимается Service Control Manager (SCM). Он управляет базой данных установленных сервисов и драйверов, обеспечивает единый способ контроля над ними, а также предоставляет API.

Подробную информацию о функционировании SCM и предоставляемом им API можно получить в MSDN Library в разделе

Platform SDK\Base Services\DLLs, Processes and Threads\Services

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

Примерная последовательность действий при установке\удалении запуске\остановке драйвера следующая:

  • открытие SCM – OpenSCManager()

  • получение описателя для вновь созданного или уже существующего драйвера – CreateService() или OpenService()

  • запуск\остановка\удаление драйвера – StartService(), StopService(), DeleteService()

Установленный в системе драйвер также может быть запущен\остановлен с помощью команды net start\net stop.

Хотя в ближайшее время это и не потребуется, но для создания общей картины укажем другие способы установки драйверов:

Text Setup. Этот механизм используют драйверы, устанавливаемые при установке ОС. Этот механизм требует создания скрипт-файла txtsetup.oem. Его формат описан в DDK, имеются примеры в \ddk\src\setup.

В этом файле программе установки NT указывается, какие файлы и куда копировать и какие ключи реестра создавать.

GUI Setup. Драйверы для стандартных устройств, устанавливаемые по окончании установки ОС, используют inf-файлы, формат которых и примеры также приведены в DDK.

Custom Setup. Прикладная программа, использующая функции SCM.

11

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]