Relations->Objects,
sizeof (PDEVICE_OBJECT) * Count);
- __FdoAcquireMutex(Fdo);
-
// Remove any PDOs that do not appear in the device list
ListEntry = Fdo->List.Flink;
while (ListEntry != &Fdo->List) {
(VOID) FdoAddDevice(Fdo, PhysicalDeviceObject[Index]);
}
- __FdoReleaseMutex(Fdo);
-
__FdoSetEnumerated(Fdo);
__FdoFree(PhysicalDeviceObject);
LowerRelations = (PDEVICE_RELATIONS)Irp->IoStatus.Information;
+ __FdoAcquireMutex(Fdo);
+
if (LowerRelations->Count != 0)
FdoEnumerate(Fdo, LowerRelations);
goto fail3;
if (State == XENFILT_FILTER_DISABLED) {
- ASSERT3U(Count, ==, LowerRelations->Count);
+ PLIST_ENTRY ListEntry;
+
+ for (ListEntry = Fdo->List.Flink;
+ ListEntry != &Fdo->List;
+ ListEntry = ListEntry->Flink) {
+ PXENFILT_DX Dx = CONTAINING_RECORD(ListEntry, XENFILT_DX, ListEntry);
+ PXENFILT_PDO Pdo = Dx->Pdo;
+
+ ASSERT3U(Dx->Type, ==, PHYSICAL_DEVICE_OBJECT);
+
+ if (PdoGetDevicePnpState(Pdo) == Present)
+ PdoSetDevicePnpState(Pdo, Enumerated);
+ }
+
RtlCopyMemory(Relations, LowerRelations, Size);
Trace("%s: %d PDO(s)\n",
BusRelations);
}
+ __FdoReleaseMutex(Fdo);
+
ExFreePool(LowerRelations);
Irp->IoStatus.Information = (ULONG_PTR)Relations;