PXENBUS_SUSPEND_CALLBACK SuspendCallbackLate;
XENBUS_UNPLUG_INTERFACE UnplugInterface;
+ BOOLEAN UnplugRequested;
PXENVIF_FRONTEND Frontend;
{
NTSTATUS status;
+ ASSERT3U(Pdo->UnplugRequested, !=, Make);
+ Pdo->UnplugRequested = Make;
+
status = XENBUS_UNPLUG(Acquire, &Pdo->UnplugInterface);
if (!NT_SUCCESS(status))
return;
if (Pdo->HasAlias)
goto fail1;
- PdoUnplugRequest(Pdo, TRUE);
-
if (DriverSafeMode())
goto fail2;
Pdo->HasAlias = TRUE;
+ PdoUnplugRequest(Pdo, TRUE);
+
status = STATUS_UNSUCCESSFUL;
goto fail9;
}
if (!NT_SUCCESS(status))
goto fail10;
+ PdoUnplugRequest(Pdo, TRUE);
+
__PdoSetDevicePnpState(Pdo, Started);
Irp->IoStatus.Status = STATUS_SUCCESS;
if (__PdoGetDevicePowerState(Pdo) != PowerDeviceD0)
goto done;
- PdoD0ToD3(Pdo);
-
PdoUnplugRequest(Pdo, FALSE);
+ PdoD0ToD3(Pdo);
+
done:
RtlZeroMemory(&Pdo->CurrentAddress, sizeof (ETHERNET_ADDRESS));
PDEVICE_OBJECT PhysicalDeviceObject = Dx->DeviceObject;
PXENVIF_FDO Fdo = __PdoGetFdo(Pdo);
+ ASSERT(!Pdo->UnplugRequested);
ASSERT3U(__PdoGetDevicePnpState(Pdo), ==, Deleted);
Pdo->HasAlias = FALSE;