/* EXECUTIVE ROUTINES ******************************************************/
+#ifdef __NTOSKRNL__
+extern POBJECT_TYPE EXPORTED ExDesktopObjectType;
+extern POBJECT_TYPE EXPORTED ExEventObjectType;
+extern POBJECT_TYPE EXPORTED ExWindowStationObjectType;
+extern POBJECT_TYPE EXPORTED ExIoCompletionType;
+#else
+extern POBJECT_TYPE IMPORTED ExDesktopObjectType;
+extern POBJECT_TYPE IMPORTED ExEventObjectType;
+extern POBJECT_TYPE IMPORTED ExWindowStationObjectType;
+extern POBJECT_TYPE IMPORTED ExIoCompletionType;
+#endif
+
#define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))
VOID
BOOLEAN Wait
);
BOOLEAN
+FASTCALL
+ExAcquireRundownProtection (
+ IN PEX_RUNDOWN_REF RunRef
+ );
+BOOLEAN
+FASTCALL
+ExAcquireRundownProtectionEx (
+ IN PEX_RUNDOWN_REF RunRef,
+ IN ULONG Count
+ );
+PVOID
+FASTCALL
+ExfAcquirePushLockExclusive (
+ PVOID Lock
+ );
+PVOID
+FASTCALL
+ExfAcquirePushLockShared (
+ PVOID Lock
+ );
+PVOID
+FASTCALL
+ExfReleasePushLock (
+ PVOID Lock
+ );
+BOOLEAN
STDCALL
ExAcquireSharedStarveExclusive (
PERESOURCE Resource,
IN ULONG Tag
);
+PVOID
+NTAPI
+ExAllocatePoolWithTagPriority(
+ IN POOL_TYPE PoolType,
+ IN SIZE_T NumberOfBytes,
+ IN ULONG Tag,
+ IN EX_POOL_PRIORITY Priority
+ );
+
VOID
STDCALL
ExConvertExclusiveToSharedLite (
PERESOURCE Resource
);
+VOID
+STDCALL
+ExEnumHandleTable (
+ PULONG HandleTable,
+ PVOID Callback,
+ PVOID Param,
+ PHANDLE Handle OPTIONAL
+ );
+
NTSTATUS
STDCALL
ExExtendZone (
* );
*/
#define ExGetCurrentResourceThread() \
- ((ERESOURCE_THREAD)PsGetCurrentThread())
+ ((ERESOURCE_THREAD)KeGetCurrentThread())
+
+LONGLONG
+FASTCALL
+ExfInterlockedCompareExchange64(
+ IN OUT LONGLONG volatile *Destination,
+ IN PLONGLONG ExChange,
+ IN PLONGLONG Comperand
+ );
+
+VOID
+STDCALL
+ExGetCurrentProcessorCounts (
+ PULONG ThreadKernelTime,
+ PULONG TotalCpuTime,
+ PULONG ProcessorNumber
+);
+
+VOID
+STDCALL
+ExGetCurrentProcessorCpuUsage (
+ PULONG CpuUsage
+ );
ULONG
STDCALL
PERESOURCE Resource
);
-ULONG
+KPROCESSOR_MODE
STDCALL
ExGetPreviousMode (
VOID
PERESOURCE Resource
);
+VOID
+FASTCALL
+ExInitializeRundownProtection (
+ IN PEX_RUNDOWN_REF RunRef
+ );
+
/*
* VOID
* ExInitializeSListHead (
* Routine = Routine to be called by the worker thread
* Context = Parameter to be passed to the callback
*/
-#define ExInitializeWorkItem(Item, WorkerRoutine, RoutineContext) \
+#define ExInitializeWorkItem(Item, Routine, RoutineContext) \
ASSERT_IRQL(DISPATCH_LEVEL); \
- (Item)->Routine = (WorkerRoutine); \
- (Item)->Context = (RoutineContext); \
- (Item)->Entry.Flink = NULL; \
- (Item)->Entry.Blink = NULL;
+ (Item)->WorkerRoutine = (Routine); \
+ (Item)->Parameter = (RoutineContext); \
+ (Item)->List.Flink = NULL;
NTSTATUS
STDCALL
PLONG Addend,
PKSPIN_LOCK Lock
);
+
ULONG
STDCALL
ExInterlockedExchangeUlong (
ULONG Value,
PKSPIN_LOCK Lock
);
+
NTSTATUS
STDCALL
ExInterlockedExtendZone (
PKSPIN_LOCK Lock
);
+PSLIST_ENTRY
+FASTCALL
+ExInterlockedFlushSList (
+ IN PSLIST_HEADER ListHead
+ );
+
/*
* PVOID
* ExInterlockedFreeToZone (
PSINGLE_LIST_ENTRY ListEntry,
PKSPIN_LOCK Lock
);
-
-VOID
-ExInterlockedRemoveEntryList (
- PLIST_ENTRY ListHead,
- PLIST_ENTRY Entry,
- PKSPIN_LOCK Lock
- );
-
PLIST_ENTRY
STDCALL
ExInterlockedRemoveHeadList (
PERESOURCE Resource
);
-ULONG
+/* was ULONG */
+USHORT
STDCALL
ExIsResourceAcquiredSharedLite (
PERESOURCE Resource
VOID
STDCALL
ExNotifyCallback (
- IN PVOID CallbackObject,
+ IN PCALLBACK_OBJECT CallbackObject,
IN PVOID Argument1,
IN PVOID Argument2
);
* );
*/
#define ExQueryDepthSList(ListHead) \
- (USHORT)(ListHead)->s.Depth
+ (USHORT)(ListHead)->Depth
VOID
STDCALL
PWORK_QUEUE_ITEM WorkItem,
WORK_QUEUE_TYPE QueueType
);
+
+SIZE_T
+STDCALL
+ExQueryPoolBlockSize (
+ IN PVOID PoolBlock,
+ OUT PBOOLEAN QuotaCharged
+ );
+
VOID
STDCALL
ExRaiseAccessViolation (
ExRaiseStatus (
NTSTATUS Status
);
+VOID
+STDCALL
+ExRaiseException (
+ PEXCEPTION_RECORD pExcptRec
+ );
+VOID
+STDCALL
+ExRaiseHardError (
+ IN NTSTATUS ErrorStatus,
+ IN ULONG NumberOfParameters,
+ IN PUNICODE_STRING UnicodeStringParameterMask OPTIONAL,
+ IN PVOID *Parameters,
+ IN HARDERROR_RESPONSE_OPTION ResponseOption,
+ OUT PHARDERROR_RESPONSE Response
+ );
PVOID
STDCALL
ExReinitializeResourceLite (
PERESOURCE Resource
);
+VOID
+FASTCALL
+ExReInitializeRundownProtection (
+ IN PEX_RUNDOWN_REF RunRef
+ );
+
/* ReactOS Specific: begin */
VOID
FASTCALL
PERESOURCE Resource,
ERESOURCE_THREAD ResourceThreadId
);
-
+VOID
+FASTCALL
+ExReleaseRundownProtection (
+ IN PEX_RUNDOWN_REF RunRef
+ );
+VOID
+FASTCALL
+ExReleaseRundownProtectionEx (
+ IN PEX_RUNDOWN_REF RunRef,
+ IN ULONG Count
+ );
+/* ReactOS Specific: begin */
+VOID STDCALL
+ExRosDumpPagedPoolByTag (
+ IN ULONG Tag
+ );
+ULONG STDCALL
+ExRosQueryPoolTag (
+ IN PVOID Block
+ );
+/* ReactOS Specific: end */
+VOID
+FASTCALL
+ExRundownCompleted (
+ IN PEX_RUNDOWN_REF RunRef
+ );
VOID
STDCALL
ExSetResourceOwnerPointer (
IN PVOID OwnerPointer
);
+VOID
+STDCALL
+ExSetTimerResolution (
+ IN ULONG DesiredTime,
+ IN BOOLEAN SetResolution
+ );
+
+BOOLEAN
+STDCALL
+ExVerifySuite(
+ SUITE_TYPE SuiteType
+ );
+
+BOOLEAN
+STDCALL
+ExSystemExceptionFilter();
+
VOID
STDCALL
ExSystemTimeToLocalTime (
IN PVOID CallbackRegistration
);
+typedef GUID UUID;
+
+NTSTATUS
+STDCALL
+ExUuidCreate(
+ OUT UUID *Uuid
+ );
+
+VOID
+FASTCALL
+ExWaitForRundownProtectionRelease (
+ IN PEX_RUNDOWN_REF RunRef
+ );
+
+PSLIST_ENTRY
+FASTCALL
+InterlockedPopEntrySList (
+ IN PSLIST_HEADER ListHead
+ );
+
+PSLIST_ENTRY
+FASTCALL
+InterlockedPushEntrySList(
+ IN PSLIST_HEADER ListHead,
+ IN PSLIST_ENTRY ListEntry
+ );
/*
* PVOID
Lookaside->TotalAllocates++;
Entry = ExInterlockedPopEntrySList (&Lookaside->ListHead,
- &Lookaside->Lock);
+ &Lookaside->Obsoleted);
if (Entry == NULL)
{
Lookaside->AllocateMisses++;
return Entry;
}
-PVOID
-STDCALL
-ExAllocateFromPagedLookasideList (
- PPAGED_LOOKASIDE_LIST LookSide
- );
+static inline PVOID
+ExAllocateFromPagedLookasideList(
+ IN PPAGED_LOOKASIDE_LIST Lookaside)
+{
+ PVOID Entry;
+
+ Lookaside->TotalAllocates++;
+ Entry = InterlockedPopEntrySList(&Lookaside->ListHead);
+ if (Entry == NULL) {
+ Lookaside->AllocateMisses++;
+ Entry = (Lookaside->Allocate)(Lookaside->Type,
+ Lookaside->Size, Lookaside->Tag);
+ }
+ return Entry;
+}
VOID
STDCALL
)
{
Lookaside->TotalFrees++;
- if (ExQueryDepthSList (&Lookaside->ListHead) >= Lookaside->MinimumDepth)
+ if (ExQueryDepthSList (&Lookaside->ListHead) >= Lookaside->Depth)
{
Lookaside->FreeMisses++;
(Lookaside->Free)(Entry);
{
ExInterlockedPushEntrySList (&Lookaside->ListHead,
(PSINGLE_LIST_ENTRY)Entry,
- &Lookaside->Lock);
+ &Lookaside->Obsoleted);
}
}
-VOID
-STDCALL
-ExFreeToPagedLookasideList (
- PPAGED_LOOKASIDE_LIST Lookaside,
- PVOID Entry
- );
+static inline VOID
+ExFreeToPagedLookasideList(
+ IN PPAGED_LOOKASIDE_LIST Lookaside,
+ IN PVOID Entry)
+{
+ Lookaside->TotalFrees++;
+ if (ExQueryDepthSList(&Lookaside->ListHead) >= Lookaside->Depth) {
+ Lookaside->FreeMisses++;
+ (Lookaside->Free)(Entry);
+ } else {
+ InterlockedPushEntrySList(&Lookaside->ListHead, (PSLIST_ENTRY)Entry);
+ }
+}
VOID
STDCALL
ULONG Tag,
USHORT Depth
);
+
VOID
STDCALL
ExInitializePagedLookasideList (
USHORT Depth
);
+ULONG FASTCALL
+ExfInterlockedAddUlong(IN PULONG Addend,
+ IN ULONG Increment,
+ IN PKSPIN_LOCK Lock);
-ULONG
-FASTCALL
-ExfInterlockedAddUlong (
- IN PULONG Addend,
- IN ULONG Increment,
- IN PKSPIN_LOCK Lock
- );
+PLIST_ENTRY FASTCALL
+ExfInterlockedInsertHeadList(IN PLIST_ENTRY ListHead,
+ IN PLIST_ENTRY ListEntry,
+ IN PKSPIN_LOCK Lock);
-INTERLOCKED_RESULT
-FASTCALL
-Exfi386InterlockedIncrementLong (
- IN PLONG Addend
- );
+PLIST_ENTRY FASTCALL
+ExfInterlockedInsertTailList(IN PLIST_ENTRY ListHead,
+ IN PLIST_ENTRY ListEntry,
+ IN PKSPIN_LOCK Lock);
-INTERLOCKED_RESULT
-FASTCALL
-Exfi386InterlockedDecrementLong (
- IN PLONG Addend
- );
+PSINGLE_LIST_ENTRY FASTCALL
+ExfInterlockedPopEntryList(IN PSINGLE_LIST_ENTRY ListHead,
+ IN PKSPIN_LOCK Lock);
-ULONG
-FASTCALL
-Exfi386InterlockedExchangeUlong (
- IN PULONG Target,
- IN ULONG Value
- );
+PSINGLE_LIST_ENTRY FASTCALL
+ExfInterlockedPushEntryList(IN PSINGLE_LIST_ENTRY ListHead,
+ IN PSINGLE_LIST_ENTRY ListEntry,
+ IN PKSPIN_LOCK Lock);
-INTERLOCKED_RESULT
-STDCALL
-Exi386InterlockedIncrementLong (
- IN PLONG Addend
- );
+PLIST_ENTRY FASTCALL
+ExfInterlockedRemoveHeadList(IN PLIST_ENTRY Head,
+ IN PKSPIN_LOCK Lock);
-INTERLOCKED_RESULT
-STDCALL
-Exi386InterlockedDecrementLong (
- IN PLONG Addend
- );
+INTERLOCKED_RESULT FASTCALL
+Exfi386InterlockedIncrementLong(IN PLONG Addend);
+
+INTERLOCKED_RESULT FASTCALL
+Exfi386InterlockedDecrementLong(IN PLONG Addend);
+
+ULONG FASTCALL
+Exfi386InterlockedExchangeUlong(IN PULONG Target,
+ IN ULONG Value);
+
+INTERLOCKED_RESULT STDCALL
+Exi386InterlockedIncrementLong(IN PLONG Addend);
+
+INTERLOCKED_RESULT STDCALL
+Exi386InterlockedDecrementLong(IN PLONG Addend);
+
+ULONG STDCALL
+Exi386InterlockedExchangeUlong(IN PULONG Target,
+ IN ULONG Value);
-ULONG
-STDCALL
-Exi386InterlockedExchangeUlong (
- IN PULONG Target,
- IN ULONG Value
- );
-/*
LONG
FASTCALL
InterlockedCompareExchange (
- PLONG Target,
- LONG Value,
- LONG Reference
- );
-*/
-PVOID
-FASTCALL
-InterlockedCompareExchange (
- PVOID * Destination,
- PVOID Exchange,
- PVOID Comperand
+ PLONG Destination,
+ LONG Exchange,
+ LONG Comperand
);
+
#ifdef _GNU_H_WINDOWS_H
#ifdef InterlockedDecrement
#undef InterlockedDecrement
PLONG Addend
);
+#ifndef InterlockedExchangePointer
+# ifdef _WIN64
+# define InterlockedExchangePointer(__T__, __V__) \
+ (PVOID)InterlockedExchange64((PLONGLONG)(__T__), (LONGLONG)(__V__))
+# else
+# define InterlockedExchangePointer(__T__, __V__) \
+ (PVOID)InterlockedExchange((PLONG)(__T__), (LONG)(__V__))
+# endif
+#endif
+
+#ifndef InterlockedCompareExchangePointer
+# ifdef _WIN64
+# define InterlockedCompareExchangePointer(__T__, __V__, __C__) \
+ (PVOID)InterlockedCompareExchange64((PLONGLONG)(__T__), (LONGLONG)(__V__), (LONGLONG)(__C__))
+# else
+# define InterlockedCompareExchangePointer(__T__, __V__, __C__) \
+ (PVOID)InterlockedCompareExchange((PLONG)(__T__), (LONG)(__V__), (LONG)(__C__))
+# endif
+#endif
+
/*---*/
typedef
unsigned int
-(exception_hook) (
+(*exception_hook) (
CONTEXT * c,
unsigned int exp
);
unsigned int exp
);
-/* BEGIN REACTOS ONLY */
-
-BOOLEAN STDCALL
-ExInitializeBinaryTree(IN PBINARY_TREE Tree,
- IN PKEY_COMPARATOR Compare,
- IN BOOLEAN UseNonPagedPool);
-
-VOID STDCALL
-ExDeleteBinaryTree(IN PBINARY_TREE Tree);
-
-VOID STDCALL
-ExInsertBinaryTree(IN PBINARY_TREE Tree,
- IN PVOID Key,
- IN PVOID Value);
-
-BOOLEAN STDCALL
-ExSearchBinaryTree(IN PBINARY_TREE Tree,
- IN PVOID Key,
- OUT PVOID * Value);
-
-BOOLEAN STDCALL
-ExRemoveBinaryTree(IN PBINARY_TREE Tree,
- IN PVOID Key,
- IN PVOID * Value);
-
-BOOLEAN STDCALL
-ExTraverseBinaryTree(IN PBINARY_TREE Tree,
- IN TRAVERSE_METHOD Method,
- IN PTRAVERSE_ROUTINE Routine,
- IN PVOID Context);
-
-BOOLEAN STDCALL
-ExInitializeSplayTree(IN PSPLAY_TREE Tree,
- IN PKEY_COMPARATOR Compare,
- IN BOOLEAN Weighted,
- IN BOOLEAN UseNonPagedPool);
-
-VOID STDCALL
-ExDeleteSplayTree(IN PSPLAY_TREE Tree);
-
-VOID STDCALL
-ExInsertSplayTree(IN PSPLAY_TREE Tree,
- IN PVOID Key,
- IN PVOID Value);
-
-BOOLEAN STDCALL
-ExSearchSplayTree(IN PSPLAY_TREE Tree,
- IN PVOID Key,
- OUT PVOID * Value);
-
-BOOLEAN STDCALL
-ExRemoveSplayTree(IN PSPLAY_TREE Tree,
- IN PVOID Key,
- IN PVOID * Value);
-
-BOOLEAN STDCALL
-ExWeightOfSplayTree(IN PSPLAY_TREE Tree,
- OUT PULONG Weight);
-
-BOOLEAN STDCALL
-ExTraverseSplayTree(IN PSPLAY_TREE Tree,
- IN TRAVERSE_METHOD Method,
- IN PTRAVERSE_ROUTINE Routine,
- IN PVOID Context);
-
-BOOLEAN STDCALL
-ExInitializeHashTable(IN PHASH_TABLE HashTable,
- IN ULONG HashTableSize,
- IN PKEY_COMPARATOR Compare OPTIONAL,
- IN BOOLEAN UseNonPagedPool);
-
-VOID STDCALL
-ExDeleteHashTable(IN PHASH_TABLE HashTable);
-
-VOID STDCALL
-ExInsertHashTable(IN PHASH_TABLE HashTable,
- IN PVOID Key,
- IN ULONG KeyLength,
- IN PVOID Value);
-
-BOOLEAN STDCALL
-ExSearchHashTable(IN PHASH_TABLE HashTable,
- IN PVOID Key,
- IN ULONG KeyLength,
- OUT PVOID * Value);
-
-BOOLEAN STDCALL
-ExRemoveHashTable(IN PHASH_TABLE HashTable,
- IN PVOID Key,
- IN ULONG KeyLength,
- IN PVOID * Value);
-
-/* END REACTOS ONLY */
-
#endif /* ndef _NTOS_EXFUNCS_H */