diff --git a/reactos/dll/ntdll/rtl/libsupp.c b/reactos/dll/ntdll/rtl/libsupp.c index 47e4359e054..5237098df27 100644 --- a/reactos/dll/ntdll/rtl/libsupp.c +++ b/reactos/dll/ntdll/rtl/libsupp.c @@ -113,33 +113,33 @@ RtlGetNtGlobalFlags(VOID) NTSTATUS NTAPI RtlDeleteHeapLock( - PRTL_CRITICAL_SECTION CriticalSection) + PHEAP_LOCK Lock) { - return RtlDeleteCriticalSection(CriticalSection); + return RtlDeleteCriticalSection(&Lock->CriticalSection); } NTSTATUS NTAPI RtlEnterHeapLock( - PRTL_CRITICAL_SECTION CriticalSection) + PHEAP_LOCK Lock) { - return RtlEnterCriticalSection(CriticalSection); + return RtlEnterCriticalSection(&Lock->CriticalSection); } NTSTATUS NTAPI RtlInitializeHeapLock( - PRTL_CRITICAL_SECTION CriticalSection) + PHEAP_LOCK Lock) { - return RtlInitializeCriticalSection(CriticalSection); + return RtlInitializeCriticalSection(&Lock->CriticalSection); } NTSTATUS NTAPI RtlLeaveHeapLock( - PRTL_CRITICAL_SECTION CriticalSection) + PHEAP_LOCK Lock) { - return RtlLeaveCriticalSection(CriticalSection ); + return RtlLeaveCriticalSection(&Lock->CriticalSection); } PVOID diff --git a/reactos/include/ndk/rtltypes.h b/reactos/include/ndk/rtltypes.h index 04aa9242624..afcf61dfba0 100644 --- a/reactos/include/ndk/rtltypes.h +++ b/reactos/include/ndk/rtltypes.h @@ -1039,6 +1039,21 @@ typedef struct _RTL_CRITICAL_SECTION #endif +// +// RTL Private Heap Structures +// +typedef struct _HEAP_LOCK +{ + union + { + RTL_CRITICAL_SECTION CriticalSection; +#ifndef NTOS_MODE_USER + ERESOURCE Resource; +#endif + UCHAR Padding[0x68]; /* Max ERESOURCE size for x64 build. Needed because RTL is built only once */ + }; +} HEAP_LOCK, *PHEAP_LOCK; + // // RTL Range List Structures // diff --git a/reactos/ntoskrnl/rtl/libsupp.c b/reactos/ntoskrnl/rtl/libsupp.c index aba04f1042e..5f9e0c10d5a 100644 --- a/reactos/ntoskrnl/rtl/libsupp.c +++ b/reactos/ntoskrnl/rtl/libsupp.c @@ -157,36 +157,35 @@ RtlGetCurrentPeb(VOID) NTSTATUS NTAPI RtlDeleteHeapLock( - PRTL_CRITICAL_SECTION CriticalSection) + PHEAP_LOCK Lock) { - ASSERT(FALSE); + ExDeleteResource(&Lock->Resource); return STATUS_SUCCESS; } NTSTATUS NTAPI RtlEnterHeapLock( - PRTL_CRITICAL_SECTION CriticalSection) + PHEAP_LOCK Lock) { - ASSERT(FALSE); - return STATUS_SUCCESS; + return ExAcquireResourceExclusive(&Lock->Resource, TRUE); } NTSTATUS NTAPI RtlInitializeHeapLock( - PRTL_CRITICAL_SECTION CriticalSection) + PHEAP_LOCK Lock) { - ASSERT(FALSE); - return STATUS_SUCCESS; + ExInitializeResource(&Lock->Resource); + return STATUS_SUCCESS; } NTSTATUS NTAPI RtlLeaveHeapLock( - PRTL_CRITICAL_SECTION CriticalSection) + PHEAP_LOCK Lock) { - ASSERT(FALSE); + ExReleaseResource(&Lock->Resource); return STATUS_SUCCESS; }