Alex Ionescu <ionucu@videotron.ca>
[reactos.git] / reactos / ntoskrnl / include / internal / ex.h
1 /*
2 * internal executive prototypes
3 */
4
5 #ifndef __NTOSKRNL_INCLUDE_INTERNAL_EXECUTIVE_H
6 #define __NTOSKRNL_INCLUDE_INTERNAL_EXECUTIVE_H
7
8 #define NTOS_MODE_KERNEL
9 #include <ntos.h>
10
11 typedef enum
12 {
13 wmCenter = 0,
14 wmTile,
15 wmStretch
16 } WALLPAPER_MODE;
17
18 typedef struct _WINSTATION_OBJECT
19 {
20 PVOID SharedHeap; /* points to kmode memory! */
21
22 CSHORT Type;
23 CSHORT Size;
24 KSPIN_LOCK Lock;
25 UNICODE_STRING Name;
26 LIST_ENTRY DesktopListHead;
27 PRTL_ATOM_TABLE AtomTable;
28 PVOID HandleTable;
29 HANDLE SystemMenuTemplate;
30 PVOID SystemCursor;
31 UINT CaretBlinkRate;
32 HANDLE ShellWindow;
33 HANDLE ShellListView;
34
35 /* Wallpaper */
36 HANDLE hbmWallpaper;
37 ULONG cxWallpaper, cyWallpaper;
38 WALLPAPER_MODE WallpaperMode;
39
40 ULONG Flags;
41 struct _DESKTOP_OBJECT* ActiveDesktop;
42 /* FIXME: Clipboard */
43 LIST_ENTRY HotKeyListHead;
44 FAST_MUTEX HotKeyListLock;
45 } WINSTATION_OBJECT, *PWINSTATION_OBJECT;
46
47 typedef struct _DESKTOP_OBJECT
48 {
49 PVOID DesktopHeap; /* points to kmode memory! */
50
51 CSHORT Type;
52 CSHORT Size;
53 LIST_ENTRY ListEntry;
54 KSPIN_LOCK Lock;
55 UNICODE_STRING Name;
56 /* Pointer to the associated window station. */
57 struct _WINSTATION_OBJECT *WindowStation;
58 /* Pointer to the active queue. */
59 PVOID ActiveMessageQueue;
60 /* Rectangle of the work area */
61 #ifdef __WIN32K__
62 RECT WorkArea;
63 #else
64 LONG WorkArea[4];
65 #endif
66 /* Handle of the desktop window. */
67 HANDLE DesktopWindow;
68 HANDLE PrevActiveWindow;
69 /* Thread blocking input */
70 PVOID BlockInputThread;
71 } DESKTOP_OBJECT, *PDESKTOP_OBJECT;
72
73
74 typedef VOID (*PLOOKASIDE_MINMAX_ROUTINE)(
75 POOL_TYPE PoolType,
76 ULONG Size,
77 PUSHORT MinimumDepth,
78 PUSHORT MaximumDepth);
79
80 /* GLOBAL VARIABLES *********************************************************/
81
82 extern TIME_ZONE_INFORMATION ExpTimeZoneInfo;
83 extern LARGE_INTEGER ExpTimeZoneBias;
84 extern ULONG ExpTimeZoneId;
85
86 extern POBJECT_TYPE ExEventPairObjectType;
87
88
89 /* INITIALIZATION FUNCTIONS *************************************************/
90
91 VOID
92 ExpWin32kInit(VOID);
93
94 VOID
95 ExInit2(VOID);
96 VOID
97 ExInit3(VOID);
98 VOID
99 ExpInitTimeZoneInfo(VOID);
100 VOID
101 ExInitializeWorkerThreads(VOID);
102 VOID
103 ExpInitLookasideLists(VOID);
104 VOID
105 ExpInitializeCallbacks(VOID);
106 VOID
107 ExpInitUuids(VOID);
108 VOID
109 STDCALL
110 ExpInitializeExecutive(VOID);
111
112 /* OTHER FUNCTIONS **********************************************************/
113
114 LONGLONG
115 FASTCALL
116 ExfpInterlockedExchange64(LONGLONG volatile * Destination,
117 PLONGLONG Exchange);
118
119 NTSTATUS
120 ExpSetTimeZoneInformation(PTIME_ZONE_INFORMATION TimeZoneInformation);
121
122 NTSTATUS
123 ExpAllocateLocallyUniqueId(OUT LUID *LocallyUniqueId);
124
125 #define InterlockedDecrementUL(Addend) \
126 (ULONG)InterlockedDecrement((PLONG)(Addend))
127
128 #define InterlockedIncrementUL(Addend) \
129 (ULONG)InterlockedIncrement((PLONG)(Addend))
130
131 #define InterlockedExchangeUL(Target, Value) \
132 (ULONG)InterlockedExchange((PLONG)(Target), (LONG)(Value))
133
134 #define InterlockedExchangeAddUL(Addend, Value) \
135 (ULONG)InterlockedExchangeAdd((PLONG)(Addend), (LONG)(Value))
136
137 #define InterlockedCompareExchangeUL(Destination, Exchange, Comperand) \
138 (ULONG)InterlockedCompareExchange((PLONG)(Destination), (LONG)(Exchange), (LONG)(Comperand))
139
140 #define ExfInterlockedCompareExchange64UL(Destination, Exchange, Comperand) \
141 (ULONGLONG)ExfInterlockedCompareExchange64((PLONGLONG)(Destination), (PLONGLONG)(Exchange), (PLONGLONG)(Comperand))
142
143 #define ExfpInterlockedExchange64UL(Target, Value) \
144 (ULONGLONG)ExfpInterlockedExchange64((PLONGLONG)(Target), (PLONGLONG)(Value))
145
146 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_EXECUTIVE_H */