Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
205
Добавлен:
20.02.2016
Размер:
62.46 Кб
Скачать

Драйвер №3 и тестовое приложение

Создание символической ссылки на имя объекта-устройство, вывод трассировочной информации с помощью функции DbgPrint()

Имя проекта – simple3

Описание файла simple3.C

От simple2 текст будет отличаться следующим образом:

1) При успешном создании объекта-устройство создается символическая ссылка на его имя с помощью функции IoCreateSymbolicLink():

NTSTATUS IoCreateSymbolicLink(IN PUNICODE_STRING SymbolicLinkName,

IN PUNICODE_STRING DeviceName);

Имя символической ссылки “\DosDevices\Simple3Link” должно быть инициализировано функцией RtlInitUnicodeString().

2) В случае неудачи создания символической ссылки объект-устройство должен быть удален с помощью функции IoDeleteDevice().

3) В функции – точке входа выгрузки драйвера, перед удалением устройства должна быть удалена символическая ссылка с помощью функции IoDeleteSymbolicLink():

NTSTATUS IoDeleteSymbolicLink(PUNICODE_STRING SymbolicLinkName);

SymbolicLinkName должна быть инициализирована с помощью RtlInitUnicodeString() в то же значение, что и в функции DriverEntry().

4) Во все 4 функции драйвера (DriverEntry, Create, Close и Unload) в начало и конец должна быть добавлена выдача трассировочной информации. Кроме того, такая выдача должна быть добавлена в блоки проверки условий успеха/неудачи создания устройства и символической ссылки.

Для этого:

После директивы #include <ntddk.h> добавить

#if DBG

#define DebugPrint(x) DbgPrint x

#else

#define DebugPrint(x)

#endif

В коде программы вызывать

DebugPrint((trace_info));

где trace_info – текстовая строка, например, вида “simple3: Entering DriverEntry\n”. Формат функции DbgPrint соответствует функции printf().

Тестовое приложение

После создания драйвера simple3 должно быть создано тестовое приложение simple3app. Оно должно использовать функцию CreateFile() для открытия устройства с именем “\\.\Simple3Link”, т.е. с именем символической ссылки на имя устройства. В случае успеха и неудачи открытия файла должны выводиться соответствующие сообщения.

Для создания проекта тестового приложения в той же рабочей области, где находится проект драйвера, щелкнуть правой кнопкой мыши в окне диспетчера проектов в закладке “File Wiew” на самой верхней строчке ( “Workspace ‘Simple3’: 1 project(s)” ). В появившемся меню выбрать пункт “Add New Project to Workspace…”. Тип проекта – Win32 console application, имя проекта – simpl3app, проект на базе приложения Hello, World.

В заголовочном файле StdAfx.h не забыть добавить подключение заголовочного файла windows.h (основной заголовочный файл для приложений Windows).

Проверка работоспособности драйвера

Для установления драйвера в системе будет использована утилита Monitor.

  • В меню “File\Open Driver…” указать местоположение файла драйвера simple3.sys.

  • При выборе кнопки “Start Driver” должна появиться трассировочная информация для функции драйвера DriverEntry. Проконтролировать успешность создания объекта-устройство и символической ссылки на его имя. В случае ошибки исправить драйвер.

  • Если драйвер запущен успешно, запустить тестовое приложение. Оно должно сообщить об успехе открытия файла, при этом должна появиться трассировочная информация для функции – обработчика запроса в/в IRP_MJ_CREATE. При закрытии приложением описателя файла либо явно с помощью вызова CloseHandle() либо неявно при закрытии приложения должна появиться трассировочная информация для функции – обработчика запроса в/в IRP_MJ_CLOSE.

  • При выборе кнопки “Stop Driver” должна появиться трассировочная информация для функции - обработчика запроса в/в DriverUnload.

  • При повторном нажатии кнопки “Start Driver” проконтролировать правильность работы функции DriverEntry. Распространенная ошибка – забыть уничтожить символическую ссылку в DriverUnload. В этом случае DriverEntry отработает с ошибкой.

  • Остановить драйвер, удалить его из системы с помощью кнопки “Remove service entry”

При испытании драйвера проконтролировать создание и уничтожение ключей реестра для драйвера с помощью приложения regedit.exe (ключ реестра HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Simple3), а также создание и уничтожение объектов драйвер, устройство и символическая ссылка в пространстве имен диспетчера объектов с помощью утилиты WinObj (директории \??, \Driver, \Device, найти элемент \DosDevices).

5

Соседние файлы в папке Лабы по драйверам