|  Системное программирование, Создание драйверов, низкоуровневое программирование ..... | 
Здравствуйте, гость ( Вход | Регистрация )
|  Системное программирование, Создание драйверов, низкоуровневое программирование ..... | 
|  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 и запустить. | 
|  | |
|   | 
|   | Текстовая версия | Сейчас: 31st October 2025 - 08:26 |