1 #ifndef __NTOSKRNL_INCLUDE_INTERNAL_EXECUTIVE_H
2 #define __NTOSKRNL_INCLUDE_INTERNAL_EXECUTIVE_H
4 /* GLOBAL VARIABLES *********************************************************/
6 extern TIME_ZONE_INFORMATION ExpTimeZoneInfo
;
7 extern LARGE_INTEGER ExpTimeZoneBias
;
8 extern ULONG ExpTimeZoneId
;
9 extern POBJECT_TYPE ExEventPairObjectType
;
11 #define EX_OBJ_TO_HDR(eob) ((POBJECT_HEADER)((ULONG_PTR)(eob) & \
12 ~(EX_HANDLE_ENTRY_PROTECTFROMCLOSE | EX_HANDLE_ENTRY_INHERITABLE | \
13 EX_HANDLE_ENTRY_AUDITONCLOSE)))
14 #define EX_HTE_TO_HDR(hte) ((POBJECT_HEADER)((ULONG_PTR)((hte)->u1.Object) & \
15 ~(EX_HANDLE_ENTRY_PROTECTFROMCLOSE | EX_HANDLE_ENTRY_INHERITABLE | \
16 EX_HANDLE_ENTRY_AUDITONCLOSE)))
18 /* INITIALIZATION FUNCTIONS *************************************************/
30 ExpInitTimeZoneInfo(VOID
);
34 ExpInitializeWorkerThreads(VOID
);
38 ExpInitLookasideLists(VOID
);
42 ExpInitializeCallbacks(VOID
);
50 ExpInitializeExecutive(VOID
);
54 ExpInitializeEventImplementation(VOID
);
58 ExpInitializeEventImplementation(VOID
);
62 ExpInitializeEventPairImplementation(VOID
);
66 ExpInitializeSemaphoreImplementation(VOID
);
70 ExpInitializeMutantImplementation(VOID
);
74 ExpInitializeTimerImplementation(VOID
);
78 ExpInitializeProfileImplementation(VOID
);
80 /* HANDLE TABLE FUNCTIONS ***************************************************/
82 #define EX_HANDLE_ENTRY_LOCKED (1 << ((sizeof(PVOID) * 8) - 1))
83 #define EX_HANDLE_ENTRY_PROTECTFROMCLOSE (1 << 0)
84 #define EX_HANDLE_ENTRY_INHERITABLE (1 << 1)
85 #define EX_HANDLE_ENTRY_AUDITONCLOSE (1 << 2)
87 #define EX_HANDLE_TABLE_CLOSING 0x1
89 #define EX_HANDLE_ENTRY_FLAGSMASK (EX_HANDLE_ENTRY_LOCKED | \
90 EX_HANDLE_ENTRY_PROTECTFROMCLOSE | \
91 EX_HANDLE_ENTRY_INHERITABLE | \
92 EX_HANDLE_ENTRY_AUDITONCLOSE)
94 typedef VOID (STDCALL PEX_DESTROY_HANDLE_CALLBACK
)(
95 PHANDLE_TABLE HandleTable
,
101 typedef BOOLEAN (STDCALL PEX_DUPLICATE_HANDLE_CALLBACK
)(
102 PHANDLE_TABLE HandleTable
,
103 PHANDLE_TABLE_ENTRY HandleTableEntry
,
107 typedef BOOLEAN (STDCALL PEX_CHANGE_HANDLE_CALLBACK
)(
108 PHANDLE_TABLE HandleTable
,
109 PHANDLE_TABLE_ENTRY HandleTableEntry
,
114 ExpInitializeHandleTables(VOID
);
117 ExCreateHandleTable(IN PEPROCESS QuotaProcess OPTIONAL
);
120 ExDestroyHandleTable(
121 IN PHANDLE_TABLE HandleTable
,
122 IN PEX_DESTROY_HANDLE_CALLBACK DestroyHandleCallback OPTIONAL
,
123 IN PVOID Context OPTIONAL
128 IN PEPROCESS QuotaProcess OPTIONAL
,
129 IN PEX_DUPLICATE_HANDLE_CALLBACK DuplicateHandleCallback OPTIONAL
,
130 IN PVOID Context OPTIONAL
,
131 IN PHANDLE_TABLE SourceHandleTable
135 ExLockHandleTableEntry(
136 IN PHANDLE_TABLE HandleTable
,
137 IN PHANDLE_TABLE_ENTRY Entry
141 ExUnlockHandleTableEntry(
142 IN PHANDLE_TABLE HandleTable
,
143 IN PHANDLE_TABLE_ENTRY Entry
148 IN PHANDLE_TABLE HandleTable
,
149 IN PHANDLE_TABLE_ENTRY Entry
154 IN PHANDLE_TABLE HandleTable
,
159 ExDestroyHandleByEntry(
160 IN PHANDLE_TABLE HandleTable
,
161 IN PHANDLE_TABLE_ENTRY Entry
,
166 ExMapHandleToPointer(
167 IN PHANDLE_TABLE HandleTable
,
173 IN PHANDLE_TABLE HandleTable
,
175 IN PEX_CHANGE_HANDLE_CALLBACK ChangeHandleCallback
,
179 /* PSEH EXCEPTION HANDLING **************************************************/
183 ExSystemExceptionFilter(VOID
);
185 static __inline
_SEH_FILTER(_SEH_ExSystemExceptionFilter
)
187 return ExSystemExceptionFilter();
190 /* OTHER FUNCTIONS **********************************************************/
194 ExfpInterlockedExchange64(
195 LONGLONG
volatile * Destination
,
200 ExpSetTimeZoneInformation(PTIME_ZONE_INFORMATION TimeZoneInformation
);
204 ExpAllocateLocallyUniqueId(OUT LUID
*LocallyUniqueId
);
208 ExTimerRundown(VOID
);
210 #define InterlockedDecrementUL(Addend) \
211 (ULONG)InterlockedDecrement((PLONG)(Addend))
213 #define InterlockedIncrementUL(Addend) \
214 (ULONG)InterlockedIncrement((PLONG)(Addend))
216 #define InterlockedExchangeUL(Target, Value) \
217 (ULONG)InterlockedExchange((PLONG)(Target), (LONG)(Value))
219 #define InterlockedExchangeAddUL(Addend, Value) \
220 (ULONG)InterlockedExchangeAdd((PLONG)(Addend), (LONG)(Value))
222 #define InterlockedCompareExchangeUL(Destination, Exchange, Comperand) \
223 (ULONG)InterlockedCompareExchange((PLONG)(Destination), (LONG)(Exchange), (LONG)(Comperand))
225 #define ExfInterlockedCompareExchange64UL(Destination, Exchange, Comperand) \
226 (ULONGLONG)ExfInterlockedCompareExchange64((PLONGLONG)(Destination), (PLONGLONG)(Exchange), (PLONGLONG)(Comperand))
228 #define ExfpInterlockedExchange64UL(Target, Value) \
229 (ULONGLONG)ExfpInterlockedExchange64((PLONGLONG)(Target), (PLONGLONG)(Value))
231 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_EXECUTIVE_H */