ExInitializeWorkItem: synch with Windows (only NULL the Flink)
[reactos.git] / reactos / include / ddk / exfuncs.h
index 1dcd6ac..3557b5d 100644 (file)
@@ -3,6 +3,18 @@
 
 /* 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
@@ -34,6 +46,32 @@ ExAcquireResourceSharedLite (
        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,
@@ -108,6 +146,15 @@ ExAllocatePoolWithTag (
        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 (
@@ -140,6 +187,15 @@ ExDisableResourceBoostLite (
        PERESOURCE      Resource
        );
 
+VOID
+STDCALL
+ExEnumHandleTable (
+       PULONG  HandleTable,
+       PVOID   Callback,
+       PVOID   Param,
+       PHANDLE Handle OPTIONAL
+       );
+
 NTSTATUS
 STDCALL
 ExExtendZone (
@@ -187,13 +243,35 @@ ExFreePool (
 #define ExGetCurrentResourceThread() \
        ((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
 ExGetExclusiveWaiterCount (
        PERESOURCE      Resource
        );
 
-ULONG
+KPROCESSOR_MODE
 STDCALL
 ExGetPreviousMode (
        VOID
@@ -230,6 +308,12 @@ ExInitializeResourceLite (
        PERESOURCE      Resource
        );
 
+VOID
+FASTCALL
+ExInitializeRundownProtection (
+    IN PEX_RUNDOWN_REF RunRef
+    );
+
 /*
  * VOID
  * ExInitializeSListHead (
@@ -256,12 +340,11 @@ ExInitializeResourceLite (
  *     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
@@ -288,7 +371,7 @@ ExInterlockedAddLargeStatistic (
        );
 
 ULONG
-FASTCALL
+STDCALL
 ExInterlockedAddUlong (
        PULONG          Addend,
        ULONG           Increment,
@@ -321,6 +404,7 @@ ExInterlockedDecrementLong (
        PLONG           Addend,
        PKSPIN_LOCK     Lock
        );
+
 ULONG
 STDCALL
 ExInterlockedExchangeUlong (
@@ -328,6 +412,7 @@ ExInterlockedExchangeUlong (
        ULONG           Value,
        PKSPIN_LOCK     Lock
        );
+
 NTSTATUS
 STDCALL
 ExInterlockedExtendZone (
@@ -337,6 +422,12 @@ ExInterlockedExtendZone (
        PKSPIN_LOCK     Lock
        );
 
+PSLIST_ENTRY
+FASTCALL
+ExInterlockedFlushSList (
+    IN PSLIST_HEADER ListHead
+    );
+
 /*
  * PVOID
  * ExInterlockedFreeToZone (
@@ -355,21 +446,21 @@ ExInterlockedIncrementLong (
        PKSPIN_LOCK     Lock
        );
 PLIST_ENTRY
-FASTCALL
+STDCALL
 ExInterlockedInsertHeadList (
        PLIST_ENTRY     ListHead,
        PLIST_ENTRY     ListEntry,
        PKSPIN_LOCK     Lock
        );
 PLIST_ENTRY
-FASTCALL
+STDCALL
 ExInterlockedInsertTailList (
        PLIST_ENTRY     ListHead,
        PLIST_ENTRY     ListEntry,
        PKSPIN_LOCK     Lock
        );
 PSINGLE_LIST_ENTRY
-FASTCALL
+STDCALL
 ExInterlockedPopEntryList (
        PSINGLE_LIST_ENTRY      ListHead,
        PKSPIN_LOCK             Lock
@@ -381,7 +472,7 @@ ExInterlockedPopEntrySList (
        PKSPIN_LOCK     Lock
        );
 PSINGLE_LIST_ENTRY
-FASTCALL
+STDCALL
 ExInterlockedPushEntryList (
        PSINGLE_LIST_ENTRY      ListHead,
        PSINGLE_LIST_ENTRY      ListEntry,
@@ -394,16 +485,8 @@ ExInterlockedPushEntrySList (
        PSINGLE_LIST_ENTRY      ListEntry,
        PKSPIN_LOCK             Lock
        );
-
-VOID
-ExInterlockedRemoveEntryList (
-       PLIST_ENTRY     ListHead,
-       PLIST_ENTRY     Entry,
-       PKSPIN_LOCK     Lock
-       );
-
 PLIST_ENTRY
-FASTCALL
+STDCALL
 ExInterlockedRemoveHeadList (
        PLIST_ENTRY     Head,
        PKSPIN_LOCK     Lock
@@ -441,7 +524,7 @@ ExIsResourceAcquiredExclusiveLite (
        PERESOURCE      Resource
        );
 
-// was ULONG
+/* was ULONG */
 USHORT
 STDCALL
 ExIsResourceAcquiredSharedLite (
@@ -478,7 +561,7 @@ ExPostSystemEvent (
  *     );
  */
 #define ExQueryDepthSList(ListHead) \
-       (USHORT)(ListHead)->s.Depth
+       (USHORT)(ListHead)->Depth
 
 VOID
 STDCALL
@@ -486,6 +569,14 @@ ExQueueWorkItem (
        PWORK_QUEUE_ITEM        WorkItem,
        WORK_QUEUE_TYPE         QueueType
        );
+
+SIZE_T
+STDCALL
+ExQueryPoolBlockSize (                          
+    IN PVOID PoolBlock,                         
+    OUT PBOOLEAN QuotaCharged                   
+    );  
+
 VOID
 STDCALL
 ExRaiseAccessViolation (
@@ -501,6 +592,21 @@ STDCALL
 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
@@ -515,6 +621,12 @@ STDCALL
 ExReinitializeResourceLite (
        PERESOURCE      Resource
        );
+VOID
+FASTCALL
+ExReInitializeRundownProtection (
+    IN PEX_RUNDOWN_REF RunRef
+    );
+
 /* ReactOS Specific: begin */
 VOID
 FASTCALL
@@ -554,7 +666,32 @@ ExReleaseResourceForThreadLite (
        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 (
@@ -562,6 +699,23 @@ 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 (
@@ -587,6 +741,20 @@ ExUnregisterCallback (
        IN      PVOID   CallbackRegistration
        );
 
+typedef GUID UUID;
+
+NTSTATUS
+STDCALL
+ExUuidCreate(
+    OUT UUID *Uuid
+    );
+
+VOID
+FASTCALL
+ExWaitForRundownProtectionRelease (
+    IN PEX_RUNDOWN_REF RunRef
+    );
+
 PSLIST_ENTRY
 FASTCALL
 InterlockedPopEntrySList (
@@ -832,15 +1000,30 @@ InterlockedIncrement (
        );
 
 #ifndef InterlockedExchangePointer
-#define InterlockedExchangePointer(__T__, __V__) \
- (PVOID)InterlockedExchange((PLONG)(__T__), (LONG)(__V__))
+# 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
        );