Есть легаси-драйвер, есть приложение, котрое его инсталлирует-загружает-выгружает-деинсталлирует.
При выгрузке система стала падать в синюю смерть с ошибкой 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()