Александр Тарво - Использование NuMega DriverStudio для написания WDM-драйверов

Здесь есть возможность читать онлайн «Александр Тарво - Использование NuMega DriverStudio для написания WDM-драйверов» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программы, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Использование NuMega DriverStudio для написания WDM-драйверов: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Использование NuMega DriverStudio для написания WDM-драйверов»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Использование NuMega DriverStudio для написания WDM-драйверов — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Использование NuMega DriverStudio для написания WDM-драйверов», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Reading from device – 0 bytes read from device (32 requested).

–, –, –, –, –, –, –, –, –, –, –, –, –, –, –, –, –, –, –, –, –, –, –, –, –, –,

–, –, –, –, –, –,

В данном случае приложение установило связь с драйвером и прочитало из него 32 байта. Функция чтения в драйвере не определена, поэтому, естественно, драйвер вернет абракадабру. Если же будет получено сообщение вида

C:\…Projects\XDSPdrv\exe\objchk\i386>Test_XDSP.exe r 32

Test application Test_XDSP starting…

ERROR opening device: (2) returned from CreateFile

Exiting…

— то приложение не смогло установить связь с драйвером. Следует попробовать переустановить драйвер.

2.3 Наращивание функциональных возможностей драйвера.

Рассмотрим подробно текст драйвера, сгенерированного DriverWizard и внесем в него необходимые изменения.

В проекте пристствуют всего два класса:

XDSP

класс драйвера;

XDSPDevice

класс устройства.

Также есть несколько глобальных функций и переменных:

PNPMinorFunctionName — возвращает строку с текстовым названием кода функции IOCTL. Эта функция используется при отладке, когда надо перевести числовое значение кода IOCTL в строку с его названием.

POOLTAG DefaultPoolTag('PSDX') — используется совместно с BoundsChecker для отслеживания возможных переполнений буфера и утечек памяти.

KTrace t("XDSPdrv") — глобальный объект трассировки драйвера. Этот объект используется для вывода сообщений трассировки при работе драйвера. Использование объекта трассировки аналогично использованию класса iostream в С++. Вывод отладочных сообщений производится при помощи оператора <<. Примеры использования объекта трассировки неоднократно встречаются в тексте драйвера, например:

t << "m_bBreakOnEntry loaded from registry, resulting value: [" << m_bBreakOnEntry << "]\n";

В данном примере объект трассировки используется для вывода строки "m_bBreakOnEntry loaded from registry, resulting value: [" и значения логической переменной m_bBreakOnEntry. Все сообщения трассировки можно прочитать в отладчике SoftIce.

Начнем анализ текста драйвера с класса XDSP (класс драйвера). В строке 31 при помощи макроса DECLARE_DRIVER_CLASS декларируется класс драйвера XDSP. Далее следует метод DriverEntry, который вызывается при инициализации драйвера:

NTSTATUS XDSPdrv::DriverEntry(PUNICODE_STRING RegistryPath)

//В строке RegistryPath содержится ключ реестра, в котором система хранит информацию о драйвере.

{

//Далее выводится трассировочное сообщение, информирующее о вызове метода DriverEntry:

t << "In DriverEntry\n";

//После этого драйвер создает объект Params класса KRegistryKey и считывает данные из

//реестра для этого драйвера:

KRegistryKey Params(RegistryPath, L"Parameters");

//Далее производится проверка на успех:

if ( NT_SUCCESS(Params.LastError()) ) {

//Текст, заключенный в макрос препроцессора DBG будет откомпилирован только в отладочной версии

//драйвера.

#if DBG

ULONG bBreakOnEntry = FALSE;

// Читается значение переменной BreakOnEntry реестра:

Params.QueryValue(L"BreakOnEntry", &bBreakOnEntry);

// Если она принимает значение true,то инициировать точку останова в отладчике.

if (bBreakOnEntry) DbgBreakPoint();

#endif

//Загрузить остальные параметры реестра.

LoadRegistryParameters(Params);

}

m_Unit = 0;

//Вернуть успех

return STATUS_SUCCESS;

}

Метод LoadRegistryParameters зaгружает из реестра все остальные параметры, необходимые для драйвера. Впрочем, в нашем драйвере таковых нет, и поэтому функция не выполняет никаких полезных действий (просто загружает значение переменной m_bBreakOnEntry).

void XDSPdrv::LoadRegistryParameters(KRegistryKey &Params) {

m_bBreakOnEntry = FALSE;

Params.QueryValue(L"BreakOnEntry", &m_bBreakOnEntry);

t << "m_bBreakOnEntry loaded from registry, resulting value: [" << m_bBreakOnEntry << "]\n";

}

На этом заканчивается секция инициализации драйвера. Далее следует метод AddDevice. Он вызывается, когда система обнаруживает устройство, за которое отвечает драйвер (обычно это происходит при загрузке драйвера). В метод ситема передает указатель на физический объект устройства (Physical Device Object, PDO). Этот объект представляет собой некий блок информации о физическом устройстве, который используется ОС. Данный метод создает объект устройства XDSPDevice. С точки зрения системы, создается функциональный объект устройства (Functional Device Object, FDO).

NTSTATUS XDSPdrv::AddDevice(PDEVICE_OBJECT Pdo) {

t << "AddDevice called\n";

//Здесь вызывается конструктор класса XDSPDevice.

XDSPdrvDevice* pDevice = new(

static_cast(KUnitizedName(L"XDSPdrvDevice", m_Unit)),

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Использование NuMega DriverStudio для написания WDM-драйверов»

Представляем Вашему вниманию похожие книги на «Использование NuMega DriverStudio для написания WDM-драйверов» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Использование NuMega DriverStudio для написания WDM-драйверов»

Обсуждение, отзывы о книге «Использование NuMega DriverStudio для написания WDM-драйверов» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x