Stop all drivers on shutdown / crash

This commit is contained in:
Alex
2022-12-15 14:16:22 +02:00
parent 2ed1bf05a0
commit ad61c7acc5
2 changed files with 37 additions and 4 deletions

View File

@ -77,6 +77,23 @@ Exit:
void KernelShutdownThread(bool Reboot)
{
if (DriverManager)
foreach (Driver::DriverFile *drv in DriverManager->GetDrivers())
{
if (!drv)
continue;
KernelCallback callback;
memset(&callback, 0, sizeof(KernelCallback));
callback.Reason = StopReason;
DriverManager->IOCB(drv->DriverUID, (void *)&callback);
for (size_t i = 0; i < sizeof(drv->InterruptHook) / sizeof(drv->InterruptHook[0]); i++)
{
if (!drv->InterruptHook[i])
continue;
delete drv->InterruptHook[i];
}
}
trace("Shutting Down/Rebooting...");
if (Reboot)
PowerManager->Reboot();