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/CMa…
==============================================================================
--- 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/ump…
==============================================================================
--- 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))
{