diff --git a/reactos/base/services/umpnpmgr/umpnpmgr.c b/reactos/base/services/umpnpmgr/umpnpmgr.c index 6b4b4b72fd0..2d4603cba6c 100644 --- a/reactos/base/services/umpnpmgr/umpnpmgr.c +++ b/reactos/base/services/umpnpmgr/umpnpmgr.c @@ -1097,10 +1097,10 @@ DWORD PNP_DeviceInstanceAction( LPWSTR pszDeviceInstance2) { CONFIGRET ret = CR_SUCCESS; + NTSTATUS Status; UNREFERENCED_PARAMETER(hBinding); UNREFERENCED_PARAMETER(ulMinorAction); - UNREFERENCED_PARAMETER(pszDeviceInstance1); UNREFERENCED_PARAMETER(pszDeviceInstance2); DPRINT("PNP_DeviceInstanceAction() called\n"); @@ -1114,10 +1114,15 @@ DWORD PNP_DeviceInstanceAction( break; case PNP_DEVINST_ENABLE: + { + PLUGPLAY_CONTROL_RESET_DEVICE_DATA ResetDeviceData; DPRINT("Enable device instance\n"); - /* FIXME */ - ret = CR_CALL_NOT_IMPLEMENTED; + RtlInitUnicodeString(&ResetDeviceData.DeviceInstance, pszDeviceInstance1); + Status = NtPlugPlayControl(PlugPlayControlResetDevice, &ResetDeviceData, sizeof(PLUGPLAY_CONTROL_RESET_DEVICE_DATA)); + if (!NT_SUCCESS(Status)) + ret = NtStatusToCrError(Status); break; + } case PNP_DEVINST_REENUMERATE: DPRINT("Reenumerate device instance\n"); diff --git a/reactos/dll/win32/setupapi/devinst.c b/reactos/dll/win32/setupapi/devinst.c index b9c8cdd2194..0e4512ec484 100644 --- a/reactos/dll/win32/setupapi/devinst.c +++ b/reactos/dll/win32/setupapi/devinst.c @@ -4642,21 +4642,18 @@ ResetDevice( IN PSP_DEVINFO_DATA DeviceInfoData) { #ifndef __WINESRC__ - PLUGPLAY_CONTROL_RESET_DEVICE_DATA ResetDeviceData; + struct DeviceInfoSet *set = (struct DeviceInfoSet *)DeviceInfoSet; struct DeviceInfo *deviceInfo = (struct DeviceInfo *)DeviceInfoData->Reserved; - NTSTATUS Status; + CONFIGRET cr; - if (((struct DeviceInfoSet *)DeviceInfoSet)->HKLM != HKEY_LOCAL_MACHINE) + cr = CM_Enable_DevNode_Ex(deviceInfo->dnDevInst, 0, set->hMachine); + if (cr != CR_SUCCESS) { - /* At the moment, I only know how to start local devices */ - SetLastError(ERROR_INVALID_COMPUTERNAME); + SetLastError(GetErrorCodeFromCrCode(cr)); return FALSE; } - RtlInitUnicodeString(&ResetDeviceData.DeviceInstance, deviceInfo->instanceId); - Status = NtPlugPlayControl(PlugPlayControlResetDevice, &ResetDeviceData, sizeof(PLUGPLAY_CONTROL_RESET_DEVICE_DATA)); - SetLastError(RtlNtStatusToDosError(Status)); - return NT_SUCCESS(Status); + return TRUE; #else FIXME("Stub: ResetDevice(%p %p)\n", DeviceInfoSet, DeviceInfoData); return TRUE;