3 typedef struct _WIN32HEAP WIN32HEAP
, *PWIN32HEAP
;
6 typedef struct _W32HEAP_USER_MAPPING
8 struct _W32HEAP_USER_MAPPING* Next;
13 } W32HEAP_USER_MAPPING, *PW32HEAP_USER_MAPPING;
17 extern HANDLE GlobalUserHeap
;
18 extern PVOID GlobalUserHeapSection
;
21 UserCreateHeap(OUT PVOID
*SectionObject
,
22 IN OUT PVOID
*SystemBase
,
26 UnmapGlobalUserHeap(IN PEPROCESS Process
);
29 MapGlobalUserHeap(IN PEPROCESS Process
,
30 OUT PVOID
* KernelMapping
,
31 OUT PVOID
* UserMapping
);
34 UserHeapAlloc(SIZE_T Bytes
)
36 return RtlAllocateHeap(GlobalUserHeap
,
42 UserHeapFree(PVOID lpMem
)
44 return RtlFreeHeap(GlobalUserHeap
,
50 UserHeapReAlloc(PVOID lpMem
,
54 /* NOTE: ntoskrnl doesn't export RtlReAllocateHeap... */
55 return RtlReAllocateHeap(GlobalUserHeap
,
63 PrevSize
= RtlSizeHeap(GlobalUserHeap
,
67 if (PrevSize
== Bytes
)
70 pNew
= RtlAllocateHeap(GlobalUserHeap
,
82 RtlFreeHeap(GlobalUserHeap
,
92 UserHeapAddressToUser(PVOID lpMem
)
94 PPROCESSINFO W32Process
= PsGetCurrentProcessWin32Process();
96 /* The first mapping entry is the global user heap mapping */
97 return (PVOID
)(((ULONG_PTR
)lpMem
- (ULONG_PTR
)GlobalUserHeap
) +
98 (ULONG_PTR
)W32Process
->HeapMappings
.UserMapping
);