https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f9160f7637f3998f751bee...
commit f9160f7637f3998f751bee499a0735f2f537c585 Author: Eric Kohl eric.kohl@reactos.org AuthorDate: Sun Feb 16 11:12:31 2020 +0100 Commit: Eric Kohl eric.kohl@reactos.org CommitDate: Sun Feb 16 11:13:10 2020 +0100
[UMPNPMGR] Implement PNP_RegisterDriver() --- base/services/umpnpmgr/rpcserver.c | 44 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-)
diff --git a/base/services/umpnpmgr/rpcserver.c b/base/services/umpnpmgr/rpcserver.c index b12cbd19cdf..edb534926b3 100644 --- a/base/services/umpnpmgr/rpcserver.c +++ b/base/services/umpnpmgr/rpcserver.c @@ -226,6 +226,36 @@ GetDeviceStatus( }
+static +CONFIGRET +SetDeviceStatus( + _In_ LPWSTR pDeviceID, + _In_ DWORD ulStatus, + _In_ DWORD ulProblem) +{ + PLUGPLAY_CONTROL_STATUS_DATA PlugPlayData; + CONFIGRET ret = CR_SUCCESS; + NTSTATUS Status; + + DPRINT1("SetDeviceStatus(%S 0x%lx 0x%lx)\n", + pDeviceID, ulStatus, ulProblem); + + RtlInitUnicodeString(&PlugPlayData.DeviceInstance, + pDeviceID); + PlugPlayData.Operation = 1; /* Set status */ + PlugPlayData.DeviceStatus = ulStatus; + PlugPlayData.DeviceProblem = ulProblem; + + Status = NtPlugPlayControl(PlugPlayControlDeviceStatus, + (PVOID)&PlugPlayData, + sizeof(PLUGPLAY_CONTROL_STATUS_DATA)); + if (!NT_SUCCESS(Status)) + ret = NtStatusToCrError(Status); + + return ret; +} + + static BOOL IsValidDeviceInstanceID( @@ -3052,8 +3082,18 @@ PNP_RegisterDriver( LPWSTR pszDeviceID, DWORD ulFlags) { - UNIMPLEMENTED; - return CR_CALL_NOT_IMPLEMENTED; + DPRINT("PNP_RegisterDriver(%p %S 0x%lx)\n", + hBinding, pszDeviceID, ulFlags); + + if (ulFlags & ~CM_REGISTER_DEVICE_DRIVER_BITS) + return CR_INVALID_FLAG; + + if (!IsValidDeviceInstanceID(pszDeviceID)) + return CR_INVALID_DEVINST; + + SetDeviceStatus(pszDeviceID, 0, 0); + + return CR_SUCCESS; }