3. Технологический раздел

3.1 Выбор языка программирования и средств программирования

Данный проект состоит из трех программ:

§  Драйвер-фильтр

§  Программа для установки драйвера

§  Программа для управления драйвером

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

Драйвер-фильтр

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

§  Существует специальный компилятор C, поставляемый вместе с пакетом DDK, предназначенный специально для компиляции драйверов. Он содержит множество макроопределений и библиотек, позволяющих сделать процесс написания драйвера более легким. Microsoft рекомендует его как основную среду для разработки драйверов для Windows. Компилятор содержит специальные функции, позволяющие уменьшить размер исходного кода. Специального компилятора ассемблера Microsoft не выпускает.

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

Программа для установки драйвера

Программа для установки представляет собой консольное предложение. На это приложение не накладывается особых требований по скорости и по размеру. Поэтому и была выбрана среда C++ Builder. Она позволяет легко создавать консольные предложения. Программы, написанные в этой среде, занимают мало места, и имеют компактный текст.

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

Программа для управления драйвером

Программа для управления драйвером представляет собой оконное приложение. Написана она была в среде C++ Builder. Поскольку приложение предназначено для пользователя., то оно должно иметь красивый и понятный интерфейс. Данная среда содержит множество стандартных визуальных компонент. Позволяющих осуществить поставленную задачу. Для приложения скорость и объем не является критичным параметром. Поэтому выбор C++ Builder можно считать оптимальным.

В приложении используется технология объектно-ориентированного программирования. Без ее использования организация оконного интерфейса выглядела бы очень запутанной.

3.2 Структуры данных проекта

 

Информация о нажатиях и опусканиях клавиш

Скэнкоды нажатых или отпущенных клавиш хранятся в системном буфере. Доступ к этому буферу можно получить, если прочитать данные по адресу, хранящемуся в IRP пакете. Адрес хранится в поле AssociatedIrp. SystemBuffer. Буфер представляет собой массив структур типа KEYBOARD_INPUT_DATA. Она состоит из следующих полей:

§   UnitId типа USHORT. В нем хранится номер устройства, на котором нажали или отпустили клавишу.

§   MakeCode типа USHORT. В этом поле хранится скэнкод нажатой или отпущенной клавиши. Скэнкод, переданный в этом поле, не определяет клавишу однозначно. Для полной идентификации клавиши необходимо значение поля Flags.

§   Flags типа USHORT. Это поле несет дополнительную информацию о клавише, а так же определяет, нажали клавишу или отпустили. Если нулевой бит равен 0, то значит клавиша нажата, если же он равен 1, то она отпущена. Биты 1 и 2 используются для идентификации клавиши.

§   Reserved типа USHORT. Поля является зарезервированным.

§   ExtraInformation типа ULONG. Это поле содержит дополнительную информацию об устройстве.

Все клавиши, кроме клавиши Pause, вырабатывают одну запись при нажатии и одну при отпускании.

§   Клавиша Pause вырабатывает 4 записи, если она была нажата без Ctrl:

·     Скан код равен 29, флаги равны 4

·     Скан код равен 69, флаги равны 0

·     Скан код равен 29, флаги равны 5

·     Скан код равен 69, флаги равны 1

Если клавиша Pause была нажата вместе с Ctrl, то она выдает 2 записи:

·     Скан код равен 70, флаги равны 2

·     Скан код равен 70, флаги равны 3

§   Бит 2 равен 0, а бит 1 равен 1 в поле Flags у следующих клавиш: Insert, Delete, PageUp, PageDown, Home, End, PrintScreen, правй Ctrl, правй Alt, Enter на дополнительной клавиатуре, обратный слеш на дополнительной, стрелки, клавиши Windows, клавиша всплывающего меню.

§   У всех остальных клавиш биты 1 и 2 поля Flags равны 0.

Клавиша PrintScreen – это единственная клавиша, которая меняет выдаваемый скэнкод в зависимости от того, нажата ли другая. PrintScreen меняет скэнкод в зависимости от Alt.

Вместе с Alt PrintScreen выдает:

§  Скан код равен 84, флаги равны 0 (при нажатии)

§  Скан код равен 84, флаги равны 1 (при отпускании)

Без Alt PrintScreen выдает:

§  Скан код равен 55, флаги равны 2 (при нажатии)

§  Скан код равен 55, флаги равны 3 (при отпускании)

Структура списка замен

Список замен замен – это массив структур ChangeStruct. Она состоит из следующих полей:

§  f1 типа UCHAR. Поле содержит дополнительную, идентифицирующую заменяемую клавишу.

§  Scan1 типа UCHAR. Поле содержит скэнкод заменяемой клавиши

§  f2 типа UCHAR. Поле содержит информацию о клавише, на которую заменяют.

§  Scan2 типа UCHAR. Поле содержит скэнкод клавиши, на которую заменяют.

Фактически поля f1 и f2 содержат 1 и 2 бит поля Flags структуры KEYBOARD_INPUT_DATA. Они помогают идентифицировать клавишу, которая заменяется, и на которую происходит замена.

Дополнительная информация

При создании FDO выделяется память под структуру DEVICE_EXTENSION, в эта структура состоит всего из одного поля. Это поле TopOfStack типа PDEVICE_OBJECT. Оно содержит указатель на FDO, расположенное ниже в стеке клавиатуры, и используется для передачи IRP пакетов ниже по стеку. Адрес этой структуры находится в поле DeviceExtension нашего FDO.

 

3.3 Интерфейс управляющего приложения

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

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

§  Название выбранной кнопки

§  Название кнопки, на которую происходит замена

§  Состояние кнопки (включена или выключена)

§ 


Если необходимо переопределить кнопку, то нужно щелкнуть по этой кнопке. В информационном окне появится информация об активизированной кнопке. Далее необходимо нажать на кнопку «Заменить», она расположена в информационном окне. И затем щелкнуть по кнопке, на которую необходимо произвести замену.

После того как желаема конфигурация определена, нужно нажать кнопку «Установить». После этого информация будет отослана драйверу, и изменения вступят в силу. Если необходимо узнать, какие замены производит драйвер на данный момент, то нужно щелкнуть по кнопке «Принять».

Для быстрого восстановления стандартных настроек клавиатуры предусмотрена кнопка «По умолчанию». Она загружает стандартную конфигурацию. Чтобы она вступила в силу, необходимо нажать на кнопку «Установить».

 

3.4 Тестирование драйвера-фильтра клавиатуры

 

Драйвер был протестирован с использованием стандартной тестирующей утилиты DriverVerifier пакета DDK. С его помощью были проведены следующие тесты:

§  Операции с пулами памяти

§  Корректность уровней IRQL, на которых выполняется код драйвера

§  Обнаружение взаимоблокировок

§  Нехватка ресурсов

§  Нетипичные запросы к драйверу

Все тесты прошли успешно. Память в системе распределялась правильно, ошибок с ней не возникало. На нехватку ресурсов драйвер реагировал корректно. Нетипичные запросы к драйверу не обрабатывались им.

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

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

 


Заключение

В данной работе рассмотрен вопрос, связанный с разработкой драйверов устройств в системе Windows, и реализован драйвер-фильтр клавиатуры.

Разрабатываемый драйвер позволяет

§  переопределять значение любых клавиш клавиатуры

§  отключать клавиши клавиатуры

Драйвер-фильтр отвечает всем современным требованиям, накладываемым Windows на драйверы.

Драйвер был протестирован с помощью тестирующих утилит Microsoft и успешно выдержал все тесты. Тестирование показало корректную работу.


Список литературы

 

1.   Кузьмин И. Драйверы уровня ядра системы Windows XP // Программист, – М.:ООО «Викфилд». – №11, 2003

2.   Солдатов В.П. Программирование драйверов Windows. Изд. 2-е, перераб. и доп. М.: ООО «Бином-Пресс», 2004 г.

3.   MSDN Library, Copyright 1987–2004 Microsoft Corporation

4.   Форум и публикации проекта «Первые шаги» – www.firststeps.ru.


Информация о работе «Переопределение назначений клавиш на клавиатуре в операционной системе Windows»
Раздел: Информатика, программирование
Количество знаков с пробелами: 45280
Количество таблиц: 0
Количество изображений: 9

Похожие работы

Скачать
249178
21
46

... системам линейных алгебраических уравнений с более чем одной неизвестной; MATLAB решает такие уравнения без вычисле-ния обратной матрицы. Хотя это и не является стандартным математическим обозначением, система MATLAB использует терминологию, связанную с обычным делением в одномерном случае, для описания общего случая решения совместной системы нескольких линейных уравнений. Два символа деления / ...

Скачать
129632
2
0

... , выдачей и приёмом лицензий). В условиях крупных сетей рекомендуется выделение под сервер лицензий отдельного компьютера (или нескольких - для резервирования). 1.1 Архитектура терминальных устройств В компьютерных технологиях трёхуровневая архитектура, синоним трёхзвенная архитектура (по англ. three-tier или Multitier architecture) предполагает наличие следующих компонентов приложения: ...

Скачать
568458
20
78

... для реализации системы бюджетирования Консультационной группы "Воронов и Максимов". Статья о проблемах выбора системы бюджетирования - в проекте "УПРАВЛЕНИЕ 3000". Бюджетный автомат Если вы решитесь на автоматизацию системы бюджетирования компании, перед вами сразу встанут вопросы: что выбрать, сколько платить, как внедрять. Примеряйте! О ЧЕМ РЕЧЬ В “Капитале” на стр. 44, 45 мы рассказали ...

Скачать
176646
13
0

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

0 комментариев


Наверх