Системное программирование, Создание драйверов, низкоуровневое программирование ..... |
Здравствуйте, гость ( Вход | Регистрация )
Системное программирование, Создание драйверов, низкоуровневое программирование ..... |
Dec 13 2006, 00:03
Сообщение
#1
|
|
Новичок Группа: Members Сообщений: 11 Регистрация: 4.10.2006 Из: Чебоксары Пользователь №: 2,216 |
Как написать драйвер в Windows XP, тоесть как получить доступ к прерываниям BIOS и портам ввода\вывода.
-------------------- |
|
|
Dec 13 2006, 13:35
Сообщение
#2
|
|
Мега постер Группа: Local moder Сообщений: 1,712 Регистрация: 21.8.2006 Пользователь №: 1,269 |
Есть маленькое предположение, что надо сначала достать DDK (Driver Development Kit)
-------------------- |
|
|
Гость_sam0rez_* |
Feb 5 2007, 19:21
Сообщение
#3
|
Guests |
Такие темы здесь обречены на провал. Мало кто этим занимался, а если и занимался то скорее всего это .NIX какой нибудь. Да и довольно трудоемкая тема нет смысла здесь ее развивть (низкий уровень осиливают еденицы), публики попросту не будет.
|
|
|
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 |
Я писал курсач для работы с СОМ портом на Buildere С++ 6. Это называешь низкоуровневым программированием? Как написать драйвер в Windows XP, тоесть как получить доступ к прерываниям BIOS и портам ввода\вывода. Для начала драйвер чего ты хочешь написать? Сообщение отредактировал AndrewDragon - Jul 9 2007, 12:04 |
|
|
Гость_Pixar_* |
Aug 7 2007, 21:08
Сообщение
#6
|
Guests |
Мне бы тож хотелось узнать как написать драйвер для прямого доступа к видеопамяти, ато директ как-то не раскрывает свои способности . Желательно конечно без дополнительных и вспомогательных библов, так как это все хоть и предназначено для облегчения, но никак не для увеличения знаний. А драйвер как раз для знаний мне и нужен. Слышал ответ на одном из форумов: wasm.ru может кому и пригодится ссылочка, а у мну денег нет )
|
|
|
Гость_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 и запустить. |
|
|
Текстовая версия | Сейчас: 27th April 2024 - 22:55 |