IPB

Здравствуйте, гость ( Вход | Регистрация )

> Системное программирование, Создание драйверов, низкоуровневое программирование .....
NickX
сообщение Dec 13 2006, 00:03
Сообщение #1


Новичок
*

Группа: Members
Сообщений: 11
Регистрация: 4.10.2006
Из: Чебоксары
Пользователь №: 2,216



Как написать драйвер в Windows XP, тоесть как получить доступ к прерываниям BIOS и портам ввода\вывода.


--------------------
Вернуться к началу страницы
 
+Цитировать сообщение
 
Создать новую тему
Ответов (1 - 6)
Amp
сообщение Dec 13 2006, 13:35
Сообщение #2


Мега постер
Иконка группы

Группа: Local moder
Сообщений: 1,712
Регистрация: 21.8.2006
Пользователь №: 1,269



Есть маленькое предположение, что надо сначала достать DDK (Driver Development Kit)


--------------------
irc-капец

#КартинкА#
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_sam0rez_*
сообщение Feb 5 2007, 19:21
Сообщение #3





Guests






Такие темы здесь обречены на провал. Мало кто этим занимался, а если и занимался то скорее всего это .NIX какой нибудь. Да и довольно трудоемкая тема нет смысла здесь ее развивть (низкий уровень осиливают еденицы), публики попросту не будет.
Вернуться к началу страницы
 
+Цитировать сообщение
Hi3x
сообщение Feb 5 2007, 19:29
Сообщение #4


Продвинутый пользователь
***

Группа: Posters
Сообщений: 188
Регистрация: 31.8.2006
Из: 47,500 вост. долготы, 56,118 северн. широты
Пользователь №: 1,444



Я писал курсач для работы с СОМ портом на Buildere С++ 6.
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_Shweed_*
сообщение Jul 8 2007, 18:04
Сообщение #5





Guests






Цитата(Hi3x @ Feb 5 2007, 20:29) *
Я писал курсач для работы с СОМ портом на Buildere С++ 6.


Это называешь низкоуровневым программированием? smile.gif

Цитата(NickX @ Dec 13 2006, 01:03) *
Как написать драйвер в Windows XP, тоесть как получить доступ к прерываниям BIOS и портам ввода\вывода.

Для начала драйвер чего ты хочешь написать?

Сообщение отредактировал AndrewDragon - Jul 9 2007, 12:04
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_Pixar_*
сообщение Aug 7 2007, 21:08
Сообщение #6





Guests






Мне бы тож хотелось узнать как написать драйвер для прямого доступа к видеопамяти, ато директ как-то не раскрывает свои способности smile.gif. Желательно конечно без дополнительных и вспомогательных библов, так как это все хоть и предназначено для облегчения, но никак не для увеличения знаний. А драйвер как раз для знаний мне и нужен. Слышал ответ на одном из форумов: wasm.ru может кому и пригодится ссылочка, а у мну денег нет smile.gif)
Вернуться к началу страницы
 
+Цитировать сообщение
Гость_sam0rez_*
сообщение Sep 20 2007, 23:17
Сообщение #7





Guests






Итак, достаем DDK, как уже было сказано выше и пишем:

#include "ntddk.h"

#pragma pack()

//структура содержащая указатель на объект устройства
//а также ссылку на UNICODE-строку
typedef struct _DEVICE_EXTENSION
{
PDEVICE_OBJECT pdo;
UNICODE_STRING ustrSymLinkName;
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;

//=== ФУНКЦИЯ ОТВЕЧАЮЩАЯ ЗА УДАЛЕНИЕ ДРАЙВЕРА ИЗ ПАМЯТИ
VOID OnUnload (IN PDRIVER_OBJECT pDriverObject)
{
PDEVICE_EXTENSION dx = pDriverObject->DeviceObject->DeviceExtension;
//символическая ссылка для удаления
UNICODE_STRING *pLinkName = &(dx->ustrSymLinkName);
IoDeleteSymbolicLink(pLinkName);//удаляем символическую ссылку
IoDeleteDevice(dx->pdo);//удаляем устройство
}

//==== ГЛАВНАЯ ФУНКЦИЯ, ТОЧКА ВХОДА В ДРАЙВЕР
NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject,
IN PUNICODE_STRING pRegistryPath)
{
NTSTATUS status = STATUS_SUCCESS;
PDEVICE_OBJECT pdo;
UNICODE_STRING devName;
UNICODE_STRING symLinkName;
PDEVICE_EXTENSION dx;

//====Блок отвечающий за регистрацию с корректный запуск драйвера====
//заполняем переменные имени устройства и символической ссылки
RtlInitUnicodeString(&devName, L"\\Device\\MyDevice");
RtlInitUnicodeString(&symLinkName, L"\\DosDevices\\MyDevice");
//Определяем функцию отвечающую за выгрузку драйвера из памяти
pDriverObject->DriverUnload = OnUnload;
//Создаем устройство
status = IoCreateDevice( pDriverObject,
sizeof(DEVICE_EXTENSION),
&devName,
FILE_DEVICE_UNKNOWN,
0,
FALSE,
&pdo);
dx = (PDEVICE_EXTENSION)pdo->DeviceExtension;
dx->pdo = pdo;
dx->ustrSymLinkName = symLinkName;
//создаем символьную ссылку
status = IoCreateSymbolicLink(&symLinkName, &devName);
//====================================================================
//Собственно здесь вставляем нужный вам код
//====================================================================
return status;
}

компилим сие в DDK. Вот вам и драйвер. Однако его надо еще зарегистрировать в SCM и запустить.
Вернуться к началу страницы
 
+Цитировать сообщение

ОтветитьСоздать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 27th April 2024 - 22:55