/* GLOBAL VARIABLES *********************************************************/
-extern TIME_ZONE_INFORMATION ExpTimeZoneInfo;
+extern RTL_TIME_ZONE_INFORMATION ExpTimeZoneInfo;
extern LARGE_INTEGER ExpTimeZoneBias;
extern ULONG ExpTimeZoneId;
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;
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 LIST_ENTRY ExpPagedLookasideListHead;
extern KSPIN_LOCK ExpNonPagedLookasideListLock;
extern KSPIN_LOCK ExpPagedLookasideListLock;
+extern ULONG ExCriticalWorkerThreads;
+extern ULONG ExDelayedWorkerThreads;
+
+extern PVOID ExpDefaultErrorPort;
+extern PEPROCESS ExpDefaultErrorPortProcess;
+
+/*
+ * 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[];
+
+// #ifdef _WINKD_
+/*
+ * WinDBG Debugger Worker State Machine data (see dbgctrl.c)
+ */
+typedef enum _WINKD_WORKER_STATE
+{
+ 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_LOW_BITS (PAGE_SHIFT - 3)
#define HANDLE_HIGH_BITS (PAGE_SHIFT - 2)
#endif
-#define KERNEL_FLAG_BITS (sizeof(PVOID)*8 - 31)
+#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:2;
- ULONG_PTR Index:29;
+ ULONG_PTR TagBits: HANDLE_TAG_BITS;
+ ULONG_PTR Index: HANDLE_INDEX_BITS;
+ ULONG_PTR KernelFlag : KERNEL_FLAG_BITS;
};
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;
+ 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
IN PLOADER_PARAMETER_BLOCK LoaderBlock
);
+VOID
+NTAPI
+ExShutdownSystem(VOID);
+
BOOLEAN
NTAPI
ExpInitializeEventImplementation(VOID);
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
/* 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,
);
NTSTATUS
-ExpSetTimeZoneInformation(PTIME_ZONE_INFORMATION TimeZoneInformation);
+ExpSetTimeZoneInformation(
+ IN PRTL_TIME_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