mirror of
https://github.com/reactos/reactos.git
synced 2025-08-04 18:26:04 +00:00
[SETUPAPI] Implement CM_Next_Range()
This commit is contained in:
parent
0bc8e2a5bb
commit
e88a6b2053
1 changed files with 44 additions and 1 deletions
|
@ -72,6 +72,7 @@ typedef struct _NOTIFY_DATA
|
||||||
typedef struct _INTERNAL_RANGE
|
typedef struct _INTERNAL_RANGE
|
||||||
{
|
{
|
||||||
LIST_ENTRY ListEntry;
|
LIST_ENTRY ListEntry;
|
||||||
|
struct _INTERNAL_RANGE_LIST *pRangeList;
|
||||||
DWORDLONG ullStart;
|
DWORDLONG ullStart;
|
||||||
DWORDLONG ullEnd;
|
DWORDLONG ullEnd;
|
||||||
} INTERNAL_RANGE, *PINTERNAL_RANGE;
|
} INTERNAL_RANGE, *PINTERNAL_RANGE;
|
||||||
|
@ -1065,6 +1066,7 @@ CM_Add_Range(
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pRange->pRangeList = pRangeList;
|
||||||
pRange->ullStart = ullStartValue;
|
pRange->ullStart = ullStartValue;
|
||||||
pRange->ullEnd = ullEndValue;
|
pRange->ullEnd = ullEndValue;
|
||||||
|
|
||||||
|
@ -5900,10 +5902,51 @@ CM_Next_Range(
|
||||||
_Out_ PDWORDLONG pullEnd,
|
_Out_ PDWORDLONG pullEnd,
|
||||||
_In_ ULONG ulFlags)
|
_In_ ULONG ulFlags)
|
||||||
{
|
{
|
||||||
|
PINTERNAL_RANGE_LIST pRangeList;
|
||||||
|
PINTERNAL_RANGE pRange;
|
||||||
|
PLIST_ENTRY ListEntry;
|
||||||
|
CONFIGRET ret = CR_SUCCESS;
|
||||||
|
|
||||||
FIXME("CM_Next_Range(%p %p %p %lx)\n",
|
FIXME("CM_Next_Range(%p %p %p %lx)\n",
|
||||||
preElement, pullStart, pullEnd, ulFlags);
|
preElement, pullStart, pullEnd, ulFlags);
|
||||||
|
|
||||||
return CR_CALL_NOT_IMPLEMENTED;
|
pRange = (PINTERNAL_RANGE)preElement;
|
||||||
|
|
||||||
|
if (pRange == NULL || pRange->pRangeList == NULL)
|
||||||
|
return CR_FAILURE;
|
||||||
|
|
||||||
|
if (pullStart == NULL || pullEnd == NULL)
|
||||||
|
return CR_INVALID_POINTER;
|
||||||
|
|
||||||
|
if (ulFlags != 0)
|
||||||
|
return CR_INVALID_FLAG;
|
||||||
|
|
||||||
|
pRangeList = pRange->pRangeList;
|
||||||
|
|
||||||
|
/* Lock the range list */
|
||||||
|
WaitForSingleObject(pRangeList->hMutex, INFINITE);
|
||||||
|
|
||||||
|
/* Fail, if we reached the end of the list */
|
||||||
|
if (pRange->ListEntry.Flink == &pRangeList->ListHead)
|
||||||
|
{
|
||||||
|
ret = CR_FAILURE;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get the next range */
|
||||||
|
ListEntry = pRangeList->ListHead.Flink;
|
||||||
|
pRange = CONTAINING_RECORD(ListEntry, INTERNAL_RANGE, ListEntry);
|
||||||
|
|
||||||
|
/* Return the range data */
|
||||||
|
*pullStart = pRange->ullStart;
|
||||||
|
*pullEnd = pRange->ullEnd;
|
||||||
|
*preElement = (RANGE_ELEMENT)pRange;
|
||||||
|
|
||||||
|
done:
|
||||||
|
/* Unlock the range list */
|
||||||
|
ReleaseMutex(pRangeList->hMutex);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue