[SETUPAPI]
authorEric Kohl <eric.kohl@reactos.org>
Wed, 16 Aug 2017 09:44:20 +0000 (09:44 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Wed, 16 Aug 2017 09:44:20 +0000 (09:44 +0000)
Implement CM_Create_Range_List and CM_Free_Range_List. Still WIP.

svn path=/trunk/; revision=75562

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

index 7510fff..fe5c839 100644 (file)
@@ -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.@]
  */
index 63d92d5..e05b799 100644 (file)
@@ -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)