diff --git a/reactos/dll/win32/setupapi/cfgmgr.c b/reactos/dll/win32/setupapi/cfgmgr.c index 7510fff8b97..fe5c8391166 100644 --- a/reactos/dll/win32/setupapi/cfgmgr.c +++ b/reactos/dll/win32/setupapi/cfgmgr.c @@ -69,6 +69,22 @@ typedef struct _NOTIFY_DATA #define NOTIFY_MAGIC 0x44556677 +typedef struct _INTERNAL_RANGE_ELEMENT +{ + struct _INTERNAL_RANGE_ELEMENT *Next; + ULONG ulDummy; +} INTERNAL_RANGE_ELEMENT, *PINTERNAL_RANGE_ELEMENT; + +typedef struct _INTERNAL_RANGE_LIST +{ + ULONG ulMagic; + PINTERNAL_RANGE_ELEMENT Current; + PINTERNAL_RANGE_ELEMENT First; +} INTERNAL_RANGE_LIST, *PINTERNAL_RANGE_LIST; + +#define RANGE_LIST_MAGIC 0x33445566 + + static BOOL GuidToString(LPGUID Guid, LPWSTR String) { LPWSTR lpString; @@ -910,6 +926,39 @@ CONFIGRET WINAPI CM_Create_DevNode_ExW( } +/*********************************************************************** + * CM_Create_Range_List [SETUPAPI.@] + */ +CONFIGRET +WINAPI +CM_Create_Range_List( + _Out_ PRANGE_LIST prlh, + _In_ ULONG ulFlags) +{ + PINTERNAL_RANGE_LIST pRangeList = NULL; + + FIXME("CM_Create_Range_List(%p %lx)\n", prlh, ulFlags); + + if (ulFlags != 0) + return CR_INVALID_FLAG; + + if (prlh == NULL) + return CR_INVALID_POINTER; + + pRangeList = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(INTERNAL_RANGE_LIST)); + if (pRangeList == NULL) + return CR_OUT_OF_MEMORY; + + pRangeList->ulMagic = RANGE_LIST_MAGIC; + + // TODO: More initialization + + *prlh = (RANGE_LIST)pRangeList; + + return CR_SUCCESS; +} + + /*********************************************************************** * CM_Delete_Class_Key [SETUPAPI.@] */ @@ -1451,6 +1500,35 @@ CONFIGRET WINAPI CM_Free_Log_Conf_Handle( } +/*********************************************************************** + * CM_Free_Range_List [SETUPAPI.@] + */ +CONFIGRET +WINAPI +CM_Free_Range_List( + _In_ RANGE_LIST RangeList, + _In_ ULONG ulFlags) +{ + PINTERNAL_RANGE_LIST pRangeList; + + FIXME("CM_Free_Range_List(%p %lx)\n", RangeList, ulFlags); + + pRangeList = (PINTERNAL_RANGE_LIST)RangeList; + + if (pRangeList == NULL || pRangeList->ulMagic != RANGE_LIST_MAGIC) + return CR_INVALID_RANGE_LIST; + + if (ulFlags != 0) + return CR_INVALID_FLAG; + + // TODO: Free the list of ranges + + HeapFree(GetProcessHeap(), 0, pRangeList); + + return CR_SUCCESS; +} + + /*********************************************************************** * CM_Free_Res_Des [SETUPAPI.@] */ diff --git a/reactos/dll/win32/setupapi/setupapi.spec b/reactos/dll/win32/setupapi/setupapi.spec index 63d92d5b923..e05b7994f50 100644 --- a/reactos/dll/win32/setupapi/setupapi.spec +++ b/reactos/dll/win32/setupapi/setupapi.spec @@ -22,7 +22,7 @@ @ stdcall CM_Create_DevNodeW(ptr wstr long long) @ stdcall CM_Create_DevNode_ExA(ptr str long long long) @ stdcall CM_Create_DevNode_ExW(ptr wstr long long long) -@ stub CM_Create_Range_List +@ stdcall CM_Create_Range_List(ptr long) @ stdcall CM_Delete_Class_Key(ptr long) @ stdcall CM_Delete_Class_Key_Ex(ptr long long) @ stdcall CM_Delete_DevNode_Key(long long long) @@ -47,7 +47,7 @@ @ stdcall CM_Free_Log_Conf(ptr long) @ stdcall CM_Free_Log_Conf_Ex(ptr long ptr) @ stdcall CM_Free_Log_Conf_Handle(ptr) -@ stub CM_Free_Range_List +@ stdcall CM_Free_Range_List(ptr long) @ stdcall CM_Free_Res_Des(ptr ptr long) @ stdcall CM_Free_Res_Des_Ex(ptr ptr long long) @ stdcall CM_Free_Res_Des_Handle(ptr)