Module: wine Branch: master Commit: e56e4f97a4eab649b06cc4241ee0a9a4f968e45c URL: https://source.winehq.org/git/wine.git/?a=commit;h=e56e4f97a4eab649b06cc4241...
Author: Zebediah Figura zfigura@codeweavers.com Date: Fri Aug 20 19:01:24 2021 -0500
ntoskrnl: Dereference the device children in IoDeleteDevice().
Signed-off-by: Zebediah Figura zfigura@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntoskrnl.exe/ntoskrnl.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index 7f5ca846db2..fb3f9a23152 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -1628,9 +1628,17 @@ void WINAPI IoDeleteDevice( DEVICE_OBJECT *device ) { struct wine_device *wine_device = CONTAINING_RECORD(device, struct wine_device, device_obj); DEVICE_OBJECT **prev = &device->DriverObject->DeviceObject; + DEVICE_RELATIONS *children; + unsigned int i; + while (*prev && *prev != device) prev = &(*prev)->NextDevice; if (*prev) *prev = (*prev)->NextDevice; - ExFreePool( wine_device->children ); + if ((children = wine_device->children)) + { + for (i = 0; i < children->Count; ++i) + ObDereferenceObject( children->Objects[i] ); + ExFreePool( children ); + } ObDereferenceObject( device ); } }