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;
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;
+
+/*
+ * 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 KERNEL_FLAG_BITS (sizeof(PVOID)*8 - 31)
+
+typedef union _EXHANDLE
+{
+ struct
+ {
+ ULONG_PTR TagBits:2;
+ ULONG_PTR Index:29;
+ };
+ struct
+ {
+ ULONG_PTR TagBits2:2;
+ ULONG_PTR LowIndex:HANDLE_LOW_BITS;
+ ULONG_PTR MidIndex:HANDLE_HIGH_BITS;
+ ULONG_PTR HighIndex:HANDLE_HIGH_BITS;
+ ULONG_PTR KernelFlag:KERNEL_FLAG_BITS;
+ };
+ HANDLE GenericHandleOverlay;
+ ULONG_PTR Value;
} EXHANDLE, *PEXHANDLE;
typedef struct _ETIMER
/* Sanity checks */
ASSERT(PushLock->Locked);
- ASSERT(PushLock->Waiting || PushLock->Shared > 0);
}
/*++
/* 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;
/* Sanity checks */
ASSERT(PushLock->Locked);
- ASSERT(PushLock->Waiting || PushLock->Shared == 0);
/* Unlock the pushlock */
OldValue.Value = InterlockedExchangeAddSizeT((PSIZE_T)PushLock,