Drivers were not removed

This commit is contained in:
Alex 2023-01-04 19:40:57 +02:00
parent 4d8205a516
commit 094a75360f
Signed by untrusted user who does not match committer: enderice2
GPG Key ID: EACC3AD603BAB4DD

View File

@ -31,9 +31,11 @@ namespace Driver
void Driver::UnloadAllDrivers() void Driver::UnloadAllDrivers()
{ {
KernelCallback callback; KernelCallback callback;
debug("%ld drivers loaded, [DUIDs: %ld]", DriverManager->GetDrivers().size(), DriverUIDs); debug("%ld drivers loaded, [DUIDs: %ld]", Drivers.size(), DriverUIDs);
foreach (DriverFile *drv in DriverManager->GetDrivers()) debug("driver size %ld", Drivers.size());
for (size_t i = 0; i < Drivers.size(); i++)
{ {
DriverFile *drv = Drivers[i];
memset(&callback, 0, sizeof(KernelCallback)); memset(&callback, 0, sizeof(KernelCallback));
callback.Reason = StopReason; callback.Reason = StopReason;
debug("Stopping & unloading driver %ld [%#lx]", drv->DriverUID, drv->Address); debug("Stopping & unloading driver %ld [%#lx]", drv->DriverUID, drv->Address);
@ -46,12 +48,15 @@ namespace Driver
continue; continue;
delete drv->InterruptHook[i]; delete drv->InterruptHook[i];
} }
Drivers.remove(i);
} }
} }
bool Driver::UnloadDriver(unsigned long DUID) bool Driver::UnloadDriver(unsigned long DUID)
{ {
foreach (DriverFile *drv in DriverManager->GetDrivers()) for (size_t i = 0; i < Drivers.size(); i++)
{
DriverFile *drv = Drivers[i];
if (drv->DriverUID == DUID) if (drv->DriverUID == DUID)
{ {
KernelCallback callback; KernelCallback callback;
@ -67,8 +72,10 @@ namespace Driver
continue; continue;
delete drv->InterruptHook[i]; delete drv->InterruptHook[i];
} }
Drivers.remove(i);
return true; return true;
} }
}
return false; return false;
} }