* PROJECT: ReactOS kernel
* FILE: base/services/umpnpmgr/umpnpmgr.c
* PURPOSE: User-mode Plug and Play manager
- * PROGRAMMER: Eric Kohl
+ * PROGRAMMER: Eric Kohl (eric.kohl@reactos.org)
* Hervé Poussineau (hpoussin@reactos.org)
* Colin Finck (colin@reactos.org)
*/
return TRUE;
}
+ BytesWritten = sizeof(DWORD);
+ if (RegQueryValueExW(DeviceKey,
+ L"ConfigFlags",
+ NULL,
+ NULL,
+ (PBYTE)&Value,
+ &BytesWritten) == ERROR_SUCCESS)
+ {
+ if (Value & CONFIGFLAG_FAILEDINSTALL)
+ {
+ DPRINT("No need to install: %S\n", DeviceInstance);
+ RegCloseKey(DeviceKey);
+ return TRUE;
+ }
+ }
+
RegCloseKey(DeviceKey);
}
SWP_NOSIZE);
}
+static BOOL
+SetFailedInstall(
+ IN HDEVINFO DeviceInfoSet,
+ IN PSP_DEVINFO_DATA DevInfoData OPTIONAL,
+ IN BOOLEAN Set)
+{
+ DWORD dwType, dwSize, dwFlags = 0;
+
+ dwSize = sizeof(dwFlags);
+ if (!SetupDiGetDeviceRegistryProperty(DeviceInfoSet,
+ DevInfoData,
+ SPDRP_CONFIGFLAGS,
+ &dwType,
+ (PBYTE)&dwFlags,
+ dwSize,
+ &dwSize))
+ {
+ return FALSE;
+ }
+
+ if (Set)
+ dwFlags |= CONFIGFLAG_FAILEDINSTALL;
+ else
+ dwFlags &= ~CONFIGFLAG_FAILEDINSTALL;
+
+ if (!SetupDiSetDeviceRegistryProperty(DeviceInfoSet,
+ DevInfoData,
+ SPDRP_CONFIGFLAGS,
+ (PBYTE)&dwFlags,
+ dwSize))
+ {
+
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
static BOOL
CanDisableDevice(
IN DEVINST DevInst,
BM_SETCHECK,
(WPARAM)TRUE,
(LPARAM)0);
+
+ SetFailedInstall(DevInstData->hDevInfo,
+ &DevInstData->devInfoData,
+ TRUE);
break;
}
hThread = 0;
if (wParam == 0)
{
- /* Should we reboot? */
SP_DEVINSTALL_PARAMS installParams;
+
+ SetFailedInstall(DevInstData->hDevInfo,
+ &DevInstData->devInfoData,
+ FALSE);
+
+ /* Should we reboot? */
installParams.cbSize = sizeof(SP_DEVINSTALL_PARAMS);
if (SetupDiGetDeviceInstallParams(
DevInstData->hDevInfo,