Как написать драйвер для 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 не самый удобный на сегодня способ, а посему предлагаю обратить внимания на два продукта.

  1. Jungo WinDriver

  2. 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. Есть тестовое приложение которое демонстрирует как эти функции использовать.
Чтобы установить драйвер надо:

  1. Поместить файл portio.sys в C:\WINDOWS\SYSTEM32\DRIVERS\
  2. Прописать его в реестре. Для XP и 2000 это делается командой regini portio.ini в результате в разделе HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services появится раздел PortIo.
    В нем параметры:
    ErrorControl0x00000001
    ImagePath\SystemRoot\System32\Drivers\portio.sys
    Type0x00000001
    Start0x00000002
    Перезагрузите систему.

    Драйвер установлен можно использовать.
    Смотрите тестовое приложение.

    portio.sys

Программы

Remote Control - Программа для удаленного доступа к компьютеру.
ImageConverter - Программа для уменьшения фотографий.
AutoShutdown - Программа для автоматического выключения компьютера.
Work time counter - Простая программа для учета рабочего времени.
ClearFolders - Программа для массового удаления файлов.
SynchronizeFolders - Программа для синхронизации каталогов.
DiskSector - Утилита позволяет осуществлять чтение / запись секторов диска в / из файла.
ROPTest - Программа изображает все 256 вариантов флагов Ternary Raster Operations Codes, помогает определить необходимый код растровой операции.
HEX Dump ActiveX позволяет просматривать и редактировать данные в шестнадцатеричном HEX формате.
15 slide puzzle - 15 slide puzzle game.
BOOTSAVER - Позволяет скопировать загрузочный сектор жесткого диска в файл, восстановить загрузочный сектор из файла, восстановить загрузочную программу IPL1, не меняя таблицу разделов диска.
Генератор кроссвордов. Описание алгоритм компьютерного составления кроссвордов.
Симулятор 80196. Программный симулятор микроконтроллера Intel 80196KR. Имеет встроенный компилятор ассемблера, текстовый редактор, справочную систему. Может создавать HEX файлы.
Ассемблер. Оригинальный компилятор ассемблера х86.
DISKEDIT Программа позволяет просматривать и редактировать сектора дисков. Работает через прерывание INT13.

Программирование

WPF, XPS, NET. Как установить шрифт из памяти
Нейронные сети. Пример программы и исходный код С++.
Deflate. Подробное описание алгоритма декодирование формата Дефлет. Прмер декодирования с пояснениями.
Программирование драйверов для Windows. Общие вопросы программирования драйверов. Какими средствами пользоваться, где скачать DDK.
Программирование RS232 в Windows. СComBase класс для программирования COM порта.
Программирование потоков в Windows. Класс CBaseThread позволяет организовать несколько рабочих потоков.
Динамический Recordset CDynamicRecordSet - класс модернизирует CRecordSet для более удобной работы с БД из MFC приложений.
Как сохранить, восстановить, отредактировать MBR (Master Boot Record), boot sector, нулевой, загрузочный сектор диска при помощи утилиты debug.exe

evmsoft.net © 2014