#include "driver.h"
#include "names.h"
#include "mutex.h"
+#include "filters.h"
#include "dbg_print.h"
#include "assert.h"
#include "util.h"
{
PDEVICE_OBJECT DeviceObject;
PXENBUS_DX Dx;
+ ULONG References;
DeviceObject = FdoGetDeviceObject(Fdo);
Dx = (PXENBUS_DX)DeviceObject->DeviceExtension;
ASSERT3U(Dx->Type, ==, FUNCTION_DEVICE_OBJECT);
InsertTailList(&Driver.List, &Dx->ListEntry);
- Driver.References++;
+ References = Driver.References++;
+
+ if (References == 1)
+ FiltersInstall();
}
VOID
{
PDEVICE_OBJECT DeviceObject;
PXENBUS_DX Dx;
+ ULONG References;
DeviceObject = FdoGetDeviceObject(Fdo);
Dx = (PXENBUS_DX)DeviceObject->DeviceExtension;
RemoveEntryList(&Dx->ListEntry);
ASSERT3U(Driver.References, !=, 0);
- --Driver.References;
+ References = --Driver.References;
+
+ if (References == 1)
+ FiltersUninstall();
}
DRIVER_UNLOAD DriverUnload;
#include "driver.h"
#include "range_set.h"
#include "unplug.h"
-#include "filters.h"
#include "dbg_print.h"
#include "assert.h"
#include "util.h"
goto fail8;
if (Fdo->PvdeviceInterface.Interface.Context == NULL) {
- (VOID) FiltersInstall();
DriverRequestReboot();
goto done;
}
FdoClearActive(Fdo);
}
- (VOID) FiltersUninstall();
-
RtlZeroMemory(&Fdo->PvdeviceInterface,
sizeof (XENFILT_PVDEVICE_INTERFACE));