Есть легаси-драйвер, есть приложение, котрое его инсталлирует-загружает-выгружает-деинсталлирует.
При выгрузке система стала падать в синюю смерть с ошибкой PAGE_FAULT_IN_NONPAGED_AREA.
Помогите, плиз, решить эту проблему.
пожалуйста используйте таги для выделения кода, см ниже как — модератор
Выгрузку делаю так:
SC_HANDLE Service = OpenService (scm, DriverName, SERVICE_ALL_ACCESS );
if (Service == NULL) // Невозможно выполнить останов драйвера
{
DWORD err = GetLastError();
return FALSE;
}
SERVICE_STATUS serviceStatus;
BOOL ret = ControlService(Service, SERVICE_CONTROL_STOP, &serviceStatus);
CloseServiceHandle (Service);
Функция DriverUnload:
#pragma code_seg( "PAGE" )
void unload( IN PDRIVER_OBJECT driverObj )
{
PDEVICE_OBJECT nextDevObj = driverObj->DeviceObject;
PDeviceExtension devExt = ( PDeviceExtension )nextDevObj->DeviceExtension;
UNICODE_STRING *symLinkName = &( devExt->symLinkName );
if( devExt->fdo != NULL )
{
IoDeleteSymbolicLink( symLinkName );
IoDeleteDevice( devExt->fdo );
}
}
#pragma code_seg()
Здравствуйте, Роланд Бродяга, Вы писали:
РБ>Есть легаси-драйвер, есть приложение, котрое его инсталлирует-загружает-выгружает-деинсталлирует.
РБ>При выгрузке система стала падать в синюю смерть с ошибкой PAGE_FAULT_IN_NONPAGED_AREA.
РБ>Помогите, плиз, решить эту проблему.
причин может быть миллион — начиная с того что у Вас мог остался outstanding IRP где-то и после того, как драйвер был выгружен, а память за ним успешно почищена — дошло дело до завершения потерянного IRP через его completion routine.
Включите verifier для начала? Подключите WinDbg и посмотрите что там скажут. Заодно и сюда потом выхлоп можно будет предоставить — иначе анализ проблемы будет затруднен

... << RSDN@Home 1.2.0 alpha 4 rev. 1090>>