[NTOSKRNL] Rename ExpCriticalWorkerThreads and ExpDelayedWorkerThreads (no p)
[reactos.git] / ntoskrnl / include / internal / ex.h
index 961c1d2..053b8c8 100644 (file)
@@ -9,9 +9,6 @@ extern ULONG ExpTickCountMultiplier;
 extern ULONG ExpLastTimeZoneBias;
 extern POBJECT_TYPE ExEventPairObjectType;
 extern POBJECT_TYPE _ExEventObjectType, _ExSemaphoreObjectType;
-extern ULONG NtBuildNumber;
-extern ULONG NtMajorVersion;
-extern ULONG NtMinorVersion;
 extern FAST_MUTEX ExpEnvironmentLock;
 extern ERESOURCE ExpFirmwareTableResource;
 extern LIST_ENTRY ExpFirmwareTableProviderListHead;
@@ -20,26 +17,82 @@ extern LIST_ENTRY ExpSystemResourcesList;
 extern ULONG ExpAnsiCodePageDataOffset, ExpOemCodePageDataOffset;
 extern ULONG ExpUnicodeCaseTableDataOffset;
 extern PVOID ExpNlsSectionPointer;
-extern CHAR NtBuildLab[];
-extern ULONG CmNtCSDVersion;
 extern ULONG NtGlobalFlag;
+extern UNICODE_STRING NtSystemRoot;
 extern ULONG ExpInitializationPhase;
 extern ULONG ExpAltTimeZoneBias;
 extern LIST_ENTRY ExSystemLookasideListHead;
 extern PCALLBACK_OBJECT PowerStateCallback;
+extern LIST_ENTRY ExPoolLookasideListHead;
+extern LIST_ENTRY ExpNonPagedLookasideListHead;
+extern LIST_ENTRY ExpPagedLookasideListHead;
+extern KSPIN_LOCK ExpNonPagedLookasideListLock;
+extern KSPIN_LOCK ExpPagedLookasideListLock;
+extern ULONG ExCriticalWorkerThreads;
+extern ULONG ExDelayedWorkerThreads;
+
+/*
+ * NT/Cm Version Info variables
+ */
+extern ULONG NtMajorVersion;
+extern ULONG NtMinorVersion;
+extern ULONG NtBuildNumber;
+extern ULONG CmNtSpBuildNumber;
+extern ULONG CmNtCSDVersion;
+extern ULONG CmNtCSDReleaseType;
+extern UNICODE_STRING CmVersionString;
+extern UNICODE_STRING CmCSDVersionString;
+extern CHAR NtBuildLab[];
 
-typedef struct _EXHANDLE
+// #ifdef _WINKD_
+/*
+ * WinDBG Debugger Worker State Machine data (see dbgctrl.c)
+ */
+typedef enum _WINKD_WORKER_STATE
 {
-    union
-    {
-        struct
-        {
-            ULONG TagBits:2;
-            ULONG Index:30;
-        };
-        HANDLE GenericHandleOverlay;
-        ULONG_PTR Value;
-    };
+    WinKdWorkerReady = 0,
+    WinKdWorkerStart,
+    WinKdWorkerInitialized
+} WINKD_WORKER_STATE;
+
+extern WORK_QUEUE_ITEM ExpDebuggerWorkItem;
+extern WINKD_WORKER_STATE ExpDebuggerWork;
+extern PEPROCESS ExpDebuggerProcessAttach;
+extern PEPROCESS ExpDebuggerProcessKill;
+extern ULONG_PTR ExpDebuggerPageIn;
+VOID NTAPI ExpDebuggerWorker(IN PVOID Context);
+// #endif /* _WINKD_ */
+
+#ifdef _WIN64
+#define HANDLE_LOW_BITS (PAGE_SHIFT - 4)
+#define HANDLE_HIGH_BITS (PAGE_SHIFT - 3)
+#else
+#define HANDLE_LOW_BITS (PAGE_SHIFT - 3)
+#define HANDLE_HIGH_BITS (PAGE_SHIFT - 2)
+#endif
+#define HANDLE_TAG_BITS (2)
+#define HANDLE_INDEX_BITS (HANDLE_LOW_BITS + 2*HANDLE_HIGH_BITS)
+#define KERNEL_FLAG_BITS (sizeof(PVOID)*8 - HANDLE_INDEX_BITS - HANDLE_TAG_BITS)
+
+typedef union _EXHANDLE
+{
+     struct
+     {
+         ULONG_PTR TagBits:     HANDLE_TAG_BITS;
+         ULONG_PTR Index:       HANDLE_INDEX_BITS;
+         ULONG_PTR KernelFlag : KERNEL_FLAG_BITS;
+     };
+     struct
+     {
+         ULONG_PTR TagBits2:    HANDLE_TAG_BITS;
+         ULONG_PTR LowIndex:    HANDLE_LOW_BITS;
+         ULONG_PTR MidIndex:    HANDLE_HIGH_BITS;
+         ULONG_PTR HighIndex:   HANDLE_HIGH_BITS;
+         ULONG_PTR KernelFlag2: KERNEL_FLAG_BITS;
+     };
+     HANDLE GenericHandleOverlay;
+     ULONG_PTR Value;
+     ULONG AsULONG;
 } EXHANDLE, *PEXHANDLE;
 
 typedef struct _ETIMER
@@ -98,34 +151,6 @@ typedef struct _HARDERROR_USER_PARAMETERS
 #define MAX_MID_INDEX       (MID_LEVEL_ENTRIES * LOW_LEVEL_ENTRIES)
 #define MAX_HIGH_INDEX      (MID_LEVEL_ENTRIES * MID_LEVEL_ENTRIES * LOW_LEVEL_ENTRIES)
 
-//
-// Detect old GCC
-//
-#if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ < 40300) || \
-    (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__ == 40303)
-
-#define DEFINE_WAIT_BLOCK(x)                                \
-    struct _AlignHack                                       \
-    {                                                       \
-        UCHAR Hack[15];                                     \
-        EX_PUSH_LOCK_WAIT_BLOCK UnalignedBlock;             \
-    } WaitBlockBuffer;                                      \
-    PEX_PUSH_LOCK_WAIT_BLOCK x = (PEX_PUSH_LOCK_WAIT_BLOCK) \
-        ((ULONG_PTR)&WaitBlockBuffer.UnalignedBlock &~ 0xF);
-
-#else
-
-//
-// This is only for compatibility; the compiler will optimize the extra
-// local variable (the actual pointer) away, so we don't take any perf hit
-// by doing this.
-//
-#define DEFINE_WAIT_BLOCK(x)                                \
-    EX_PUSH_LOCK_WAIT_BLOCK WaitBlockBuffer;                \
-    PEX_PUSH_LOCK_WAIT_BLOCK x = &WaitBlockBuffer;
-
-#endif
-
 #define ExpChangeRundown(x, y, z) (ULONG_PTR)InterlockedCompareExchangePointer(&x->Ptr, (PVOID)y, (PVOID)z)
 #define ExpChangePushlock(x, y, z) InterlockedCompareExchangePointer((PVOID*)x, (PVOID)y, (PVOID)z)
 #define ExpSetRundown(x, y) InterlockedExchangePointer(&x->Ptr, (PVOID)y)
@@ -447,6 +472,20 @@ ExSweepHandleTable(
     IN PVOID Context
 );
 
+PHANDLE_TABLE_ENTRY
+NTAPI
+ExpLookupHandleTableEntry(
+    IN PHANDLE_TABLE HandleTable,
+    IN EXHANDLE Handle
+);
+
+BOOLEAN
+NTAPI
+ExpLockHandleTableEntry(
+    IN PHANDLE_TABLE HandleTable,
+    IN PHANDLE_TABLE_ENTRY HandleTableEntry
+);
+
 /* PSEH EXCEPTION HANDLING **************************************************/
 
 LONG
@@ -1013,7 +1052,6 @@ ExAcquirePushLockShared(PEX_PUSH_LOCK PushLock)
 
     /* Sanity checks */
     ASSERT(PushLock->Locked);
-    ASSERT(PushLock->Waiting || PushLock->Shared > 0);
 }
 
 /*++
@@ -1114,7 +1152,6 @@ ExReleasePushLockShared(PEX_PUSH_LOCK PushLock)
 
     /* Sanity checks */
     ASSERT(PushLock->Locked);
-    ASSERT(PushLock->Waiting || PushLock->Shared > 0);
 
     /* Try to clear the pushlock */
     OldValue.Value = EX_PUSH_LOCK_LOCK | EX_PUSH_LOCK_SHARE_INC;
@@ -1154,7 +1191,6 @@ ExReleasePushLockExclusive(PEX_PUSH_LOCK PushLock)
 
     /* Sanity checks */
     ASSERT(PushLock->Locked);
-    ASSERT(PushLock->Waiting || PushLock->Shared == 0);
 
     /* Unlock the pushlock */
     OldValue.Value = InterlockedExchangeAddSizeT((PSIZE_T)PushLock,
@@ -1372,28 +1408,40 @@ ExTryToAcquireResourceExclusiveLite(
 );
 
 NTSTATUS
-ExpSetTimeZoneInformation(PTIME_ZONE_INFORMATION TimeZoneInformation);
+ExpSetTimeZoneInformation(
+    IN PTIME_ZONE_INFORMATION TimeZoneInformation
+);
 
 BOOLEAN
 NTAPI
-ExAcquireTimeRefreshLock(BOOLEAN Wait);
+ExAcquireTimeRefreshLock(
+    IN BOOLEAN Wait
+);
 
 VOID
 NTAPI
-ExReleaseTimeRefreshLock(VOID);
+ExReleaseTimeRefreshLock(
+    VOID
+);
 
 VOID
 NTAPI
-ExUpdateSystemTimeFromCmos(IN BOOLEAN UpdateInterruptTime,
-                           IN ULONG MaxSepInSeconds);
+ExUpdateSystemTimeFromCmos(
+    IN BOOLEAN UpdateInterruptTime,
+    IN ULONG MaxSepInSeconds
+);
 
-NTSTATUS
+VOID
 NTAPI
-ExpAllocateLocallyUniqueId(OUT LUID *LocallyUniqueId);
+ExAllocateLocallyUniqueId(
+    OUT LUID *LocallyUniqueId
+);
 
 VOID
 NTAPI
-ExTimerRundown(VOID);
+ExTimerRundown(
+    VOID
+);
 
 VOID
 NTAPI