Как написать драйвер для Windows ?
Информация по программированию драйверов
Windows. С чего начать. Где
скачать DDK. Что читать.
Видимо, перед вами стоит
задача взаимодействия с аппаратурой. Наверное, эта аппаратура подключена
не к
COM порту. Для работы с RS232
Windows API имеет
практически все возможности, за исключением взаимодействия с микроконтроллерами
по протоколу с девятым адресным битом, да и это возможно осуществить. А
вот если требуется вывести байт данных в параллельный порт или еще куда,
то тут OpenFile("LPT",...)
уже не работает. На ассемблере тоже бесполезно. Наверное все уже в курсе, что
код типа
[ out dx,al ] под 2000-XP
ничего кроме ошибки не дает. Что же делать ? Надо сделать драйвер под
Windows. И тут возникает вопрос, а как бы побыстрее научиться писать
драйвера, а еще лучше разработать один драйвер
для Windowsи и забыть, как о
кошмарном сне. Возможно многие сочтут, что программировать
драйвера, а особенно отлаживать драйвера
под Windows, не самое приятное занятие.
Радует, тот факт, что за последние 5 лет появилась рускоязычная
литература на тему разработки драйверов ибо осваивать эту тему по документации
Microsoft DDK весьма утопичное занятие.
Xочется отметить книгу: "Программирование
драйверов для Windows." Автор:
В.П. Солдатов. Издательство: Бином. ISBN:
5-9518-0099-4 Данная книга не содержит диска с
примерами, да и вообще примерами не изобилует, зато дает очень хорошее описание
архитектуры ядра Windows, и может служить хорошим стартом
для освоения программирования драйверов.
Понятно, что для создания дравера необходимо инструментальное
средство разработки драйверов, и чем оно мощнее, тем быстрее вы достигните цели.
Самое примитивное из средств рахзработки драйверов это, это
DDK, Driver Development Kit.
И
вот что досадно, если в 2000-2002 году DDK 2000
можно было скачать бесплатно,
то сейчас бесплатно доступна только Windows Server
2003 DDK, причем скачать нельзя, можно только получить
CD по почте, при этом необходимо иметь кредитку, т.к.
DDK то бесплатно, но пересылка диска будет стоить 25$.
Деньги не великие, так что если имеете кредитку и желаете DDK 2003,
вот ссылка
http://www.microsoft.com/whdc/devtools/ddk/default.mspx
Более навороченный продукт DDK Suite 3,
обойдется уже в 199 $ плюс те же 25
за доставку.
Найти
DDK на рынке за 60 рублей, наверное можно но сложно, слишком
редко востребуемый продукт. Ну а если нет кредитки или времени
на ожидание диска, не отчаивайтесь, и не благодарите :)
Скачать DDK 2003.
Скачивайте все файлы что там есть. Распакуете ddk.rar и запускайте
ksetup.exe. Спасибо Яндексу за 67 мегабайт.
Правда писать драйвера при
помощи только DDK не самый
удобный на сегодня способ, а посему предлагаю обратить внимания на два
продукта. -
Jungo WinDriver
-
Numega Driver Studio.
Оба по сути похожи, а именно
позволяют создавать драйвера двух типов.
Как вы правильно догадались первый способ значительно легче и
не требует от программиста глубокого понимания процессов происходящих в ядре, да
вообще ни какого понимания не требует. Мастер создания
драйверов, DriverWizard (Jungo) сгенерит код, который вы сможете вставить в свои программы и обращаться к портам в-в,
памяти и даже использовать прерывания. Все очень просто: Утром установите WinDriver, вечером ваша программа будет работать
с аппаратурой, но остерегайтесь WinDrivera. Покупать вы его конечно не будете, и при установке, выберете 30-дневную копию.
В течении месяца все будет работать и Driver Wizard и все программы его
использующие.
Потом DriverWizard работать перестанет, но к тому времени вы то уже поймете, что он и не нужен.
Нужна только библиотека WINDRVR.SYS,
которая и обеспечивает взаимодействие с портами Вашей
программе. Так вот этот самый WINDRVR.SYS, через который будет работать ваша программа, в отличии от DriverWizarda
не подает никаких признаков того, что срок истек и он больше работать не будет.
Драйвер открывается как и раньше, все функции возвращают результат SUCCESS
однако программа не работает, потому что
драйвер пишет не то и не туда и читает не оттуда и не всегда. При этом можно подумать,
что проблемы с аппаратурой, поэтому при использовании WinDrivera
лучше отыскать serial number и зарегистрировать.
Слишком коварная у него система защиты.
Numega Driver Studio.имеет в своем составе
аналогичный компонент: Driver Agent сгенерит все необходимое для использования универсального
драйвера.
Вы даже сможете создать свой файл.sys, который будет работать в составе ядра и делать там все, что вы запрограммируете,
например обрабатывать прерывания. При этом вникать опять же ни во что не придется.
За день разработаете свой драйвер. Оба пакета содержат
средства для написания настоящих драйверов, НО при помощи
DriverStudio или WinDriver это делать
значительно проще, чем при помощи только DDK, в
дополнение они имеют хорошую документацию касающуюся общих вопросов
драйверов, более читаемую чем в DDK. Кстати
DDK для работы с ними необходимо установить. Установив Numega Driver Works, Вы открываете студию (не Driver , а Microsoft Visual
Studio), выбираете там NewProject и видете в окне мастера рядом с
MFC App Wizard
NT/WDM Driver Wizard
Мастер за 9 шагов,
сгенерит проект из которого получается драйвер и exe-шник, который этот драйвер тестирует.
Кроме того в Driver Studio входит (я бы назвал это Driver Developmen Foundational Classes)
набор классов, которые содержат все необходимое для разработки драйверов, так же
как MFC для разработки приложений.
Ну, а если вам необходимо прочитать - записать байт в порт, не
используя прерываний, так тут ни каких драйверов писать не надо, все уже
написано до нас.
Универсальный драйвер, который позволяет обращаться к портам ввода-вывода.
Больше он ничего не может, но в большинстве случаев можно обойтись и этим.
Драйвер этот называется PortIo.sys и входит в состав примеров прилагаемых к
Numega Driver Works.
Я его скомпилировал, вам остается скачать и использовать. Драйвер предоставляет 4 функции: Open, Close,Read и Write.
Есть тестовое приложение которое демонстрирует как эти функции использовать.
Чтобы установить драйвер надо:
- Поместить файл portio.sys в C:\WINDOWS\SYSTEM32\DRIVERS\
- Прописать его в реестре. Для XP и 2000 это делается командой regini portio.ini
в результате в разделе HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
появится раздел PortIo.
В нем параметры:
ErrorControl | 0x00000001 |
ImagePath | \SystemRoot\System32\Drivers\portio.sys |
Type | 0x00000001 |
Start | 0x00000002 |
Перезагрузите систему.
Драйвер установлен можно использовать.
Смотрите тестовое приложение.
portio.sys
|