Программируем драйверы: понятия Abstraction, Structure, Object
Abstraction
Абстракция, представление сложного предмета искусственно созданным формальным описанием. Абстракция позволяет отойти от рассмотрения некоторых излишне конкретных вопросов реализации своего прототипа. Абстракции, вводимые Microsoft DDK, возникли, главным образом из стремления облегчить переносимость кода на другие аппаратные платформы (обеспечение HAL) и стремления уберечь разработчика драйвера от необходимости вникать в тонкости постоянно меняющихся версий аппаратного обеспечения на каждой конкретной платформы (например, объект адаптера позволяет абстрагироваться от реализаций контроллеров DMA).
Structure
Структура, тип данных языка С. Состоит из простых типов данных (char, int и т.п.) и вложенных структур или объединений (), Например, тип данных LARGE_INTEGER иногда (файл ntdef.h) определяется как структура, состоящая из одного поля:
typedef struct _LARGE_INTEGER
{
LONGLONG QuadPart;
} LARGE_INTEGER;
Объединение, тип данных языка С. Состоит из простых типов данных (char, jnt и т.п.) и вложенных структур или объединений. Реализует доступ к одной и той же области памяти, как к данным разных типов. Например, тип данных LARGE_INTEGER может быть определен (в файле ntdef.h это выполняется при помощи условной компиляции) следующим образом:
typedef _LARGE_INTEGER
{
struct { ULONG LowPart;
LONG HighPart;
} u;
LONGLONG QuadPart;
} LARGE_INTEGER;
Тип данных LARGE_INTEGER используется, например, в вызове KeSetTimer для установки таймера. Для того чтобы облегчить установку значений такого типа, можно применять вызов RtlConvertLongToLargeInteger, который скроет от разработчика, как конкретно реализован тип LARGE_INTEGER.
LARGE_INTEGER interval = RtlConvertLongToLargeInteger(100*10);
Здесь и далее обращения к системным функциям (типа RtlXxx, KeXxx, loXxx, read, CreateFile и т.п.) будут называться вызовами, а в тексте они будут обозначаться жирным шрифтом.
Object
Объект. Когда мы программируем драйверы объект всегда является структурой или объединением, с которым связана одна из абстракций. Например, объект устройства - это всего лишь структура языка С. Однако она заполнена такими данными и на нее возложена такая логическая нагрузка, что все это позволяет говорить об этой структуре — почти что — как об устройстве.
В режиме ядра имеются трудности с реализацией трюков С++ (оператора new, позднего связывания, идентификации типов во время выполнения и виртуальных методов), следовательно, и основных приемов объектно-ориентированного программирования (ООП). Соответственно, и объекты здесь "ненастоящие". Объекты режима ядра роднит с "настоящими" объектами (в смысле ООП) практически только одно обстоятельство: к каждому объекту прилагается набор функций, и фирма Microsoft рекомендует работать с объектами ядра только при помощи этих специализированных функций. Этим Microsoft достигает решения трех задач. Во-первых, скрывается внутренняя структура объектов (которая в будущем может модифицироваться разработчиком операционной системы или иначе реализовываться на разных платформах). Во-вторых, становится возможным ограничить пределы вмешательства программиста в жизнь ядра, что разработчик ОС считает потенциально опасным. В третьих, программист действительно делает меньше ошибок.
В качестве объектов в ядре Windows реализовано много концепций, например, существуют объекты процессов и потоков, объекты процедур отложенного вызова, объекты драйверов и устройств, объекты синхронизации и т.п.
Популярные драйверы
ATI Catalyst Drivers - cпециализированные драйверы Catalyst, предназначены для видеоадаптеров серии Radeon от производителя ATI.
NET Framework pack - пакет, включающий в себя все самые необходимые драйверы для NET Framework приложений.
Microsoft IntelliPoint - ПО, предназначенное для управления и настройки координатно-указательных контроллеров компании Microsoft.
Microsoft ActiveSync - утилита для соединения различных мобильных устройств с компьютером.
Драйвер — это приложение, расшифровывающее операционной системе алгоритмы работы с необходимым оборудованием. Чтобы установленные устройства стабильно работали необходимо скачивать и инсталлировать драйверы для всех составляющих вашего персонального компьютера. Например для звуковой и сетевой карт, мыши или принтера. Для всего этого и многого другого можно скачать драйверы на нашем сайте. Чаще всего операционная система не вызывает необходимости скачивать драйверы, так как уже включает в себя необходимые приложения для работы.
Тем не менее, есть и оборудование, которое устанавливается с помощью дополнительных приложений, или, что весьма нередко, операционная система произведена раньше чем проблемное оборудование и не может скачать и установить необходимые драйверы автоматически. Для этого в комплект к необходимому оборудованию стали добавлять диски с наборами необходимых утилит и программ.
Если таких дисков нет под рукой появляется вопрос: где же скачать драйверы для необходимого нам устройства и операционной системы, установленной на используемом ПК. Возникает множество проблем с поиском, кроме того такие поиски чреваты потерями внушительного времени, именно поэтому мы создали архив драйверов Hotdrivers.ru с помощью которого скачивать драйверы - одно удовольствие.