https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f9160f7637f3998f751be…
commit f9160f7637f3998f751bee499a0735f2f537c585
Author: Eric Kohl <eric.kohl(a)reactos.org>
AuthorDate: Sun Feb 16 11:12:31 2020 +0100
Commit: Eric Kohl <eric.kohl(a)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;
}