Как писать драйвера (часть 2)
Как писать драйвера (часть 2)
Прежде, чем хвататься за описание самого драйвера, давайте определимся с типами существующих драйверов.
По существующему в DDK разделению сам Microsoft подразделяет драйвера на следующие типы:
– Kernel-Mode Drivers;
– Kernel Streaming Drivers;
– Graphics Drivers;
– Network Drivers;
– Virtual Device Drivers.
С графическими и сетевыми драйверами более менее понятно по названию.
Виртуальные VDD относятся к устройствам, нуждающимся в работе под MS-DOS.
А вот два первых типа мы разберем немного подробнее.
На рисунке видна структура всех драйверов типа Kernel-Mode Drivers. В иерархии этой системы различают драйвера для работы на верхнем уровне(high-level), промежуточные (intermediate) и низкого уровня (low-level).
К первому относятся драйвера файловый систем (FAT, NTFS), ко второму – драйвера фильтры, драйвера виртуальных дисков, I/O устройств, а к третьему – драйвера непосредственно работающие на уровне прерываний.
Kernel Streaming Drivers – это в первую очередь драйвера устройств видео и аудио потока.
Немного лирики. По сути все драйвера, работают на уровне kernel, поэтому такое деление, лично я, считаю не оправданным, но раз создатели говорят "есть контакт", нам придется "есть контакт".
Более подробную информацию по разделению на типы, и их описание можно найти в Help DDK идущего в поставке DDK, и устанавливаемому вместе с этим пакетом.
Отступим от абстрактной классификации, и перейдем к более земным вещам.
Опишем среднестатистическую структуру драйвера.
Каждый драйвер является набором функций, встраивающихся при инсталляции в структуру Windows машины, и выполняемых при возникновении определенного события. По сути – это функции конечного автомата Windows которые обязаны соответствовать определенному формату.
В каждом драйвере есть входная точка, соответствующая функции main(), в замечательном С, WinMain() в Windows. Функция вызывается при старте системы автоматически в момент инициализации обслуживающей части Windows к которой относится данный драйвер.
Функции выхода нет.
Еще чуть-чуть лирики. В нашей с вами ситуации дистанционного общения, придется брать и писать один из драйверов для примера. Без этого будет сложновато объяснить, что мы делаем и зачем. Поэтому я предлагаю выбрать некий тип для нашего примера.
Так как большая часть драйверов работает для поддержки и управления реального физического устройства, предположить, что у всех вас есть одинаковая плата или одинаковый дисковод, было бы верхом глупости.
Отбросив таким образом драйвера, который привязаны к железке мы остановимся на типе Network – сетевых драйверах.
Сетевые драйвера.
Сетевые драйвера тоже как и драйвера типа kernel, делятся на такие же три уровня. Вспомните, что все разделение я назвал условным.
Меняется только название.
– Miniport drivers;
– Protocol drivers;
– Intermediate drivers.
Структура сетевой части драйверного поголовья, похожа на пирог. Давайте посмотрим как это выглядит.
На рисунке четко видно, как структура NDIS (Network Driver Interface Specification) пронизывает все слои драйверного пирога.
Теперь давайте представим как проходит пакет от пользовательской аппликации к посылке через модем или сетевую карту в сеть. Все клиенты Microsoft, такие как браузер IE, или Outlook, пользуются одним и тем же слоем библиотек, откликающихся на имя транспортные библиотеки.
Главным в этом семействе является библиотека сокетов. Про то как она работает вы прочитаете в наших выпусках посвященных Winsock. В любом случае библиотека, оформив запрос отправляет его в NDIS, и о нем совершенно забывает. В структуре нашего пирога, главным управляющим звеном является как раз NDIS. Этот цербер распределяет кому и как передать пакет. Собственно драйвер в сети встроенный в NDIS предоставляет управленцу все необходимые прототипы функций. Начав с первого типа, протокольного, пакет проходит через слой промежуточных драйверов и попадает в драйвер модема (Miniport – это слово я на русский затруднился перевести в контексте, пусть так и останется).
Собственно драйвера протокольного уровня – это сам транспортный стек, а промежуточного – это обычные фильтры.
Для нас важно, что промежуточный драйвер не привязан ни к оборудованию, ни к какому либо стандарту Windows, но соответствует своей структурой любому сетевому драйверу.
Поэтому в качестве примера мы выберем именно его.
В следующей части я более подробно разберу, как работает вся система сетевых драйверов, с упором в сторону промежуточного типа драйверов. И затрону сам текст драйвера с конкретными примерами. Мы напишем функцию входа в драйвер.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
О чем писать не нужно
О чем писать не нужно Не следует искажать данные: умышленно указывать больший опыт работы, сильно преувеличивать свои возможности, кривить душой относительно образования. Тайное, как правило, становится явным. В итоге и вы, и работодатель просто впустую потеряете
Что писать?
Что писать? Мост длиною в блог Метки: блоговедение, темы блога, что такое блогПисать обо всем сразу – это как плыть в броуновском движении, не сдвигаясь с места. Блог должен быть похож на мост: когда по нему идешь или едешь, то понимаешь, что рано или поздно окажешься на
Как писать
Как писать 33 буквы в руках мастера Метки: блогословие, приманкиВ любом учебнике по журналистике написано о том, что статья теряет читателей после каждого абзаца. А абзац, встречающий читателя, – это заголовок. В некоторых RSS-агрегаторах вообще не видно ничего, кроме
О чем, когда и как много писать
О чем, когда и как много писать Текстовый формат — основной для блогов и самый простой в реализации, поэтому каждый блогер должен владеть искусством написания текстов.Вопросы: о чем, через какой промежуток времени и в каком объеме писать в блог — волнуют очень многих
На каком языке писать сообщения?
На каком языке писать сообщения? Если ваш бизнес ориентирован на одну страну или языковую группу, то эта проблема перед вами не стоит. Другой вопрос, если группа международная. Вот скриншот (см. рис. 49), демонстрирующий подобный пример. В группе из 70 тысяч друзей 40 %
§ 55. Как писать слово «интернет»?
§ 55. Как писать слово «интернет»? — Ну что, Знайка? — стали спрашивать коротышки, подбегая к нему. — Как ты объяснишь это? — Что же тут объяснять? — развел Знайка руками?… Н. Носов. Незнайка на Луне В Академии наук Заседает князь Дундук. Говорят, не подобает Дундуку
Как писать драйвера (часть 1)
Как писать драйвера (часть 1) Предисловие. Драйвера под Windows являются для большей массы программистов, "тайной за семью печатями". И вовсе не потому, что это что-то архисложное, сколько по причине абсолютной недокументированности идеологии.Начав заниматься этой темой я
Часть первая: "Что нужно для компиляции простейшего драйвера?"
Часть первая: "Что нужно для компиляции простейшего драйвера?" Для разных типов Windows вам понадобиться разный набор программ.В любом случае надо скачать Win DDK (Driver Development Kit), для той платформы, под которую пишется драйвер. Его можно брать с разных источников, лично я
Как писать драйвера (часть 2)
Как писать драйвера (часть 2) Прежде, чем хвататься за описание самого драйвера, давайте определимся с типами существующих драйверов.По существующему в DDK разделению сам Microsoft подразделяет драйвера на следующие типы:– Kernel-Mode Drivers;– Kernel Streaming Drivers;– Graphics Drivers;– Network
Как писать драйвера (часть 5)
Как писать драйвера (часть 5) Итак, мы возвращаемся к драйверам.Справедливости ради, стоит отметить, что на сайте эта тема – одна из самых популярных, так что, кому нужны более глубокие знания, может обращаться к нам на форум, там обсуждаются конкретные проблемы.Сегодня мы
Часть 2. API для WDM драйвера.
Часть 2. API для WDM драйвера. Большинство функций драйверного API, которые нас интересуют, предоставляются модулем ntoskrnl.exe.Для их использования надо сделать следующее:1) Объявить типы данных и определить константы.Большинство определений для C находятся в файлах ntdef.h и wdm.h.2)
Совет 3 Умения писать код мало
Совет 3 Умения писать код мало Недостаточно выбрать технологию, на которую стоит сделать ставку. В конце концов, разве знание технологии — не товар, который нужно продать? Ты не сможешь расслабленно совершенствовать навыки программирования, оставив связанные с бизнесом
ПИСЬМОНОСЕЦ: Писать или дарить?
ПИСЬМОНОСЕЦ: Писать или дарить? Здравствуйте!Пишу двумя пальцами, ибо остальные: забинтованы…Эх, люди, вы наивно думаете, что судный день еще далеко, и всякие там толпы киборгов-убийц, бродящих по догорающим развалинам в поисках остатков человеческого рода, - сценарий для
Писать в периодические издания
Писать в периодические издания Хороший материал ищут многие газеты, журналы и бюллетени, освещающие вопросы безопасности. Если у вас есть что рассказать о технической поддержке, о продуктах, инструментах и т. п., то поделитесь своей информацией с другими. Это прекрасный