2 * internal executive prototypes
5 #ifndef __NTOSKRNL_INCLUDE_INTERNAL_EXECUTIVE_H
6 #define __NTOSKRNL_INCLUDE_INTERNAL_EXECUTIVE_H
8 #define NTOS_MODE_KERNEL
18 typedef struct _WINSTATION_OBJECT
20 PVOID SharedHeap
; /* points to kmode memory! */
26 LIST_ENTRY DesktopListHead
;
27 PRTL_ATOM_TABLE AtomTable
;
29 HANDLE SystemMenuTemplate
;
37 ULONG cxWallpaper
, cyWallpaper
;
38 WALLPAPER_MODE WallpaperMode
;
41 struct _DESKTOP_OBJECT
* ActiveDesktop
;
42 /* FIXME: Clipboard */
43 LIST_ENTRY HotKeyListHead
;
44 FAST_MUTEX HotKeyListLock
;
45 } WINSTATION_OBJECT
, *PWINSTATION_OBJECT
;
47 typedef struct _DESKTOP_OBJECT
49 PVOID DesktopHeap
; /* points to kmode memory! */
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 */
66 /* Handle of the desktop window. */
68 HANDLE PrevActiveWindow
;
69 /* Thread blocking input */
70 PVOID BlockInputThread
;
72 LIST_ENTRY ShellHookWindows
;
73 } DESKTOP_OBJECT
, *PDESKTOP_OBJECT
;
76 typedef VOID (*PLOOKASIDE_MINMAX_ROUTINE
)(
80 PUSHORT MaximumDepth
);
82 /* GLOBAL VARIABLES *********************************************************/
84 extern TIME_ZONE_INFORMATION ExpTimeZoneInfo
;
85 extern LARGE_INTEGER ExpTimeZoneBias
;
86 extern ULONG ExpTimeZoneId
;
88 extern POBJECT_TYPE ExEventPairObjectType
;
89 extern POBJECT_TYPE EXPORTED ExMutantObjectType
;
90 extern POBJECT_TYPE EXPORTED ExSemaphoreObjectType
;
91 extern POBJECT_TYPE EXPORTED ExTimerType
;
93 /* INITIALIZATION FUNCTIONS *************************************************/
103 ExpInitTimeZoneInfo(VOID
);
105 ExpInitializeWorkerThreads(VOID
);
107 ExpInitLookasideLists(VOID
);
109 ExpInitializeCallbacks(VOID
);
114 ExpInitializeExecutive(VOID
);
116 /* HANDLE TABLE FUNCTIONS ***************************************************/
118 #define EX_HANDLE_ENTRY_LOCKED (1 << ((sizeof(PVOID) * 8) - 1))
119 #define EX_HANDLE_ENTRY_PROTECTFROMCLOSE (1 << 0)
120 #define EX_HANDLE_ENTRY_INHERITABLE (1 << 1)
121 #define EX_HANDLE_ENTRY_AUDITONCLOSE (1 << 2)
123 #define EX_HANDLE_TABLE_CLOSING 0x1
125 #define EX_INVALID_HANDLE (~0)
127 #define EX_HANDLE_ENTRY_FLAGSMASK (EX_HANDLE_ENTRY_LOCKED | \
128 EX_HANDLE_ENTRY_PROTECTFROMCLOSE | \
129 EX_HANDLE_ENTRY_INHERITABLE | \
130 EX_HANDLE_ENTRY_AUDITONCLOSE)
132 typedef VOID (STDCALL PEX_DESTROY_HANDLE_CALLBACK
)(PHANDLE_TABLE HandleTable
, PVOID Object
, ULONG GrantedAccess
, PVOID Context
);
133 typedef BOOLEAN (STDCALL PEX_DUPLICATE_HANDLE_CALLBACK
)(PHANDLE_TABLE HandleTable
, PHANDLE_TABLE_ENTRY HandleTableEntry
, PVOID Context
);
134 typedef BOOLEAN (STDCALL PEX_CHANGE_HANDLE_CALLBACK
)(PHANDLE_TABLE HandleTable
, PHANDLE_TABLE_ENTRY HandleTableEntry
, PVOID Context
);
137 ExpInitializeHandleTables(VOID
);
139 ExCreateHandleTable(IN PEPROCESS QuotaProcess OPTIONAL
);
141 ExDestroyHandleTable(IN PHANDLE_TABLE HandleTable
,
142 IN PEX_DESTROY_HANDLE_CALLBACK DestroyHandleCallback OPTIONAL
,
143 IN PVOID Context OPTIONAL
);
145 ExDupHandleTable(IN PEPROCESS QuotaProcess OPTIONAL
,
146 IN PEX_DUPLICATE_HANDLE_CALLBACK DuplicateHandleCallback OPTIONAL
,
147 IN PVOID Context OPTIONAL
,
148 IN PHANDLE_TABLE SourceHandleTable
);
150 ExLockHandleTableEntry(IN PHANDLE_TABLE HandleTable
,
151 IN PHANDLE_TABLE_ENTRY Entry
);
153 ExUnlockHandleTableEntry(IN PHANDLE_TABLE HandleTable
,
154 IN PHANDLE_TABLE_ENTRY Entry
);
156 ExCreateHandle(IN PHANDLE_TABLE HandleTable
,
157 IN PHANDLE_TABLE_ENTRY Entry
);
159 ExDestroyHandle(IN PHANDLE_TABLE HandleTable
,
162 ExDestroyHandleByEntry(IN PHANDLE_TABLE HandleTable
,
163 IN PHANDLE_TABLE_ENTRY Entry
,
166 ExMapHandleToPointer(IN PHANDLE_TABLE HandleTable
,
170 ExChangeHandle(IN PHANDLE_TABLE HandleTable
,
172 IN PEX_CHANGE_HANDLE_CALLBACK ChangeHandleCallback
,
175 /* PSEH EXCEPTION HANDLING **************************************************/
179 ExSystemExceptionFilter(VOID
);
181 static __inline
_SEH_FILTER(_SEH_ExSystemExceptionFilter
)
183 return ExSystemExceptionFilter();
186 /* OTHER FUNCTIONS **********************************************************/
190 ExfpInterlockedExchange64(LONGLONG
volatile * Destination
,
194 ExpSetTimeZoneInformation(PTIME_ZONE_INFORMATION TimeZoneInformation
);
197 ExpAllocateLocallyUniqueId(OUT LUID
*LocallyUniqueId
);
201 ExTimerRundown(VOID
);
203 #define InterlockedDecrementUL(Addend) \
204 (ULONG)InterlockedDecrement((PLONG)(Addend))
206 #define InterlockedIncrementUL(Addend) \
207 (ULONG)InterlockedIncrement((PLONG)(Addend))
209 #define InterlockedExchangeUL(Target, Value) \
210 (ULONG)InterlockedExchange((PLONG)(Target), (LONG)(Value))
212 #define InterlockedExchangeAddUL(Addend, Value) \
213 (ULONG)InterlockedExchangeAdd((PLONG)(Addend), (LONG)(Value))
215 #define InterlockedCompareExchangeUL(Destination, Exchange, Comperand) \
216 (ULONG)InterlockedCompareExchange((PLONG)(Destination), (LONG)(Exchange), (LONG)(Comperand))
218 #define ExfInterlockedCompareExchange64UL(Destination, Exchange, Comperand) \
219 (ULONGLONG)ExfInterlockedCompareExchange64((PLONGLONG)(Destination), (PLONGLONG)(Exchange), (PLONGLONG)(Comperand))
221 #define ExfpInterlockedExchange64UL(Target, Value) \
222 (ULONGLONG)ExfpInterlockedExchange64((PLONGLONG)(Target), (PLONGLONG)(Value))
224 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_EXECUTIVE_H */