[SETUPAPI]
authorEric Kohl <eric.kohl@reactos.org>
Wed, 16 Aug 2017 11:45:21 +0000 (11:45 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Wed, 16 Aug 2017 11:45:21 +0000 (11:45 +0000)
- Implement CMP_GetBlockedDriverInfo.
- Make sure that CMP_GetServerSideDeviceInstallFlags and CMP_WaitServicesAvailable can be called on local and remote machines.

svn path=/trunk/; revision=75565

reactos/dll/win32/setupapi/cfgmgr.c
reactos/dll/win32/setupapi/setupapi.spec

index fe5c839..fdc45a7 100644 (file)
@@ -164,6 +164,56 @@ GetRegistryPropertyType(
 }
 
 
+/***********************************************************************
+ * CMP_GetBlockedDriverInfo [SETUPAPI.@]
+ */
+CONFIGRET
+WINAPI
+CMP_GetBlockedDriverInfo(
+    _Out_opt_ LPWSTR pszNames,
+    _Inout_ PULONG pulLength,
+    _In_ ULONG ulFlags,
+    _In_opt_ HMACHINE hMachine)
+{
+    RPC_BINDING_HANDLE BindingHandle = NULL;
+    ULONG ulTransferLength;
+    CONFIGRET ret;
+
+    TRACE("CMP_GetBlockedDriverInfo(%p %p %lx %p)\n",
+          pszNames, pulLength, ulFlags, hMachine);
+
+    if (hMachine != NULL)
+    {
+        BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
+        if (BindingHandle == NULL)
+            return CR_FAILURE;
+    }
+    else
+    {
+        if (!PnpGetLocalHandles(&BindingHandle, NULL))
+            return CR_FAILURE;
+    }
+
+    ulTransferLength = *pulLength;
+
+    RpcTryExcept
+    {
+        ret = PNP_GetBlockedDriverInfo(BindingHandle,
+                                       (PBYTE)pszNames,
+                                       &ulTransferLength,
+                                       pulLength,
+                                       ulFlags);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        ret = RpcStatusToCmStatus(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return ret;
+}
+
+
 /***********************************************************************
  * CMP_GetServerSideDeviceInstallFlags [SETUPAPI.@]
  */
@@ -172,7 +222,7 @@ WINAPI
 CMP_GetServerSideDeviceInstallFlags(
     _Out_ PULONG pulSSDIFlags,
     _In_ ULONG ulFlags,
-    _In_ HMACHINE hMachine)
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret;
@@ -444,7 +494,7 @@ CMP_WaitNoPendingInstallEvents(
 CONFIGRET
 WINAPI
 CMP_WaitServicesAvailable(
-    _In_ HMACHINE hMachine)
+    _In_opt_ HMACHINE hMachine)
 {
     RPC_BINDING_HANDLE BindingHandle = NULL;
     CONFIGRET ret = CR_SUCCESS;
@@ -452,8 +502,17 @@ CMP_WaitServicesAvailable(
 
     TRACE("CMP_WaitServicesAvailable(%p)\n", hMachine);
 
-    if (!PnpGetLocalHandles(&BindingHandle, NULL))
-        return CR_FAILURE;
+    if (hMachine != NULL)
+    {
+        BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
+        if (BindingHandle == NULL)
+            return CR_FAILURE;
+    }
+    else
+    {
+        if (!PnpGetLocalHandles(&BindingHandle, NULL))
+            return CR_FAILURE;
+    }
 
     RpcTryExcept
     {
index e05b799..4377a15 100644 (file)
@@ -1,5 +1,5 @@
 # Functions exported by Win2003 SP1
-@ stub CMP_GetBlockedDriverInfo
+@ stdcall CMP_GetBlockedDriverInfo(wstr ptr long ptr)
 @ stdcall CMP_GetServerSideDeviceInstallFlags(ptr long ptr)
 @ stdcall CMP_Init_Detection(long)
 @ stdcall CMP_RegisterNotification(ptr ptr long ptr)