34IntUserHeapCommitRoutine(
44 PVOID UserCommitAddress;
48 if (W32Process !=
NULL)
56 UserBase =
Mapping->UserMapping;
109 if (W32Process ==
NULL)
164 Parameters.CommitRoutine = IntUserHeapCommitRoutine;
242 TRACE_CH(UserProcess,
"IntUnmapDesktopView called for process 0x%p\n",
Process);
245 if (W32Process ==
NULL)
247 ERR_CH(UserProcess,
"UnmapGlobalUserHeap - We don't have a Win32 process!\n");
256 if (--HeapMapping->
Count == 0)
258 TRACE_CH(UserProcess,
"UnmapGlobalUserHeap - Unmapping\n");
278 TRACE_CH(UserProcess,
"MapGlobalUserHeap called for process 0x%p\n",
Process);
281 if (W32Process ==
NULL)
283 ERR_CH(UserProcess,
"MapGlobalUserHeap - We don't have a Win32 process!\n");
287 TRACE_CH(UserProcess,
"MapGlobalUserHeap - We got a Win32 process, find for existing global user heap mapping...\n");
295 HeapMapping->
Count++;
297 TRACE_CH(UserProcess,
"MapGlobalUserHeap - A mapping was found, return it.\n");
305 TRACE_CH(UserProcess,
"MapGlobalUserHeap - No mapping was found, let's map...\n");
321 ERR_CH(UserProcess,
"MapGlobalUserHeap - Failed to map the global heap! 0x%x\n",
Status);
325 TRACE_CH(UserProcess,
"MapGlobalUserHeap -- Mapped kernel global heap 0x%p to user space at 0x%p\n",
333 HeapMapping->
Count = 1;
NTSTATUS NTAPI MmMapViewInSessionSpace(IN PVOID Section, OUT PVOID *MappedBase, IN OUT PSIZE_T ViewSize)
NTSTATUS NTAPI MmUnmapViewOfSection(IN PEPROCESS Process, IN PVOID BaseAddress)
#define ERR_CH(ch, fmt,...)
#define TRACE_CH(ch, fmt,...)
#define NT_SUCCESS(StatCode)
#define _IRQL_requires_same_
static PVOID Mapping[EMS_PHYSICAL_PAGES]
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
_Must_inspect_result_ _Outptr_ PVOID * SectionObject
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T CommitSize
_In_ HANDLE _Outptr_result_bytebuffer_ ViewSize PVOID _In_ ULONG_PTR _In_ SIZE_T _Inout_opt_ PLARGE_INTEGER _Inout_ PSIZE_T ViewSize
#define _Function_class_(n)
#define HEAP_FREE_CHECKING_ENABLED
#define SECTION_ALL_ACCESS
NTSYSAPI PVOID NTAPI RtlCreateHeap(IN ULONG Flags, IN PVOID HeapBase OPTIONAL, IN ULONG ReserveSize OPTIONAL, IN ULONG CommitSize OPTIONAL, IN PVOID Lock OPTIONAL, IN PRTL_HEAP_PARAMETERS Parameters OPTIONAL)
#define HEAP_TAIL_CHECKING_ENABLED
#define NtCurrentProcess()
#define HEAP_NO_SERIALIZE
_In_ ULONG _In_ ULONG Offset
PVOID NTAPI PsGetProcessWin32Process(PEPROCESS Process)
PVOID NTAPI PsGetCurrentProcessWin32Process(VOID)
static GENERIC_MAPPING UserMapping
NTSTATUS NTAPI MmMapViewOfSection(IN PVOID SectionObject, IN PEPROCESS Process, IN OUT PVOID *BaseAddress, IN ULONG_PTR ZeroBits, IN SIZE_T CommitSize, IN OUT PLARGE_INTEGER SectionOffset OPTIONAL, IN OUT PSIZE_T ViewSize, IN SECTION_INHERIT InheritDisposition, IN ULONG AllocationType, IN ULONG Protect)
NTSTATUS NTAPI MmCreateSection(OUT PVOID *Section, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN PLARGE_INTEGER MaximumSize, IN ULONG SectionPageProtection, IN ULONG AllocationAttributes, IN HANDLE FileHandle OPTIONAL, IN PFILE_OBJECT FileObject OPTIONAL)
W32HEAP_USER_MAPPING HeapMappings
struct _W32HEAP_USER_MAPPING * Next
#define STATUS_UNSUCCESSFUL
NTSTATUS UnmapGlobalUserHeap(IN PEPROCESS Process)
PWIN32HEAP UserCreateHeap(OUT PVOID *SectionObject, IN OUT PVOID *SystemBase, IN SIZE_T HeapSize)
NTSTATUS MapGlobalUserHeap(IN PEPROCESS Process, OUT PVOID *KernelMapping, OUT PVOID *UserMapping)
static PWIN32HEAP IntUserHeapCreate(IN PVOID SectionObject, IN PVOID *SystemMappedBase, IN ULONG HeapSize)
PVOID GlobalUserHeapSection
struct _WIN32HEAP * PWIN32HEAP
_Must_inspect_result_ _In_ WDFQUEUE _In_opt_ WDFREQUEST _In_opt_ WDFFILEOBJECT _Inout_opt_ PWDF_REQUEST_PARAMETERS Parameters
VOID FASTCALL SetLastNtError(_In_ NTSTATUS Status)
SIZE_T WINAPI HeapSize(HANDLE, DWORD, LPCVOID)
#define ObDereferenceObject
#define PsGetCurrentProcess
_Inout_ PVOID * CommitAddress