Управление драйвером. Пользовательский интерфейс




 

Для упрощения процесса взаимодействия с драйвером предоставляется приложение пользовательского режима, общий вид которого показан на рисунке (рис.3).

 

Рис. 3. Вид основного окна управляющего приложения


Приложение предоставляет минимально необходимый функционал:

· вывод информации о клавиатуре;

· управление состоянием драйвера (вкл. / выкл.);

· управление режимом отображения (перекрывать / не перекрывать другие окна);

· отображение выбранного символа.

Интерфейс клиентского приложения предельно просто и не требует дополнительных разъяснений.

 


Тестирование

 

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

§ Корректность операций с пулами памяти

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

Все тесты прошли успешно.

Для того чтобы скомпилировать и собрать окончательную версию драйвера, была использована среда x86 Free Build Environment из пакета WDK.

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

 


Заключение

 

При выполнении курсового проекта была проделана следующая работа:

· Изучена структура драйверов модели WDM и WDF;

· Изучен стек устройства, путь запроса от приложения через стек устройства;

· Определено место разрабатываемого драйвера в стеке устройства и выбрана структура программного обеспечения;

· Изучен механизм встраивания драйвера-фильтра в стек драйверов;

· Разработан функциональный механизм сопоставления некоторой цифровой клавише на дополнительной клавиатуре набора букв заданного алфавита;

· Разработано программное обеспечение, удовлетворяющее требованиям технического задания;

· Проведено тестирование, подтвердившее работоспособность и надёжность разработанного программного обеспечения.

 


Приложения

Приложение A

 

Конфигурации физических тестовых машин:

1. Intel Atom N450 (1,66 ГГц), 1 Гб ОЗУ, ОС Windows 7 Профессиональная SP1

2. Intel Core 2 Duo (2.33 ГГц), 3 Гб ОЗУ, ОС Windows Vista Home Premium SP2

. Intel Pentium 3 (666 МГц), 512 Мб ОЗУ, ОС Windows XP Professional SP3

. Intel Core 2 Duo (1.8 ГГц), 3 Гб ОЗУ, ОС Windows XP Professional SP3


Приложение Б

 

Листинг исходного кода. Фрагмент драйвера._ServiceCallback

(PDEVICE_OBJECT DeviceObject,PKEYBOARD_INPUT_DATA InputDataStart,PKEYBOARD_INPUT_DATA InputDataEnd,OUT PULONG InputDataConsumed

)

{

BOOLEAN Setted = FALSE;_EXTENSION devExt;hDevice;_INPUT_DATA cur;_INPUT_DATA k;= WdfWdmDeviceGetWdfDeviceHandle(DeviceObject);= FilterGetData(hDevice);

// Анализ поля, отвечающего за статус драйвера: включён / выключен. Если // включён - п.2, иначе - п. 4;

if (devExt->Running)

{

// Цикл по всем IRP-пакетам, приходящим с клавиатуры

for (cur = InputDataStart, k = InputDataStart; cur < InputDataEnd; cur++)

{

// Для каждого IRP-пакета

DbgPrint("Scan code: %d", InputDataStart->MakeCode);

// Установить переменную, определяющую, является ли пакет // пакетом для вывода в TRUE;= TRUE;

// Определить скан-код нажатой клавиши

// Если нажата клавиша в нумпаде

if (IsNumPadKey(cur->MakeCode))

{("NumPad");

// Установить переменную, определяющую, является ли пакет // пакетом для вывода в FALSE;

Setted = FALSE;

// Далее если кнопка была отжата, то обновляем статус(TRUE)

{("Break!");

// Если скан код не изменился

if (devExt->Working && cur->MakeCode == devExt->CurMakeCode && cur->Flags & KEY_BREAK)

{("Inc!");

// Увеличиваем

// Если раскладка русская - везед делим по // модулю 4(!devExt->RusLat)>CurChar = (devExt->CurChar + 1) % 4;

// значит раскладка английскаяif (devExt->CurMakeCode == 71 || devExt->CurMakeCode == 73)>CurChar = (devExt->CurChar + 1) % 4;>CurChar = (devExt->CurChar + 1) % 3;

}

// Если кнопка не была отпущена setted установить в TRUE и преобразовать // выбранный код в букву

else if (devExt->Working && cur->MakeCode == 82 &&!(cur->Flags & KEY_BREAK))

{("Out1!");

// если ноль, то выводим

Setted = TRUE;(devExt->RusLat)>MakeCode = GetCharLat(devExt->CurMakeCode, devExt->CurChar);>MakeCode = GetCharRus(devExt->CurMakeCode, devExt->CurChar);

}

// Если кнопка была отпущена setted установить в TRUE, devExt->Working в // FALSE и преобразовать выбранный код в букву

else if (devExt->Working && cur->MakeCode == 82 && cur->Flags & KEY_BREAK)

{("Out2!");

// если ноль, то выводим

Setted = TRUE;>Working = FALSE;(devExt->RusLat)>MakeCode = GetCharLat(devExt->CurMakeCode, devExt->CurChar);>MakeCode = GetCharRus(devExt->CurMakeCode, devExt->CurChar);

}

// Если скан код нажатой клавиши равен 0x78, то изменить поле, отвечающее за // используемый язык

else if (cur->MakeCode == 78 && cur->Flags & KEY_BREAK)

{>RusLat =!devExt->RusLat;

}if (cur->Flags & KEY_BREAK)

{("Start!");

// Иначе переинициализируем>Working = TRUE;>CurChar = 0;>CurMakeCode = cur->MakeCode;

}

}

}

// Если этот пакет не для вывода, то удаляем его

if (!Setted)

{>MakeCode = 0;

}

}

// Обработка пакета закончена

}

(*(PSERVICE_CALLBACK_ROUTINE)(ULONG_PTR) devExt->UpperConnectData.ClassService)(>UpperConnectData.ClassDeviceObject,,,

InputDataConsumed);

}

 


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

 

1. Руссинович М., Соломон Д. Внутреннее устройство Microsoft Windows: Windows Server 2003, Windows XP и Windows 2000. Мастеркласс. / Пер. с англ. - 4-е изд. - М.: Издательство «Русская Редакция»; СПб.: Питер, 2008. - 992 стр.: ил.

2. Соломон Д., Руссинович М. Внутреннее устройство MS Windows 2000. Питер: 2001

3. Орвик П. Windows Driver Foundation: разработка драйверов. - М.: Издательство «Русская редакция»; СПб.: «БХВ-Петербург», 2008. - 880 с.

. Солдатов В. П. Программирование драйверов Windows. - М.: ООО «Бином-Пресс», 2011. - 576 с.

5. https://www.wasm.ru/series.php?sid=9 [Электронный ресурс]

6. MSDN [Электронный ресурс]

. Справочные материалы WDK Documentation



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-04-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: