mirror of
https://github.com/reactos/reactos.git
synced 2025-06-03 00:10:39 +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
|
||||
{
|
||||
LIST_ENTRY ListEntry;
|
||||
struct _INTERNAL_RANGE_LIST *pRangeList;
|
||||
DWORDLONG ullStart;
|
||||
DWORDLONG ullEnd;
|
||||
} INTERNAL_RANGE, *PINTERNAL_RANGE;
|
||||
|
@ -1065,6 +1066,7 @@ CM_Add_Range(
|
|||
goto done;
|
||||
}
|
||||
|
||||
pRange->pRangeList = pRangeList;
|
||||
pRange->ullStart = ullStartValue;
|
||||
pRange->ullEnd = ullEndValue;
|
||||
|
||||
|
@ -5900,10 +5902,51 @@ CM_Next_Range(
|
|||
_Out_ PDWORDLONG pullEnd,
|
||||
_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",
|
||||
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…
Reference in a new issue