diff --git a/reactos/ntoskrnl/io/iomgr/device.c b/reactos/ntoskrnl/io/iomgr/device.c index a0e19615056..c68d8306dbd 100644 --- a/reactos/ntoskrnl/io/iomgr/device.c +++ b/reactos/ntoskrnl/io/iomgr/device.c @@ -351,6 +351,11 @@ IopEditDeviceList(IN PDRIVER_OBJECT DriverObject, while (Previous->NextDevice != DeviceObject) { /* Not this one, keep moving */ + if (!Previous->NextDevice) + { + DPRINT1("Failed to remove PDO %p on driver %wZ (not found)\n", DeviceObject, &DeviceObject->DriverObject->DriverName); + return; + } Previous = Previous->NextDevice; } diff --git a/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c b/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c index ee036a78770..cf84e79e8a5 100644 --- a/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c +++ b/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c @@ -597,6 +597,7 @@ IopSendRemoveDevice(IN PDEVICE_OBJECT DeviceObject) &GUID_TARGET_DEVICE_REMOVE_COMPLETE, NULL, NULL); + ObDereferenceObject(DeviceObject); } static @@ -4431,7 +4432,6 @@ IopSendRemoveDeviceRelations(PDEVICE_RELATIONS DeviceRelations) for (i = 0; i < DeviceRelations->Count; i++) { IopSendRemoveDevice(DeviceRelations->Objects[i]); - ObDereferenceObject(DeviceRelations->Objects[i]); DeviceRelations->Objects[i] = NULL; }