mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 08:25:03 +00:00
- CFGMGR32.DLL: Forward implemented functions to SETUPAPI.DLL.
- SETUPAPI.DLL: Use PNP_EnumerateSubKeys to implement CM_Enumerate_Classes_Ex. svn path=/trunk/; revision=17801
This commit is contained in:
parent
61420d12f3
commit
9e486c444b
2 changed files with 46 additions and 81 deletions
|
@ -41,8 +41,8 @@ CM_Connect_MachineW@8=SETUPAPI.CM_Connect_MachineW
|
|||
;CM_Create_DevNode_ExA
|
||||
;CM_Create_DevNode_ExW
|
||||
;CM_Create_Range_List
|
||||
;CM_Delete_Class_Key
|
||||
;CM_Delete_Class_Key_Ex
|
||||
CM_Delete_Class_Key@8=SETUPAPI.CM_Delete_Class_Key
|
||||
CM_Delete_Class_Key_Ex@12=SETUPAPI.CM_Delete_Class_Key_Ex
|
||||
;CM_Delete_DevNode_Key
|
||||
;CM_Delete_DevNode_Key_Ex
|
||||
;CM_Delete_Range
|
||||
|
@ -56,10 +56,10 @@ CM_Disconnect_Machine@4=SETUPAPI.CM_Disconnect_Machine
|
|||
;CM_Enable_DevNode_Ex
|
||||
CM_Enumerate_Classes@12=SETUPAPI.CM_Enumerate_Classes
|
||||
CM_Enumerate_Classes_Ex@16=SETUPAPI.CM_Enumerate_Classes_Ex
|
||||
;CM_Enumerate_EnumeratorsA
|
||||
;CM_Enumerate_EnumeratorsW
|
||||
;CM_Enumerate_Enumerators_ExA
|
||||
;CM_Enumerate_Enumerators_ExW
|
||||
CM_Enumerate_EnumeratorsA@16=SETUPAPI.CM_Enumerate_EnumeratorsA
|
||||
CM_Enumerate_EnumeratorsW@16=SETUPAPI.CM_Enumerate_EnumeratorsW
|
||||
CM_Enumerate_Enumerators_ExA@20=SETUPAPI.CM_Enumerate_Enumerators_ExA
|
||||
CM_Enumerate_Enumerators_ExW@20=SETUPAPI.CM_Enumerate_Enumerators_ExW
|
||||
;CM_Find_Range
|
||||
;CM_First_Range
|
||||
;CM_Free_Log_Conf
|
||||
|
@ -71,14 +71,14 @@ CM_Enumerate_Classes_Ex@16=SETUPAPI.CM_Enumerate_Classes_Ex
|
|||
;CM_Free_Res_Des_Handle
|
||||
CM_Get_Child@12=SETUPAPI.CM_Get_Child
|
||||
CM_Get_Child_Ex@16=SETUPAPI.CM_Get_ChildEx
|
||||
;CM_Get_Class_Key_NameA
|
||||
;CM_Get_Class_Key_NameW
|
||||
;CM_Get_Class_Key_Name_ExA
|
||||
;CM_Get_Class_Key_Name_ExW
|
||||
;CM_Get_Class_NameA
|
||||
;CM_Get_Class_NameW
|
||||
;CM_Get_Class_Name_ExA
|
||||
;CM_Get_Class_Name_ExW
|
||||
CM_Get_Class_Key_NameA@16=SETUPAPI.CM_Get_Class_Key_NameA
|
||||
CM_Get_Class_Key_NameW@16=SETUPAPI.CM_Get_Class_Key_NameW
|
||||
CM_Get_Class_Key_Name_ExA@20=SETUPAPI.CM_Get_Class_Key_Name_ExA
|
||||
CM_Get_Class_Key_Name_ExW@20=SETUPAPI.CM_Get_Class_Key_Name_ExW
|
||||
CM_Get_Class_NameA@16=SETUPAPI.CM_Get_Class_NameA
|
||||
CM_Get_Class_NameW@16=SETUPAPI.CM_Get_Class_NameW
|
||||
CM_Get_Class_Name_ExA@20=SETUPAPI.CM_Get_Class_Name_ExA
|
||||
CM_Get_Class_Name_ExW@20=SETUPAPI.CM_Get_Class_Name_ExW
|
||||
CM_Get_Depth@12=SETUPAPI.CM_Get_Depth
|
||||
CM_Get_Depth_Ex@16=SETUPAPI.CM_Get_Depth_Ex
|
||||
CM_Get_DevNode_Registry_PropertyA@24=SETUPAPI.CM_Get_DevNode_Registry_PropertyA
|
||||
|
@ -186,12 +186,12 @@ CM_Open_Class_Key_ExW@28=SETUPAPI.CM_Open_Class_Key_ExW
|
|||
;CM_Reset_Children_Marks_Ex
|
||||
;CM_Run_Detection
|
||||
;CM_Run_Detection_Ex
|
||||
;CM_Set_DevNode_Problem
|
||||
;CM_Set_DevNode_Problem_Ex
|
||||
;CM_Set_DevNode_Registry_PropertyA
|
||||
;CM_Set_DevNode_Registry_PropertyW
|
||||
;CM_Set_DevNode_Registry_Property_ExA
|
||||
;CM_Set_DevNode_Registry_Property_ExW
|
||||
CM_Set_DevNode_Problem@12=SETUPAPI.CM_Set_DevNode_Problem
|
||||
CM_Set_DevNode_Problem_Ex@16=SETUPAPI.CM_Set_DevNode_Problem_Ex
|
||||
CM_Set_DevNode_Registry_PropertyA@20=SETUPAPI.CM_Set_DevNode_Registry_PropertyA
|
||||
CM_Set_DevNode_Registry_PropertyW@20=SETUPAPI.CM_Set_DevNode_Registry_PropertyW
|
||||
CM_Set_DevNode_Registry_Property_ExA@24=SETUPAPI.CM_Set_DevNode_Registry_Property_ExA
|
||||
CM_Set_DevNode_Registry_Property_ExW@24=SETUPAPI.CM_Set_DevNode_Registry_Property_ExW
|
||||
;CM_Set_HW_Prof
|
||||
;CM_Set_HW_Prof_Ex
|
||||
;CM_Set_HW_Prof_FlagsA
|
||||
|
|
|
@ -226,46 +226,16 @@ CONFIGRET WINAPI CM_Enumerate_Classes(
|
|||
}
|
||||
|
||||
|
||||
static CONFIGRET GetCmCodeFromErrorCode(DWORD ErrorCode)
|
||||
{
|
||||
switch (ErrorCode)
|
||||
{
|
||||
case ERROR_SUCCESS:
|
||||
return CR_SUCCESS;
|
||||
|
||||
case ERROR_ACCESS_DENIED:
|
||||
return CR_ACCESS_DENIED;
|
||||
|
||||
case ERROR_INSUFFICIENT_BUFFER:
|
||||
return CR_BUFFER_SMALL;
|
||||
|
||||
case ERROR_INVALID_DATA:
|
||||
return CR_INVALID_DATA;
|
||||
|
||||
case ERROR_INVALID_PARAMETER:
|
||||
return CR_INVALID_DATA;
|
||||
|
||||
case ERROR_NO_MORE_ITEMS:
|
||||
return CR_NO_SUCH_VALUE;
|
||||
|
||||
case ERROR_NO_SYSTEM_RESOURCES:
|
||||
return CR_OUT_OF_MEMORY;
|
||||
|
||||
default:
|
||||
return CR_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* CM_Enumerate_Classes_Ex [SETUPAPI.@]
|
||||
*/
|
||||
CONFIGRET WINAPI CM_Enumerate_Classes_Ex(
|
||||
ULONG ulClassIndex, LPGUID ClassGuid, ULONG ulFlags, HMACHINE hMachine)
|
||||
{
|
||||
HKEY hRelativeKey, hKey;
|
||||
DWORD rc;
|
||||
WCHAR Buffer[MAX_GUID_STRING_LEN];
|
||||
WCHAR szBuffer[MAX_GUID_STRING_LEN];
|
||||
RPC_BINDING_HANDLE BindingHandle = NULL;
|
||||
CONFIGRET ret = CR_SUCCESS;
|
||||
ULONG ulLength = MAX_GUID_STRING_LEN;
|
||||
|
||||
TRACE("%lx %p %lx %p\n", ulClassIndex, ClassGuid, ulFlags, hMachine);
|
||||
|
||||
|
@ -277,39 +247,34 @@ CONFIGRET WINAPI CM_Enumerate_Classes_Ex(
|
|||
|
||||
if (hMachine != NULL)
|
||||
{
|
||||
FIXME("hMachine argument ignored\n");
|
||||
hRelativeKey = HKEY_LOCAL_MACHINE; /* FIXME: use here a field in hMachine */
|
||||
BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
|
||||
if (BindingHandle == NULL)
|
||||
return CR_FAILURE;
|
||||
}
|
||||
else
|
||||
hRelativeKey = HKEY_LOCAL_MACHINE;
|
||||
|
||||
rc = RegOpenKeyExW(
|
||||
hRelativeKey,
|
||||
ControlClass,
|
||||
0, /* options */
|
||||
KEY_ENUMERATE_SUB_KEYS,
|
||||
&hKey);
|
||||
if (rc != ERROR_SUCCESS)
|
||||
return GetCmCodeFromErrorCode(rc);
|
||||
|
||||
rc = RegEnumKeyW(
|
||||
hKey,
|
||||
ulClassIndex,
|
||||
Buffer,
|
||||
sizeof(Buffer) / sizeof(WCHAR));
|
||||
|
||||
RegCloseKey(hKey);
|
||||
|
||||
if (rc == ERROR_SUCCESS)
|
||||
{
|
||||
/* Remove the {} */
|
||||
Buffer[MAX_GUID_STRING_LEN - 2] = UNICODE_NULL;
|
||||
/* Convert the buffer to a GUID */
|
||||
if (UuidFromStringW(&Buffer[1], ClassGuid) != RPC_S_OK)
|
||||
if (!PnpGetLocalHandles(&BindingHandle, NULL))
|
||||
return CR_FAILURE;
|
||||
}
|
||||
|
||||
return GetCmCodeFromErrorCode(rc);
|
||||
ret = PNP_EnumerateSubKeys(BindingHandle,
|
||||
PNP_BRANCH_CLASS,
|
||||
ulClassIndex,
|
||||
szBuffer,
|
||||
MAX_GUID_STRING_LEN,
|
||||
&ulLength,
|
||||
ulFlags);
|
||||
if (ret == CR_SUCCESS)
|
||||
{
|
||||
/* Remove the {} */
|
||||
szBuffer[MAX_GUID_STRING_LEN - 2] = UNICODE_NULL;
|
||||
|
||||
/* Convert the buffer to a GUID */
|
||||
if (UuidFromStringW(&szBuffer[1], ClassGuid) != RPC_S_OK)
|
||||
return CR_FAILURE;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue