Add a stub for ClientSideInstallW. umpnpmgr is supposed to run rundll32 in the context of the currently logged on user like this:
"rundll32.exe newdev.dll,ClientSideInstall \\.\pipe\PNP_Device_Install_Pipe_0.{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"
Modified: trunk/reactos/lib/newdev/newdev.c
Modified: trunk/reactos/lib/newdev/newdev.def

Modified: trunk/reactos/lib/newdev/newdev.c
--- trunk/reactos/lib/newdev/newdev.c	2005-11-19 09:29:20 UTC (rev 19341)
+++ trunk/reactos/lib/newdev/newdev.c	2005-11-19 13:27:27 UTC (rev 19342)
@@ -873,6 +873,12 @@
     DWORD config_flags;
     /*TCHAR buf[128];*/
 
+    if (!IsUserAdmin())
+    {
+        /* XP kills the process... */
+        ExitProcess(ERROR_ACCESS_DENIED);
+    }
+
     /* Clear devinst data */
     ZeroMemory(&DevInstData, sizeof(DEVINSTDATA));
     DevInstData.devInfoData.cbSize = 0; /* Tell if the devInfoData is valid */
@@ -1027,6 +1033,17 @@
 }
 
 BOOL WINAPI
+ClientSideInstallW(IN HWND hWndOwner,
+                   IN DWORD dwUnknownFlags,
+                   IN LPWSTR lpNamedPipeName)
+{
+    /* NOTE: pNamedPipeName is in the format:
+     *       "\\.\pipe\PNP_Device_Install_Pipe_0.{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"
+     */
+    return FALSE;
+}
+
+BOOL WINAPI
 DllMain(
         IN HINSTANCE hInstance,
         IN DWORD dwReason,
@@ -1036,6 +1053,8 @@
     {
         INITCOMMONCONTROLSEX InitControls;
 
+        DisableThreadLibraryCalls(hInstance);
+
         InitControls.dwSize = sizeof(INITCOMMONCONTROLSEX);
         InitControls.dwICC = ICC_PROGRESS_CLASS;
         InitCommonControlsEx(&InitControls);

Modified: trunk/reactos/lib/newdev/newdev.def
--- trunk/reactos/lib/newdev/newdev.def	2005-11-19 09:29:20 UTC (rev 19341)
+++ trunk/reactos/lib/newdev/newdev.def	2005-11-19 13:27:27 UTC (rev 19342)
@@ -1,6 +1,7 @@
 LIBRARY newdev.dll
 
 EXPORTS
+ClientSideInstallW@12
 DevInstallW@16
 ;InstallDevInst
 ;InstallDevInstEx