From 15a480bb44c847aa00c2af15a5f533d72939a3c0 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sat, 1 Apr 2017 08:07:39 +0000 Subject: [PATCH] [UMPNPMGR] Broadcast a WM_DEVICECHANGE message on device arrrival and removal. CORE-12977 svn path=/trunk/; revision=74259 --- reactos/base/services/umpnpmgr/CMakeLists.txt | 2 +- reactos/base/services/umpnpmgr/umpnpmgr.c | 30 ++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/reactos/base/services/umpnpmgr/CMakeLists.txt b/reactos/base/services/umpnpmgr/CMakeLists.txt index 14872c63159..c361e5ef23c 100644 --- a/reactos/base/services/umpnpmgr/CMakeLists.txt +++ b/reactos/base/services/umpnpmgr/CMakeLists.txt @@ -12,5 +12,5 @@ add_library(umpnpmgr SHARED target_link_libraries(umpnpmgr wdmguid ${PSEH_LIB}) set_module_type(umpnpmgr win32dll UNICODE) -add_importlibs(umpnpmgr advapi32 rpcrt4 userenv shlwapi msvcrt kernel32 ntdll) +add_importlibs(umpnpmgr advapi32 rpcrt4 userenv shlwapi msvcrt user32 kernel32 ntdll) add_cd_file(TARGET umpnpmgr DESTINATION reactos/system32 FOR all) diff --git a/reactos/base/services/umpnpmgr/umpnpmgr.c b/reactos/base/services/umpnpmgr/umpnpmgr.c index c46e7056aee..f2cc8b99d3f 100644 --- a/reactos/base/services/umpnpmgr/umpnpmgr.c +++ b/reactos/base/services/umpnpmgr/umpnpmgr.c @@ -37,6 +37,8 @@ #include #include #include +#include +#include #include #include #include @@ -3563,8 +3565,16 @@ PnpEventThread(LPVOID lpParameter) } else if (UuidEqual(&PnpEvent->EventGuid, (UUID*)&GUID_DEVICE_ARRIVAL, &RpcStatus)) { + DWORD dwRecipient; + DPRINT("Device arrival: %S\n", PnpEvent->TargetDevice.DeviceIds); - /* FIXME: ? */ + + dwRecipient = BSM_ALLDESKTOPS | BSM_APPLICATIONS; + BroadcastSystemMessageW(BSF_POSTMESSAGE, + &dwRecipient, + WM_DEVICECHANGE, + DBT_DEVNODES_CHANGED, + 0); } else if (UuidEqual(&PnpEvent->EventGuid, (UUID*)&GUID_DEVICE_EJECT_VETOED, &RpcStatus)) { @@ -3576,11 +3586,29 @@ PnpEventThread(LPVOID lpParameter) } else if (UuidEqual(&PnpEvent->EventGuid, (UUID*)&GUID_DEVICE_SAFE_REMOVAL, &RpcStatus)) { + DWORD dwRecipient; + DPRINT1("Safe removal: %S\n", PnpEvent->TargetDevice.DeviceIds); + + dwRecipient = BSM_ALLDESKTOPS | BSM_APPLICATIONS; + BroadcastSystemMessageW(BSF_POSTMESSAGE, + &dwRecipient, + WM_DEVICECHANGE, + DBT_DEVNODES_CHANGED, + 0); } else if (UuidEqual(&PnpEvent->EventGuid, (UUID*)&GUID_DEVICE_SURPRISE_REMOVAL, &RpcStatus)) { + DWORD dwRecipient; + DPRINT1("Surprise removal: %S\n", PnpEvent->TargetDevice.DeviceIds); + + dwRecipient = BSM_ALLDESKTOPS | BSM_APPLICATIONS; + BroadcastSystemMessageW(BSF_POSTMESSAGE, + &dwRecipient, + WM_DEVICECHANGE, + DBT_DEVNODES_CHANGED, + 0); } else if (UuidEqual(&PnpEvent->EventGuid, (UUID*)&GUID_DEVICE_REMOVAL_VETOED, &RpcStatus)) {