Create this branch to work on loading of different Kernel-Debugger DLL providers...
[reactos.git] / win32ss / user / ntuser / ntuser.h
1 #pragma once
2
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_;
7
8
9 #define UserEnterCo UserEnterExclusive
10 #define UserLeaveCo UserLeave
11
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
21 INIT_FUNCTION NTSTATUS NTAPI InitUserImpl(VOID);
22 VOID FASTCALL CleanupUserImpl(VOID);
23 VOID FASTCALL UserEnterShared(VOID);
24 VOID FASTCALL UserEnterExclusive(VOID);
25 VOID FASTCALL UserLeave(VOID);
26 BOOL FASTCALL UserIsEntered(VOID);
27 BOOL FASTCALL UserIsEnteredExclusive(VOID);
28
29 /* User heap */
30 extern HANDLE GlobalUserHeap;
31
32 PWIN32HEAP
33 UserCreateHeap(OUT PSECTION_OBJECT *SectionObject,
34 IN OUT PVOID *SystemBase,
35 IN SIZE_T HeapSize);
36
37 static __inline PVOID
38 UserHeapAlloc(SIZE_T Bytes)
39 {
40 return RtlAllocateHeap(GlobalUserHeap,
41 HEAP_NO_SERIALIZE,
42 Bytes);
43 }
44
45 static __inline BOOL
46 UserHeapFree(PVOID lpMem)
47 {
48 return RtlFreeHeap(GlobalUserHeap,
49 HEAP_NO_SERIALIZE,
50 lpMem);
51 }
52
53 static __inline PVOID
54 UserHeapReAlloc(PVOID lpMem,
55 SIZE_T Bytes)
56 {
57 #if 0
58 /* NOTE: ntoskrnl doesn't export RtlReAllocateHeap... */
59 return RtlReAllocateHeap(GlobalUserHeap,
60 HEAP_NO_SERIALIZE,
61 lpMem,
62 Bytes);
63 #else
64 SIZE_T PrevSize;
65 PVOID pNew;
66
67 PrevSize = RtlSizeHeap(GlobalUserHeap,
68 HEAP_NO_SERIALIZE,
69 lpMem);
70
71 if (PrevSize == Bytes)
72 return lpMem;
73
74 pNew = RtlAllocateHeap(GlobalUserHeap,
75 HEAP_NO_SERIALIZE,
76 Bytes);
77 if (pNew != NULL)
78 {
79 if (PrevSize < Bytes)
80 Bytes = PrevSize;
81
82 RtlCopyMemory(pNew,
83 lpMem,
84 Bytes);
85
86 RtlFreeHeap(GlobalUserHeap,
87 HEAP_NO_SERIALIZE,
88 lpMem);
89 }
90
91 return pNew;
92 #endif
93 }
94
95 static __inline PVOID
96 UserHeapAddressToUser(PVOID lpMem)
97 {
98 PPROCESSINFO W32Process = PsGetCurrentProcessWin32Process();
99 return (PVOID)(((ULONG_PTR)lpMem - (ULONG_PTR)GlobalUserHeap) +
100 (ULONG_PTR)W32Process->HeapMappings.UserMapping);
101 }
102
103 /* EOF */