VOID
NTAPI
RtlInitializeRangeList(
- _Inout_ PRTL_RANGE_LIST RangeList
+ _Out_ PRTL_RANGE_LIST RangeList
);
NTSYSAPI
_In_ PRTL_RANGE_LIST RangeList
);
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlCopyRangeList(
+ _Out_ PRTL_RANGE_LIST CopyRangeList,
+ _In_ PRTL_RANGE_LIST RangeList
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlMergeRangeLists(
+ _Out_ PRTL_RANGE_LIST MergedRangeList,
+ _In_ PRTL_RANGE_LIST RangeList1,
+ _In_ PRTL_RANGE_LIST RangeList2,
+ _In_ ULONG Flags
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlInvertRangeList(
+ _Out_ PRTL_RANGE_LIST InvertedRangeList,
+ _In_ PRTL_RANGE_LIST RangeList
+);
+
NTSYSAPI
NTSTATUS
NTAPI
_In_opt_ PVOID Owner
);
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDeleteRange(
+ _Inout_ PRTL_RANGE_LIST RangeList,
+ _In_ ULONGLONG Start,
+ _In_ ULONGLONG End,
+ _In_ PVOID Owner
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlDeleteOwnersRanges(
+ _Inout_ PRTL_RANGE_LIST RangeList,
+ _In_ _Maybenull_ PVOID Owner
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlFindRange(
+ _In_ PRTL_RANGE_LIST RangeList,
+ _In_ ULONGLONG Minimum,
+ _In_ ULONGLONG Maximum,
+ _In_ ULONG Length,
+ _In_ ULONG Alignment,
+ _In_ ULONG Flags,
+ _In_ UCHAR AttributeAvailableMask,
+ _In_opt_ PVOID Context,
+ _In_opt_ PRTL_CONFLICT_RANGE_CALLBACK Callback,
+ _Out_ PULONGLONG Start
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlIsRangeAvailable(
+ _In_ PRTL_RANGE_LIST RangeList,
+ _In_ ULONGLONG Start,
+ _In_ ULONGLONG End,
+ _In_ ULONG Flags,
+ _In_ UCHAR AttributeAvailableMask,
+ _In_opt_ PVOID Context,
+ _In_opt_ PRTL_CONFLICT_RANGE_CALLBACK Callback,
+ _Out_ PBOOLEAN Available
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlGetFirstRange(
+ _In_ PRTL_RANGE_LIST RangeList,
+ _Out_ PRTL_RANGE_LIST_ITERATOR Iterator,
+ _Outptr_ PRTL_RANGE *Range
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+RtlGetNextRange(
+ _Inout_ PRTL_RANGE_LIST_ITERATOR Iterator,
+ _Outptr_ PRTL_RANGE *Range,
+ _In_ BOOLEAN MoveForwards
+);
+
//
// Debug Functions
//
//
// RTL Range List callbacks
//
-#ifdef NTOS_MODE_USER
typedef BOOLEAN
(NTAPI *PRTL_CONFLICT_RANGE_CALLBACK)(
PVOID Context,
//
// Custom Heap Commit Routine for RtlCreateHeap
//
+#ifdef NTOS_MODE_USER
typedef NTSTATUS
(NTAPI * PRTL_HEAP_COMMIT_ROUTINE)(
_In_ PVOID Base,
ULONG Stamp;
} RTL_RANGE_LIST_ITERATOR, *PRTL_RANGE_LIST_ITERATOR;
+typedef struct _RTLP_RANGE_LIST_ENTRY
+{
+ ULONGLONG Start;
+ ULONGLONG End;
+ union
+ {
+ struct
+ {
+ PVOID UserData;
+ PVOID Owner;
+ } Allocated;
+ struct
+ {
+ LIST_ENTRY ListHead;
+ } Merged;
+ };
+ UCHAR Attributes;
+ UCHAR PublicFlags;
+ USHORT PrivateFlags;
+ LIST_ENTRY ListEntry;
+} RTLP_RANGE_LIST_ENTRY, *PRTLP_RANGE_LIST_ENTRY;
+C_ASSERT(RTL_SIZEOF_THROUGH_FIELD(RTL_RANGE, Flags) == RTL_SIZEOF_THROUGH_FIELD(RTLP_RANGE_LIST_ENTRY, PublicFlags));
+
//
// RTL Resource
//