Drivers
Добавлено: 01 июл 2008, 10:35
Учусь писать драйверы. У меня есть простой драйвер реагирующий на несколько сообщений, есть также программа посылающая эти сообщения. Всё работает нормально до тех пор, пока я не пытаюсь выгрузить драйвер с помощью кода:
в этом случае SoftICE перехватывает #PF, причём код вызвавший это исключение выглядит весьма странно. Вот функция выгрузки двайвера:
Посмотрите в чём ошибка, если не сложно. Для "гуру драйверного дела" вопрос вроде простой, а я тут ничего не могу понять, т.к. пишу такое в первый раз.
Код: Выделить всё
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;
}
Код: Выделить всё
#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()