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 /* INITIALIZATION FUNCTIONS *************************************************/
23 ExpInitTimeZoneInfo(VOID
);
27 ExpInitializeWorkerThreads(VOID
);
31 ExpInitLookasideLists(VOID
);
35 ExpInitializeCallbacks(VOID
);
43 ExpInitializeExecutive(VOID
);
47 ExpInitializeEventImplementation(VOID
);
51 ExpInitializeEventImplementation(VOID
);
55 ExpInitializeEventPairImplementation(VOID
);
59 ExpInitializeSemaphoreImplementation(VOID
);
63 ExpInitializeMutantImplementation(VOID
);
67 ExpInitializeTimerImplementation(VOID
);
71 ExpInitializeProfileImplementation(VOID
);
73 /* HANDLE TABLE FUNCTIONS ***************************************************/
75 #define EX_HANDLE_ENTRY_LOCKED (1 << ((sizeof(PVOID) * 8) - 1))
76 #define EX_HANDLE_ENTRY_PROTECTFROMCLOSE (1 << 0)
77 #define EX_HANDLE_ENTRY_INHERITABLE (1 << 1)
78 #define EX_HANDLE_ENTRY_AUDITONCLOSE (1 << 2)
80 #define EX_HANDLE_TABLE_CLOSING 0x1
82 #define EX_INVALID_HANDLE (~0)
84 #define EX_HANDLE_ENTRY_FLAGSMASK (EX_HANDLE_ENTRY_LOCKED | \
85 EX_HANDLE_ENTRY_PROTECTFROMCLOSE | \
86 EX_HANDLE_ENTRY_INHERITABLE | \
87 EX_HANDLE_ENTRY_AUDITONCLOSE)
89 typedef VOID (STDCALL PEX_DESTROY_HANDLE_CALLBACK
)(
90 PHANDLE_TABLE HandleTable
,
96 typedef BOOLEAN (STDCALL PEX_DUPLICATE_HANDLE_CALLBACK
)(
97 PHANDLE_TABLE HandleTable
,
98 PHANDLE_TABLE_ENTRY HandleTableEntry
,
102 typedef BOOLEAN (STDCALL PEX_CHANGE_HANDLE_CALLBACK
)(
103 PHANDLE_TABLE HandleTable
,
104 PHANDLE_TABLE_ENTRY HandleTableEntry
,
109 ExpInitializeHandleTables(VOID
);
112 ExCreateHandleTable(IN PEPROCESS QuotaProcess OPTIONAL
);
115 ExDestroyHandleTable(
116 IN PHANDLE_TABLE HandleTable
,
117 IN PEX_DESTROY_HANDLE_CALLBACK DestroyHandleCallback OPTIONAL
,
118 IN PVOID Context OPTIONAL
123 IN PEPROCESS QuotaProcess OPTIONAL
,
124 IN PEX_DUPLICATE_HANDLE_CALLBACK DuplicateHandleCallback OPTIONAL
,
125 IN PVOID Context OPTIONAL
,
126 IN PHANDLE_TABLE SourceHandleTable
130 ExLockHandleTableEntry(
131 IN PHANDLE_TABLE HandleTable
,
132 IN PHANDLE_TABLE_ENTRY Entry
136 ExUnlockHandleTableEntry(
137 IN PHANDLE_TABLE HandleTable
,
138 IN PHANDLE_TABLE_ENTRY Entry
143 IN PHANDLE_TABLE HandleTable
,
144 IN PHANDLE_TABLE_ENTRY Entry
149 IN PHANDLE_TABLE HandleTable
,
154 ExDestroyHandleByEntry(
155 IN PHANDLE_TABLE HandleTable
,
156 IN PHANDLE_TABLE_ENTRY Entry
,
161 ExMapHandleToPointer(
162 IN PHANDLE_TABLE HandleTable
,
168 IN PHANDLE_TABLE HandleTable
,
170 IN PEX_CHANGE_HANDLE_CALLBACK ChangeHandleCallback
,
174 /* PSEH EXCEPTION HANDLING **************************************************/
178 ExSystemExceptionFilter(VOID
);
180 static __inline
_SEH_FILTER(_SEH_ExSystemExceptionFilter
)
182 return ExSystemExceptionFilter();
185 /* OTHER FUNCTIONS **********************************************************/
189 ExfpInterlockedExchange64(
190 LONGLONG
volatile * Destination
,
195 ExpSetTimeZoneInformation(PTIME_ZONE_INFORMATION TimeZoneInformation
);
198 ExpAllocateLocallyUniqueId(OUT LUID
*LocallyUniqueId
);
202 ExTimerRundown(VOID
);
204 #define InterlockedDecrementUL(Addend) \
205 (ULONG)InterlockedDecrement((PLONG)(Addend))
207 #define InterlockedIncrementUL(Addend) \
208 (ULONG)InterlockedIncrement((PLONG)(Addend))
210 #define InterlockedExchangeUL(Target, Value) \
211 (ULONG)InterlockedExchange((PLONG)(Target), (LONG)(Value))
213 #define InterlockedExchangeAddUL(Addend, Value) \
214 (ULONG)InterlockedExchangeAdd((PLONG)(Addend), (LONG)(Value))
216 #define InterlockedCompareExchangeUL(Destination, Exchange, Comperand) \
217 (ULONG)InterlockedCompareExchange((PLONG)(Destination), (LONG)(Exchange), (LONG)(Comperand))
219 #define ExfInterlockedCompareExchange64UL(Destination, Exchange, Comperand) \
220 (ULONGLONG)ExfInterlockedCompareExchange64((PLONGLONG)(Destination), (PLONGLONG)(Exchange), (PLONGLONG)(Comperand))
222 #define ExfpInterlockedExchange64UL(Target, Value) \
223 (ULONGLONG)ExfpInterlockedExchange64((PLONGLONG)(Target), (PLONGLONG)(Value))
225 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_EXECUTIVE_H */