3 #define DECLARE_RETURN(type) type _ret_
4 #define RETURN(value) { _ret_ = value; goto _cleanup_; }
5 #define CLEANUP /*unreachable*/ ASSERT(FALSE); _cleanup_
6 #define END_CLEANUP return _ret_;
9 #define UserEnterCo UserEnterExclusive
10 #define UserLeaveCo UserLeave
12 extern BOOL gbInitialized
;
13 extern PSERVERINFO gpsi
;
14 extern PTHREADINFO gptiCurrent
;
15 extern PPROCESSINFO gppiList
;
16 extern PPROCESSINFO ppiScrnSaver
;
17 extern PPROCESSINFO gppiInputProvider
;
18 extern PEPROCESS gpepCSRSS
;
19 extern ATOM gaGuiConsoleWndClass
;
20 extern ATOM gaTuiConsoleWndClass
;
22 INIT_FUNCTION NTSTATUS NTAPI
InitUserImpl(VOID
);
23 VOID FASTCALL
CleanupUserImpl(VOID
);
24 VOID FASTCALL
UserEnterShared(VOID
);
25 VOID FASTCALL
UserEnterExclusive(VOID
);
26 VOID FASTCALL
UserLeave(VOID
);
27 BOOL FASTCALL
UserIsEntered(VOID
);
28 BOOL FASTCALL
UserIsEnteredExclusive(VOID
);
31 extern HANDLE GlobalUserHeap
;
34 UserCreateHeap(OUT PSECTION_OBJECT
*SectionObject
,
35 IN OUT PVOID
*SystemBase
,
39 UserHeapAlloc(SIZE_T Bytes
)
41 return RtlAllocateHeap(GlobalUserHeap
,
47 UserHeapFree(PVOID lpMem
)
49 return RtlFreeHeap(GlobalUserHeap
,
55 UserHeapReAlloc(PVOID lpMem
,
59 /* NOTE: ntoskrnl doesn't export RtlReAllocateHeap... */
60 return RtlReAllocateHeap(GlobalUserHeap
,
68 PrevSize
= RtlSizeHeap(GlobalUserHeap
,
72 if (PrevSize
== Bytes
)
75 pNew
= RtlAllocateHeap(GlobalUserHeap
,
87 RtlFreeHeap(GlobalUserHeap
,
97 UserHeapAddressToUser(PVOID lpMem
)
99 PPROCESSINFO W32Process
= PsGetCurrentProcessWin32Process();
100 return (PVOID
)(((ULONG_PTR
)lpMem
- (ULONG_PTR
)GlobalUserHeap
) +
101 (ULONG_PTR
)W32Process
->HeapMappings
.UserMapping
);