Implement CM_Set_HW_Prof[_Ex].
authorEric Kohl <eric.kohl@reactos.org>
Sat, 16 Jan 2010 16:31:58 +0000 (16:31 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Sat, 16 Jan 2010 16:31:58 +0000 (16:31 +0000)
svn path=/trunk/; revision=45107

reactos/base/services/umpnpmgr/umpnpmgr.c
reactos/dll/win32/setupapi/cfgmgr.c
reactos/dll/win32/setupapi/setupapi.spec
reactos/include/ddk/cfgmgr32.h
reactos/include/reactos/idl/pnp.idl
reactos/include/reactos/wine/cfgmgr32.h

index 92972cc..7488400 100644 (file)
@@ -1809,7 +1809,9 @@ DWORD PNP_QueryResConfList(
 
 /* Function 55 */
 DWORD PNP_SetHwProf(
-    handle_t hBinding)
+    handle_t hBinding,
+    DWORD ulHardwareProfile,
+    DWORD ulFlags)
 {
     UNIMPLEMENTED;
     return CR_CALL_NOT_IMPLEMENTED;
index abd4bb1..ccff5e6 100644 (file)
@@ -3774,6 +3774,60 @@ CONFIGRET WINAPI CM_Set_DevNode_Registry_Property_ExW(
 }
 
 
+/***********************************************************************
+ * CM_Set_HW_Prof [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Set_HW_Prof(
+    ULONG ulHardwareProfile, ULONG ulFlags)
+{
+    TRACE("%lu %lu\n", ulHardwareProfile, ulFlags);
+    return CM_Set_HW_Prof_Ex(ulHardwareProfile, ulFlags, NULL);
+}
+
+
+/***********************************************************************
+ * CM_Set_HW_Prof_Ex [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Set_HW_Prof_Ex(
+    ULONG ulHardwareProfile, ULONG ulFlags, HMACHINE hMachine)
+{
+    RPC_BINDING_HANDLE BindingHandle = NULL;
+    CONFIGRET ret;
+
+    TRACE("%lu %lu %lx\n", ulHardwareProfile, ulFlags, hMachine);
+
+    if (!IsUserAdmin())
+        return CR_ACCESS_DENIED;
+
+    if (ulFlags != 0)
+        return CR_INVALID_FLAG;
+
+    if (hMachine != NULL)
+    {
+        BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
+        if (BindingHandle == NULL)
+            return CR_FAILURE;
+    }
+    else
+    {
+        if (!PnpGetLocalHandles(&BindingHandle, NULL))
+            return CR_FAILURE;
+    }
+
+    RpcTryExcept
+    {
+        ret = PNP_SetHwProf(BindingHandle, ulHardwareProfile, ulFlags);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        ret = RpcStatusToCmStatus(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return ret;
+}
+
+
 /***********************************************************************
  * CM_Set_HW_Prof_FlagsA [SETUPAPI.@]
  */
index 67df323..4351413 100644 (file)
 @ stdcall CM_Set_DevNode_Registry_PropertyW(long long ptr long long)
 @ stdcall CM_Set_DevNode_Registry_Property_ExA(long long ptr long long long)
 @ stdcall CM_Set_DevNode_Registry_Property_ExW(long long ptr long long long)
-@ stub CM_Set_HW_Prof
-@ stub CM_Set_HW_Prof_Ex
+@ stdcall CM_Set_HW_Prof(long long)
+@ stdcall CM_Set_HW_Prof_Ex(long long long)
 @ stdcall CM_Set_HW_Prof_FlagsA(str long long long)
 @ stdcall CM_Set_HW_Prof_FlagsW(wstr long long long)
 @ stdcall CM_Set_HW_Prof_Flags_ExA(str long long long long)
index 5413346..5ca47bd 100644 (file)
@@ -2117,8 +2117,20 @@ CM_Set_DevNode_Registry_Property_ExW(
 #define CM_Set_DevNode_Registry_Property_Ex CM_Set_DevNode_Registry_Property_ExA
 #endif /* UNICODE */
 
-/* FIXME: Obsolete CM_Set_HW_Prof */
-/* FIXME: Obsolete CM_Set_HW_Prof_Ex */
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_HW_Prof(
+  IN ULONG  ulHardwareProfile,
+  IN ULONG  ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Set_HW_Prof_Ex(
+  IN ULONG  ulHardwareProfile,
+  IN ULONG  ulFlags,
+  IN HMACHINE  hMachine);
 
 /* CM_Set_HW_Prof_Flags[_Ex].ulFlags constants */
 #define CM_SET_HW_PROF_FLAGS_UI_NOT_OK  (0x00000001)
index 5a8214e..44fd06a 100644 (file)
@@ -724,7 +724,9 @@ interface pnp
 
     /* Function 55 */
     DWORD PNP_SetHwProf(
-        [in] handle_t hBinding);
+        [in] handle_t hBinding,
+        [in] DWORD ulHardwareProfile,
+        [in] DWORD ulFlags);
 
     /* Function 56 */
     DWORD PNP_QueryArbitratorFreeData(
index fb7c1eb..7837f2a 100644 (file)
@@ -301,6 +301,8 @@ CONFIGRET WINAPI CM_Get_First_Log_Conf( PLOG_CONF, DEVINST, ULONG );
 CONFIGRET WINAPI CM_Get_First_Log_Conf_Ex( PLOG_CONF, DEVINST, ULONG, HMACHINE );
 CONFIGRET WINAPI CM_Get_Global_State( PULONG, ULONG );
 CONFIGRET WINAPI CM_Get_Global_State_Ex( PULONG, ULONG, HMACHINE );
+CONFIGRET WINAPI CM_Set_HW_Prof( ULONG, ULONG );
+CONFIGRET WINAPI CM_Set_HW_Prof_Ex( ULONG, ULONG, HMACHINE );
 CONFIGRET WINAPI CM_Get_HW_Prof_FlagsA( DEVINSTID_A, ULONG, PULONG, ULONG );
 CONFIGRET WINAPI CM_Get_HW_Prof_FlagsW( DEVINSTID_W, ULONG, PULONG, ULONG );
 #define     CM_Get_HW_Prof_Flags WINELIB_NAME_AW(CM_Get_HW_Prof_Flags)