Module: wine Branch: master Commit: 364df14842bc1267b2de16bdc1eece9d34d910e6 URL: https://source.winehq.org/git/wine.git/?a=commit;h=364df14842bc1267b2de16bdc...
Author: Zebediah Figura z.figura12@gmail.com Date: Wed Apr 14 09:39:58 2021 -0500
ntoskrnl: Forbid unloading a driver with running root PnP devices.
Signed-off-by: Zebediah Figura z.figura12@gmail.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntoskrnl.exe/ntoskrnl.c | 8 ++++++++ 1 file changed, 8 insertions(+)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index bb9f4bf5259..0580231d8e3 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -3842,6 +3842,7 @@ error: NTSTATUS WINAPI ZwUnloadDriver( const UNICODE_STRING *service_name ) { struct wine_rb_entry *entry; + struct wine_driver *driver; UNICODE_STRING drv_name;
TRACE( "(%s)\n", debugstr_us(service_name) ); @@ -3856,6 +3857,13 @@ NTSTATUS WINAPI ZwUnloadDriver( const UNICODE_STRING *service_name ) ERR( "failed to locate driver %s\n", debugstr_us(service_name) ); return STATUS_OBJECT_NAME_NOT_FOUND; } + driver = WINE_RB_ENTRY_VALUE( entry, struct wine_driver, entry ); + + if (!list_empty( &driver->root_pnp_devices )) + { + ERR( "cannot unload driver %s which still has running PnP devices\n", debugstr_us(service_name) ); + return STATUS_UNSUCCESSFUL; + }
unload_driver( entry, NULL );