[NEWDEV] Add InstallDevInstEx
[reactos.git] / dll / win32 / newdev / newdev.c
index fe88320..960f752 100644 (file)
@@ -807,17 +807,19 @@ cleanup:
 
 BOOL
 WINAPI
-InstallDevInst(
+InstallDevInstEx(
     IN HWND hWndParent,
     IN LPCWSTR InstanceId,
     IN BOOL bUpdate,
-    OUT LPDWORD lpReboot)
+    OUT LPDWORD lpReboot,
+    IN DWORD Unknown)
 {
     PDEVINSTDATA DevInstData = NULL;
     BOOL ret;
     BOOL retval = FALSE;
 
-    TRACE("InstllDevInst(%p, %s, %d, %p)\n", hWndParent, debugstr_w(InstanceId), bUpdate, lpReboot);
+    TRACE("InstllDevInstEx(%p, %s, %d, %p, %lx)\n",
+          hWndParent, debugstr_w(InstanceId), bUpdate, lpReboot, Unknown);
 
     DevInstData = HeapAlloc(GetProcessHeap(), 0, sizeof(DEVINSTDATA));
     if (!DevInstData)
@@ -916,6 +918,21 @@ cleanup:
 }
 
 
+/*
+ * @implemented
+ */
+BOOL
+WINAPI
+InstallDevInst(
+    IN HWND hWndParent,
+    IN LPCWSTR InstanceId,
+    IN BOOL bUpdate,
+    OUT LPDWORD lpReboot)
+{
+    return InstallDevInstEx(hWndParent, InstanceId, bUpdate, lpReboot, 0);
+}
+
+
 /*
 * @implemented
 */
@@ -933,6 +950,7 @@ ClientSideInstallW(
     HANDLE hPipe = INVALID_HANDLE_VALUE;
     PWSTR DeviceInstance = NULL;
     PWSTR InstallEventName = NULL;
+    HANDLE hInstallEvent;
 
     /* Open the pipe */
     hPipe = CreateFileW(lpNamedPipeName, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
@@ -983,6 +1001,21 @@ ClientSideInstallW(
     }
 
     ReturnValue = DevInstallW(NULL, NULL, DeviceInstance, ShowWizard ? SW_SHOWNOACTIVATE : SW_HIDE);
+    if(!ReturnValue)
+    {
+        ERR("DevInstallW failed with error %lu\n", GetLastError());
+        goto cleanup;
+    }
+
+    hInstallEvent = CreateEventW(NULL, TRUE, FALSE, InstallEventName);
+    if(!hInstallEvent)
+    {
+        TRACE("CreateEventW('%ls') failed with error %lu\n", InstallEventName, GetLastError());
+        goto cleanup;
+    }
+
+    SetEvent(hInstallEvent);
+    CloseHandle(hInstallEvent);
 
 cleanup:
     if(hPipe != INVALID_HANDLE_VALUE)