Handle more DIF codes in SetupDiCallClassInstaller. The list should now be complete
Modified: trunk/reactos/lib/setupapi/devinst.c
Modified: trunk/reactos/lib/setupapi/setupapi.spec
Modified: trunk/reactos/lib/setupapi/stubs.c

Modified: trunk/reactos/lib/setupapi/devinst.c
--- trunk/reactos/lib/setupapi/devinst.c	2005-12-27 11:39:43 UTC (rev 20369)
+++ trunk/reactos/lib/setupapi/devinst.c	2005-12-27 15:19:45 UTC (rev 20370)
@@ -3631,6 +3631,14 @@
        return GetLastError();
 }
 
+static BOOL WINAPI
+IntSetupDiRegisterDeviceInfo(
+    IN HDEVINFO DeviceInfoSet,
+    IN OUT PSP_DEVINFO_DATA DeviceInfoData)
+{
+    return SetupDiRegisterDeviceInfo(DeviceInfoSet, DeviceInfoData, 0, NULL, NULL, NULL);
+}
+
 /***********************************************************************
  *		SetupDiCallClassInstaller (SETUPAPI.@)
  */
@@ -3667,9 +3675,15 @@
             case DIF_ADDPROPERTYPAGE_ADVANCED:
                 CanHandle = CLASS_COINSTALLER | DEVICE_COINSTALLER | CLASS_INSTALLER;
                 break;
+            case DIF_ADDREMOTEPROPERTYPAGE_ADVANCED:
+                CanHandle = CLASS_COINSTALLER | DEVICE_COINSTALLER | CLASS_INSTALLER;
+                break;
             case DIF_ALLOW_INSTALL:
                 CanHandle = CLASS_COINSTALLER | CLASS_INSTALLER;
                 break;
+            case DIF_DETECT:
+                CanHandle = CLASS_COINSTALLER | CLASS_INSTALLER;
+                break;
             case DIF_DESTROYPRIVATEDATA:
                 CanHandle = CLASS_INSTALLER;
                 break;
@@ -3694,6 +3708,15 @@
             case DIF_NEWDEVICEWIZARD_PREANALYZE:
                 CanHandle = CLASS_COINSTALLER | CLASS_INSTALLER;
                 break;
+            case DIF_NEWDEVICEWIZARD_PRESELECT:
+                CanHandle = CLASS_COINSTALLER | CLASS_INSTALLER;
+                break;
+            case DIF_NEWDEVICEWIZARD_SELECT:
+                CanHandle = CLASS_COINSTALLER | CLASS_INSTALLER;
+                break;
+            case DIF_POWERMESSAGEWAKE:
+                CanHandle = CLASS_COINSTALLER | DEVICE_COINSTALLER | CLASS_INSTALLER;
+                break;
             case DIF_PROPERTYCHANGE:
                 CanHandle = CLASS_COINSTALLER | DEVICE_COINSTALLER | CLASS_INSTALLER;
                 DefaultHandler = SetupDiChangeState;
@@ -3702,10 +3725,29 @@
                 CanHandle = CLASS_COINSTALLER | CLASS_INSTALLER;
                 DefaultHandler = SetupDiRegisterCoDeviceInstallers;
                 break;
+            case DIF_REGISTERDEVICE:
+                CanHandle = CLASS_COINSTALLER | CLASS_INSTALLER;
+                DefaultHandler = IntSetupDiRegisterDeviceInfo;
+                break;
+            case DIF_REMOVE:
+                CanHandle = CLASS_COINSTALLER | DEVICE_COINSTALLER | CLASS_INSTALLER;
+                DefaultHandler = SetupDiRemoveDevice;
+                break;
             case DIF_SELECTBESTCOMPATDRV:
                 CanHandle = CLASS_COINSTALLER | CLASS_INSTALLER;
                 DefaultHandler = SetupDiSelectBestCompatDrv;
                 break;
+            case DIF_SELECTDEVICE:
+                CanHandle = CLASS_COINSTALLER | CLASS_INSTALLER;
+                DefaultHandler = SetupDiSelectBestCompatDrv;
+                break;
+            case DIF_TROUBLESHOOTER:
+                CanHandle = CLASS_COINSTALLER | DEVICE_COINSTALLER | CLASS_INSTALLER;
+                break;
+            case DIF_UNREMOVE:
+                CanHandle = CLASS_COINSTALLER | DEVICE_COINSTALLER | CLASS_INSTALLER;
+                DefaultHandler = SetupDiUnremoveDevice;
+                break;
             default:
                 ERR("Install function %u not supported\n", InstallFunction);
                 SetLastError(ERROR_NOT_SUPPORTED);

Modified: trunk/reactos/lib/setupapi/setupapi.spec
--- trunk/reactos/lib/setupapi/setupapi.spec	2005-12-27 11:39:43 UTC (rev 20369)
+++ trunk/reactos/lib/setupapi/setupapi.spec	2005-12-27 15:19:45 UTC (rev 20370)
@@ -368,8 +368,8 @@
 @ stub SetupDiOpenDeviceInterfaceRegKey
 @ stdcall SetupDiOpenDeviceInterfaceW(ptr wstr long ptr)
 @ stdcall SetupDiRegisterCoDeviceInstallers(ptr ptr)
-@ stub SetupDiRegisterDeviceInfo
-@ stub SetupDiRemoveDevice
+@ stdcall SetupDiRegisterDeviceInfo(ptr ptr long ptr ptr ptr)
+@ stdcall SetupDiRemoveDevice(ptr ptr)
 @ stub SetupDiRemoveDeviceInterface
 @ stdcall SetupDiSelectBestCompatDrv(ptr ptr)
 @ stub SetupDiSelectDevice
@@ -385,7 +385,7 @@
 @ stdcall SetupDiSetSelectedDevice(ptr ptr)
 @ stdcall SetupDiSetSelectedDriverA(ptr ptr ptr)
 @ stdcall SetupDiSetSelectedDriverW(ptr ptr ptr)
-@ stub SetupDiUnremoveDevice
+@ stdcall SetupDiUnremoveDevice(ptr ptr)
 @ stub SetupDuplicateDiskSpaceListA
 @ stub SetupDuplicateDiskSpaceListW
 @ stdcall SetupFindFirstLineA(long str str ptr)

Modified: trunk/reactos/lib/setupapi/stubs.c
--- trunk/reactos/lib/setupapi/stubs.c	2005-12-27 11:39:43 UTC (rev 20369)
+++ trunk/reactos/lib/setupapi/stubs.c	2005-12-27 15:19:45 UTC (rev 20370)
@@ -178,3 +178,49 @@
     return TRUE;
 }
 
+
+/***********************************************************************
+ *		SetupDiRegisterDeviceInfo(SETUPAPI.@)
+ */
+BOOL WINAPI
+SetupDiRegisterDeviceInfo(
+    IN HDEVINFO DeviceInfoSet,
+    IN PSP_DEVINFO_DATA DeviceInfoData,
+    IN DWORD Flags,
+    IN PSP_DETSIG_CMPPROC CompareProc OPTIONAL,
+    IN PVOID CompareContext OPTIONAL,
+    OUT PSP_DEVINFO_DATA DupDeviceInfoData OPTIONAL)
+{
+    FIXME ("Stub %p %p 0x%lx %p %p %p\n", DeviceInfoSet, DeviceInfoData,
+        Flags, CompareProc, CompareContext, DupDeviceInfoData);
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return FALSE;
+}
+
+
+/***********************************************************************
+ *		SetupDiRemoveDevice(SETUPAPI.@)
+ */
+BOOL WINAPI
+SetupDiRemoveDevice(
+    IN HDEVINFO DeviceInfoSet,
+    IN PSP_DEVINFO_DATA DeviceInfoData)
+{
+    FIXME ("Stub %p %p\n", DeviceInfoSet, DeviceInfoData);
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return FALSE;
+}
+
+
+/***********************************************************************
+ *		SetupDiUnremoveDevice(SETUPAPI.@)
+ */
+BOOL WINAPI
+SetupDiUnremoveDevice(
+    IN HDEVINFO DeviceInfoSet,
+    IN PSP_DEVINFO_DATA DeviceInfoData)
+{
+    FIXME ("Stub %p %p\n", DeviceInfoSet, DeviceInfoData);
+    SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+    return FALSE;
+}