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

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

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

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

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

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

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

Интервал:

Закладка:

Сделать

hDevice = INVALID_HANDLE_VALUE;

break;

}

case DLL_PROCESS_DETACH: {

//Закрыть хэндл драйвера

if (hDevice != INVALID_HANDLE_VALUE) CloseHandle(hDevice);

hDevice = INVALID_HANDLE_VALUE;

break;

}

} //Все операции завершились успешно. Вернем true.

return TRUE;

}

//Эта внешняя функция будет вызываться приложением, которое захочет установить

//связь с драйвером. Функция вернет true в случае успеха и false при неудаче.

EXPORT bool IsDriverPresent(void) {

//Попытаемся открыть хэндл драйвера

hDevice=OpenByName();

if (hDevice == INVALID_HANDLE_VALUE)

//неудача

return(false);

else

//Успех.

return(true);

};

//Внешняя функция, производящая чтение памяти устройства. Char* data – буфер для

//данных, int len – число 32-битных слов для чтения. Функция вернет число

//прочитанных слов.

EXPORT int ReadMem(char *data, int len) {

unsigned long rd=0; //Количество прочитанных слов

ReadFile(hDevice, data, len, &rd, NULL); //Системный вызов чтения данных из

//файла. В данном случае – из нашего устройства

//len – количество запрашиваемых слов

//rd – количество прочитанных слов.

data[len*4+1]=0; //Установить последний байт в 0 – признак конца строки.

return(rd); //Вернуть количество прочитанных слов.

}

//Внешняя функция, производящая запись в память. Практически аналогична

//предыдущей.

EXPORT int WriteMem(char *data, int len) {

unsigned long nWritten=0;

WriteFile(hDevice, data, len, &nWritten, NULL);

//len – количество запрашиваемых слов

//nWritten – количество прочитанных слов.

return nWritten;

}

//Эта функция возвращает количество памяти устройства, байт.

EXPORT int GetMemSize(void) {

CHAR bufInput[4]; // Это пустой входной буфер, который будет

//передан устройсву

unsigned long bufOutput; //Буфер, куда драйвер запишет результат.

ULONG nOutput; //Длина возвращенных драйвером данных, байт

// Вызвать функцию device IO Control с кодом XDSPDRV_IOCTL_GETMEMSIZE

if (!DeviceIoControl(hDevice, XDSPDRV_IOCTL_GETMEMSIZE, bufInput, 4, &bufOutput, 4, &nOutput, NULL)) return(0); //Неудача

else return(bufOutput); //Кол-во памяти

}

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

2.5 Подключение dll-библиотеки к приложению.

После того, как написан драйвер и dll-библиотека для работы с ним, пришло время написать приложение пользоваеля, работающее с устройством. Оно будет взаимодействовать с драйвером через dll-библиотеку. Естественно, написано оно также будет в среде Visual C++. В принципе, его можно было бы реализовать в среде Visual Basic, Delphi или CВuilder, но это приведет к некоторым трудностям, прежде всего в использовании системных вызовов и структур данных. В данном разделе, в отличие от предыдущих, не рассматривается какое-либо конкретное приложение, а даются общие рекомендации по написанию такой программы.

Подключение библиотеки к приложению не требует особых усилий. Библиотека подключается при помощи системного вызова HMODULE LoadLibrary(char* LibraryName), где LibraryName — строка с именем файла dll-библиотеки. Возвращаемое значение — хендл (дескриптор) бибилиотеки. Если функция возвратила NULL, то произошла ошибка при подключении библиотеки.

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

FARPROC GetProcAdress(HMODULE hModule, char * ProcName)

• hModule — хэндл библиотеки, возвращенный LoadLibrary;

• ProcName — строка с именем импортируемой функции. Вызов GetProcAdress возвращает адрес функции с заданным именем и NULL, если такой функции нет в библиотеке.

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

Указатель на функцию, ипортируемую из dll-библиотеки должен также быть скомпилирован со специальным объявлением типа — __declspec(dllimport). Эту строку также удобно представить в виде директивы #define.

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

Интервал:

Закладка:

Сделать

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

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


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

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

x