Drivers

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
Draeden
Сообщения: 14
Зарегистрирован: 04 май 2008, 19:45
Контактная информация:

Учусь писать драйверы. У меня есть простой драйвер реагирующий на несколько сообщений, есть также программа посылающая эти сообщения. Всё работает нормально до тех пор, пока я не пытаюсь выгрузить драйвер с помощью кода:

Код: Выделить всё

BOOL StopDriver(SC_HANDLE  scm, LPCTSTR DriverName)
{
	SC_HANDLE Service =
			OpenService (scm, DriverName, SERVICE_ALL_ACCESS );
	
	SERVICE_STATUS serviceStatus;
	BOOL ret =
	ControlService(Service, SERVICE_CONTROL_STOP, &serviceStatus);

	CloseServiceHandle (Service);

	return ret;
}
в этом случае SoftICE перехватывает #PF, причём код вызвавший это исключение выглядит весьма странно. Вот функция выгрузки двайвера:

Код: Выделить всё

#pragma code_seg("PAGE")

VOID UnloadRoutine(IN PDRIVER_OBJECT pDriverObject)
{
	PDEVICE_OBJECT	pNextDevObj;
	int i;

	#if DBG
	DbgPrint("-Example- In Unload Routine.");
	#endif

	pNextDevObj = pDriverObject->DeviceObject;

	for(i=0; pNextDevObj!=NULL; i++)
	{
		PEXAMPLE_DEVICE_EXTENSION dx =
				(PEXAMPLE_DEVICE_EXTENSION)pNextDevObj->DeviceExtension;

		UNICODE_STRING *pLinkName = & (dx->ustrSymLinkName);

		pNextDevObj = pNextDevObj->NextDevice;

		IoDeleteSymbolicLink(pLinkName);
		IoDeleteDevice( dx->fdo);
	}
}

#pragma code_seg()
Посмотрите в чём ошибка, если не сложно. Для "гуру драйверного дела" вопрос вроде простой, а я тут ничего не могу понять, т.к. пишу такое в первый раз.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

А причем тут ассемблер-то, может вам в раздел С++ или WinAPI?
It's a long way to the top if you wanna rock'n'roll
Draeden
Сообщения: 14
Зарегистрирован: 04 май 2008, 19:45
Контактная информация:

Разобрался с этой проблемой.
Какая книга лучше всего подходит для изучения драйверов ?
Вроде как рекомендуют некоего Оуни а также Марка Руссиновича.
Не могли бы вы сказать, как именно называются их книги ?
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

IMHO лучшая книга для изучения драйверов - MSDN. А еще лучше хорошо понимать внутреннюю организацию и принципы работы девайсов на аппаратном уровне - это даже лучше книги при наличии мануала :)
It's a long way to the top if you wanna rock'n'roll
Draeden
Сообщения: 14
Зарегистрирован: 04 май 2008, 19:45
Контактная информация:

MSDN конечно хорошо... Но проблема в том, что я не знаю ничего: мне нужна масса примеров на использования различных функций, и лучше если эта масса примеров будет оформлена в виде бумажной книги.

Насчёт понимания внутреннего устройства... вряд ли бы я спрашивал по какой книге учится если бы знал как устроена Windows...
Ответить