https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f9160f7637f3998f751bee499a0735f2f537c585

commit f9160f7637f3998f751bee499a0735f2f537c585
Author:     Eric Kohl <[email protected]>
AuthorDate: Sun Feb 16 11:12:31 2020 +0100
Commit:     Eric Kohl <[email protected]>
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;
 }
 
 

Reply via email to