IPB

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

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


Новичок
*

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



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


--------------------
Вернуться к началу страницы
 
+Цитировать сообщение
 
Создать новую тему
Ответов
Гость_sam0rez_*
сообщение Sep 20 2007, 23:17
Сообщение #2





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 Текстовая версия Сейчас: 4th July 2025 - 11:18