https://git.reactos.org/?p=reactos.git;a=commitdiff;h=b8cdd1a8799acc381eba6db6889e94a141185e89

commit b8cdd1a8799acc381eba6db6889e94a141185e89
Author:     Mark Jansen <mark.jan...@reactos.org>
AuthorDate: Thu Dec 7 20:20:03 2023 +0100
Commit:     Mark Jansen <mark.jan...@reactos.org>
CommitDate: Sun Dec 17 22:28:24 2023 +0100

    [RTL] Implement RtlGetProcessHeaps
---
 sdk/lib/rtl/heap.c     | 17 ++---------------
 sdk/lib/rtl/heap.h     |  1 +
 sdk/lib/rtl/heapuser.c | 29 +++++++++++++++++++++++++++++
 3 files changed, 32 insertions(+), 15 deletions(-)

diff --git a/sdk/lib/rtl/heap.c b/sdk/lib/rtl/heap.c
index 847051df44c..781c2276c49 100644
--- a/sdk/lib/rtl/heap.c
+++ b/sdk/lib/rtl/heap.c
@@ -3756,7 +3756,7 @@ BOOLEAN NTAPI RtlValidateHeap(
 }
 
 /*
- * @implemented
+ * @unimplemented
  */
 NTSTATUS NTAPI
 RtlEnumProcessHeaps(PHEAP_ENUMERATION_ROUTINE HeapEnumerationRoutine,
@@ -3766,21 +3766,8 @@ RtlEnumProcessHeaps(PHEAP_ENUMERATION_ROUTINE 
HeapEnumerationRoutine,
     return STATUS_NOT_IMPLEMENTED;
 }
 
-
 /*
- * @implemented
- */
-ULONG NTAPI
-RtlGetProcessHeaps(ULONG count,
-                   HANDLE *heaps)
-{
-    UNIMPLEMENTED;
-    return 0;
-}
-
-
-/*
- * @implemented
+ * @unimplemented
  */
 BOOLEAN NTAPI
 RtlValidateProcessHeaps(VOID)
diff --git a/sdk/lib/rtl/heap.h b/sdk/lib/rtl/heap.h
index 5eaefde8b2f..1f0b5436011 100644
--- a/sdk/lib/rtl/heap.h
+++ b/sdk/lib/rtl/heap.h
@@ -339,6 +339,7 @@ BOOLEAN NTAPI
 RtlpValidateHeapHeaders(PHEAP Heap, BOOLEAN Recalculate);
 
 /* heapdbg.c */
+NTSYSAPI
 HANDLE NTAPI
 RtlDebugCreateHeap(ULONG Flags,
                    PVOID Addr,
diff --git a/sdk/lib/rtl/heapuser.c b/sdk/lib/rtl/heapuser.c
index 0d8cdab5336..c3d3a61a06d 100644
--- a/sdk/lib/rtl/heapuser.c
+++ b/sdk/lib/rtl/heapuser.c
@@ -127,3 +127,32 @@ RtlInitializeHeapManager(VOID)
     RtlInitializeCriticalSection(&RtlpProcessHeapsListLock);
 }
 
+ULONG NTAPI
+RtlGetProcessHeaps(_In_ ULONG HeapCount, _Out_cap_(HeapCount) HANDLE 
*HeapArray)
+{
+    PPEB Peb = RtlGetCurrentPeb();
+
+    RtlEnterCriticalSection(&RtlpProcessHeapsListLock);
+    ULONG nHeaps = Peb->NumberOfHeaps;
+
+    _SEH2_TRY
+    {
+        if (HeapArray)
+        {
+            for (ULONG n = 0; n < min(nHeaps, HeapCount); ++n)
+            {
+                HeapArray[n] = Peb->ProcessHeaps[n];
+            }
+        }
+    }
+    _SEH2_FINALLY
+    {
+        RtlLeaveCriticalSection(&RtlpProcessHeapsListLock);
+    }
+    _SEH2_END;
+
+    /* TODO: Add RtlpDphPageHeapList here */
+
+    return nHeaps;
+}
+

Reply via email to