![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#1
|
|
![]() Новичок ![]() Группа: Members Сообщений: 11 Регистрация: 4.10.2006 Из: Чебоксары Пользователь №: 2,216 ![]() |
Как написать драйвер в Windows XP, тоесть как получить доступ к прерываниям BIOS и портам ввода\вывода.
-------------------- |
|
|
![]() |
![]()
Сообщение
#2
|
|
![]() Мега постер ![]() Группа: Local moder Сообщений: 1,712 Регистрация: 21.8.2006 Пользователь №: 1,269 ![]() |
Есть маленькое предположение, что надо сначала достать DDK (Driver Development Kit)
-------------------- |
|
|
Гость_sam0rez_* |
![]()
Сообщение
#3
|
Guests ![]() |
Такие темы здесь обречены на провал. Мало кто этим занимался, а если и занимался то скорее всего это .NIX какой нибудь. Да и довольно трудоемкая тема нет смысла здесь ее развивть (низкий уровень осиливают еденицы), публики попросту не будет.
|
|
|
![]()
Сообщение
#4
|
|
![]() Продвинутый пользователь ![]() ![]() ![]() Группа: Posters Сообщений: 188 Регистрация: 31.8.2006 Из: 47,500 вост. долготы, 56,118 северн. широты Пользователь №: 1,444 ![]() |
Я писал курсач для работы с СОМ портом на Buildere С++ 6.
|
|
|
Гость_Shweed_* |
![]()
Сообщение
#5
|
Guests ![]() |
Я писал курсач для работы с СОМ портом на Buildere С++ 6. Это называешь низкоуровневым программированием? ![]() Как написать драйвер в Windows XP, тоесть как получить доступ к прерываниям BIOS и портам ввода\вывода. Для начала драйвер чего ты хочешь написать? Сообщение отредактировал AndrewDragon - Jul 9 2007, 12:04 |
|
|
Гость_Pixar_* |
![]()
Сообщение
#6
|
Guests ![]() |
Мне бы тож хотелось узнать как написать драйвер для прямого доступа к видеопамяти, ато директ как-то не раскрывает свои способности
![]() ![]() |
|
|
Гость_sam0rez_* |
![]()
Сообщение
#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 и запустить. |
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 4th July 2025 - 17:33 |