Основы разработки драйверов устройств в операционных системах Windows

March 28, 2012 by admin Комментировать »

В предыдущих главах этой книги  для управления  различными  устройствами  мы использова ли свободно распространяемое программное обеспечение, куда входил драйвер PortTalk.sys и программа allowio.exe. В этой главе мы рассмотрим вопросы создания собственных драйве ров устройств в операционных  системах Windows, а также создадим драйвер для управления аналого цифровым преобразователем, подключенным к параллельному порту ПК.

Разработка  драйверов  для Windows (как,  впрочем,  и для других операционных  систем) окутана неким мистическим ореолом таинственности и считается чем то из разряда «черной магии». Большинство программистов  и пользователей полагают, что это чрезвычайно  труд ное занятие и доступно далеко не каждому. В определенном смысле это действительно так, если вы собираетесь разработать, например, драйвер звуковой или видеокарты.

Тем не менее, разработать несложный драйвер для обычного устройства из разряда до машней или лабораторной электроники может даже пользователь средней руки, достаточно хорошо владеющий основами программирования  на языке C (поскольку все драйверы разра батываются с использованием языка  C) и имеющий хорошее представление о принципах организации  операционных  систем Windows. При разработке  драйверов  следует всегда по мнить, что они работают в режиме ядра и при неправильном функционировании мгновенно могут привести операционную систему к краху («синий экран  смерти»).

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

Для разработки драйверов мы будем применять стандартное свободно распространяе мое программное  средство, выпущенное фирмой Microsoft  – Windows DDK (Driver Develop ment Kit). Этот программный  пакет можно  закачать  с сайта Microsoft.  В его состав включена обширная документация вместе с примерами разработок драйверов.

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

2000/XP/2003/Vista.

Начнем с того, что определим, что собой представляет драйвер устройства, и как  он вза имодействует с операционной системой. В упрощенном виде такую схему взаимодействия можно представить следующей схемой (рис. 7.1):

Рис. 7.2

Ошибка программы при попытке записи

в параллельный порт

Команды ассемблера in и out являются «привилегированными» инструкциями процессора Intel и могут выполняться только программами, работающими на уровне ядра системы, поэто му пользовательская программа и завершается аварийным образом.

К ресурсам системы напрямую могут обращаться некоторые системные программы  и большинство драйверов устройств. Для того чтобы пользовательская программа могла рабо тать с привилегированными  инструкциями процессора и обращаться напрямую к аппарат ным ресурсам системы, нужно дать ей доступ на уровне ядра, сняв бит защиты в контексте процесса.  Эти функции для примеров  в предыдущих главах выполняли драйвер PortTalk.sys и программа allowio.exe.

Есть и другой путь для работы с устройствами пользователя – написать самому драйвер устройства и обращаться к нему из программы  пользователя.  Именно этот путь и будет здесь описан. Для того чтобы реализовать такую возможность  нужно сделать два шага:

1)   написать драйвер устройства;

2)   написать программу, которая бы обращалась к драйверу устройства для выполнения операций ввода вывода.

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

Источник:  Магда Ю. С. Компьютер  в домашней лаборатории.  – М.: ДМК Пресс, 2008. – 200 с.: ил.

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты