![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
![]()
Сообщение
#1
|
|
![]() Новичок ![]() Группа: Members Сообщений: 11 Регистрация: 4.10.2006 Из: Чебоксары Пользователь №: 2,216 ![]() |
Как написать драйвер в Windows XP, тоесть как получить доступ к прерываниям BIOS и портам ввода\вывода.
-------------------- |
|
|
![]() |
Гость_sam0rez_* |
![]()
Сообщение
#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 и запустить. |
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 4th July 2025 - 11:18 |