diff options
-rw-r--r-- | nt/shvos.c | 13 | ||||
-rw-r--r-- | shvvmx.c | 4 |
2 files changed, 13 insertions, 4 deletions
@@ -418,6 +418,17 @@ DriverEntry ( // // Load the hypervisor // - return ShvOsErrorToError(ShvLoad()); + status = ShvOsErrorToError(ShvLoad()); + + // + // If load of the hypervisor happened to fail, unregister previously registered + // power callback, otherwise we would get BSOD on shutdown. + // + if (!NT_SUCCESS(status)) + { + ExUnregisterCallback(g_PowerCallbackRegistration); + } + + return status; } @@ -361,12 +361,10 @@ ShvVmxSetupVmcsForVp ( CPU_BASED_ACTIVATE_SECONDARY_CONTROLS)); // - // If any interrupts were pending upon entering the hypervisor, acknowledge - // them when we're done. And make sure to enter us in x64 mode at all times + // Make sure to enter us in x64 mode at all times. // __vmx_vmwrite(VM_EXIT_CONTROLS, ShvUtilAdjustMsr(VpData->MsrData[15], - VM_EXIT_ACK_INTR_ON_EXIT | VM_EXIT_IA32E_MODE)); // |