Author: ekohl Date: Sat Apr 1 08:07:39 2017 New Revision: 74259
URL: http://svn.reactos.org/svn/reactos?rev=74259&view=rev Log: [UMPNPMGR] Broadcast a WM_DEVICECHANGE message on device arrrival and removal. CORE-12977
Modified: trunk/reactos/base/services/umpnpmgr/CMakeLists.txt trunk/reactos/base/services/umpnpmgr/umpnpmgr.c
Modified: trunk/reactos/base/services/umpnpmgr/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/umpnpmgr/CMak... ============================================================================== --- trunk/reactos/base/services/umpnpmgr/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/base/services/umpnpmgr/CMakeLists.txt [iso-8859-1] Sat Apr 1 08:07:39 2017 @@ -12,5 +12,5 @@
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)
Modified: trunk/reactos/base/services/umpnpmgr/umpnpmgr.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/umpnpmgr/umpn... ============================================================================== --- trunk/reactos/base/services/umpnpmgr/umpnpmgr.c [iso-8859-1] (original) +++ trunk/reactos/base/services/umpnpmgr/umpnpmgr.c [iso-8859-1] Sat Apr 1 08:07:39 2017 @@ -37,6 +37,8 @@ #include <winbase.h> #include <winreg.h> #include <winsvc.h> +#include <winuser.h> +#include <dbt.h> #include <stdio.h> #include <cmfuncs.h> #include <rtlfuncs.h> @@ -3563,8 +3565,16 @@ } 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 @@ } 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)) {