69 #define HANDLE_LOW_BITS (PAGE_SHIFT - 4) 70 #define HANDLE_HIGH_BITS (PAGE_SHIFT - 3) 72 #define HANDLE_LOW_BITS (PAGE_SHIFT - 3) 73 #define HANDLE_HIGH_BITS (PAGE_SHIFT - 2) 75 #define HANDLE_TAG_BITS (2) 76 #define HANDLE_INDEX_BITS (HANDLE_LOW_BITS + 2*HANDLE_HIGH_BITS) 77 #define KERNEL_FLAG_BITS (sizeof(PVOID)*8 - HANDLE_INDEX_BITS - HANDLE_TAG_BITS) 126 #define MAX_FAST_REFS 7 128 #define ExAcquireRundownProtection _ExAcquireRundownProtection 129 #define ExReleaseRundownProtection _ExReleaseRundownProtection 130 #define ExInitializeRundownProtection _ExInitializeRundownProtection 131 #define ExWaitForRundownProtectionRelease _ExWaitForRundownProtectionRelease 132 #define ExRundownCompleted _ExRundownCompleted 133 #define ExGetPreviousMode KeGetPreviousMode 139 #define EXHANDLE_TABLE_ENTRY_LOCK_BIT 1 140 #define FREE_HANDLE_MASK -1 145 #define LOW_LEVEL_ENTRIES (PAGE_SIZE / sizeof(HANDLE_TABLE_ENTRY)) 146 #define MID_LEVEL_ENTRIES (PAGE_SIZE / sizeof(PHANDLE_TABLE_ENTRY)) 147 #define HIGH_LEVEL_ENTRIES (16777216 / (LOW_LEVEL_ENTRIES * MID_LEVEL_ENTRIES)) 152 #define MAX_LOW_INDEX LOW_LEVEL_ENTRIES 153 #define MAX_MID_INDEX (MID_LEVEL_ENTRIES * LOW_LEVEL_ENTRIES) 154 #define MAX_HIGH_INDEX (MID_LEVEL_ENTRIES * MID_LEVEL_ENTRIES * LOW_LEVEL_ENTRIES) 156 #define ExpChangeRundown(x, y, z) (ULONG_PTR)InterlockedCompareExchangePointer(&x->Ptr, (PVOID)y, (PVOID)z) 157 #define ExpChangePushlock(x, y, z) InterlockedCompareExchangePointer((PVOID*)x, (PVOID)y, (PVOID)z) 158 #define ExpSetRundown(x, y) InterlockedExchangePointer(&x->Ptr, (PVOID)y) 164 IN ULONG SystemInformationLength,
565 return (
ULONG)FastRef.RefCnt;
580 FastRef->Object =
NULL;
771 RunRefCacheAware->RunRefSize *
772 (ProcNumber % RunRefCacheAware->Number));
806 if (NewValue !=
Value)
849 if (NewValue !=
Value)
987 #define ExInitializePushLock _ExInitializePushLock 1020 ASSERT(PushLock->Locked);
1054 ASSERT (PushLock->Locked);
1129 ASSERT(PushLock->Locked);
1310 (
Thread->CombinedApcDisable != 0) ||
1323 FastMutex->Owner =
Thread;
1337 FastMutex->Owner =
NULL;
1377 FastMutex->Owner =
NULL;
1496 #define InterlockedDecrementUL(Addend) \ 1497 (ULONG)InterlockedDecrement((PLONG)(Addend)) 1499 #define InterlockedIncrementUL(Addend) \ 1500 (ULONG)InterlockedIncrement((PLONG)(Addend)) 1502 #define InterlockedExchangeUL(Target, Value) \ 1503 (ULONG)InterlockedExchange((PLONG)(Target), (LONG)(Value)) 1505 #define InterlockedExchangeAddUL(Addend, Value) \ 1506 (ULONG)InterlockedExchangeAdd((PLONG)(Addend), (LONG)(Value)) 1508 #define InterlockedCompareExchangeUL(Destination, Exchange, Comperand) \ 1509 (ULONG)InterlockedCompareExchange((PLONG)(Destination), (LONG)(Exchange), (LONG)(Comperand)) 1511 #define InterlockedCompareExchangeSizeT(Destination, Exchange, Comperand) \ 1512 (SIZE_T)InterlockedCompareExchangePointer((PVOID*)(Destination), (PVOID)(SIZE_T)(Exchange), (PVOID)(SIZE_T)(Comperand)) 1514 #define ExfInterlockedCompareExchange64UL(Destination, Exchange, Comperand) \ 1515 (ULONGLONG)ExfInterlockedCompareExchange64((PLONGLONG)(Destination), (PLONGLONG)(Exchange), (PLONGLONG)(Comperand))
LIST_ENTRY ExpPagedLookasideListHead
#define KeGetCurrentIrql()
BOOLEAN NTAPI ExRefreshTimeZoneInformation(IN PLARGE_INTEGER SystemBootTime)
LIST_ENTRY WakeTimerListEntry
FORCEINLINE VOID _ExReleaseRundownProtection(IN PEX_RUNDOWN_REF RunRef)
BOOLEAN NTAPI ExpInitializeCallbacks(VOID)
FORCEINLINE BOOLEAN ExTryToAcquirePushLockExclusive(PEX_PUSH_LOCK PushLock)
#define ExpSetRundown(x, y)
#define RTL_FIELD_SIZE(type, field)
IN CINT OUT PVOID IN ULONG OUT PULONG ReturnLength
FORCEINLINE VOID ExAcquirePushLockExclusive(PEX_PUSH_LOCK PushLock)
VOID FASTCALL ExfRundownCompleted(OUT PEX_RUNDOWN_REF RunRef)
FORCEINLINE PVOID ExGetObjectFastReference(IN EX_FAST_REF FastRef)
VOID NTAPI ExDestroyHandleTable(IN PHANDLE_TABLE HandleTable, IN PVOID DestroyHandleProcedure OPTIONAL)
VOID NTAPI ExWaitForCallBacks(IN PEX_CALLBACK_ROUTINE_BLOCK CallbackRoutineBlock)
enum _WINKD_WORKER_STATE WINKD_WORKER_STATE
FORCEINLINE VOID _ExInitializePushLock(OUT PEX_PUSH_LOCK PushLock)
#define KeRaiseIrql(irql, oldIrql)
PHANDLE_TABLE NTAPI ExDupHandleTable(IN PEPROCESS Process, IN PHANDLE_TABLE HandleTable, IN PEX_DUPLICATE_HANDLE_CALLBACK DupHandleProcedure, IN ULONG_PTR Mask)
FORCEINLINE VOID ExInitializeFastReference(OUT PEX_FAST_REF FastRef, IN OPTIONAL PVOID Object)
FORCEINLINE BOOLEAN ExInsertFastReference(IN OUT PEX_FAST_REF FastRef, IN PVOID Object)
#define KeLowerIrql(oldIrql)
_In_ CDROM_SCAN_FOR_SPECIAL_INFO _In_ PCDROM_SCAN_FOR_SPECIAL_HANDLER Function
_IRQL_requires_same_ _In_opt_ PVOID Argument1
VOID NTAPI ExpInitLookasideLists(VOID)
_Must_inspect_result_ _In_ WDFQUEUE _In_opt_ WDFREQUEST _In_opt_ WDFFILEOBJECT _Inout_opt_ PWDF_REQUEST_PARAMETERS Parameters
PHANDLE_TABLE NTAPI ExCreateHandleTable(IN PEPROCESS Process OPTIONAL)
VOID NTAPI HeadlessInit(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
BOOLEAN NTAPI ExpLockHandleTableEntry(IN PHANDLE_TABLE HandleTable, IN PHANDLE_TABLE_ENTRY HandleTableEntry)
VOID NTAPI ExDereferenceCallBackBlock(IN OUT PEX_CALLBACK CallBack, IN PEX_CALLBACK_ROUTINE_BLOCK CallbackRoutineBlock)
ULONG ExpUnicodeCaseTableDataOffset
PVOID ExpDefaultErrorPort
_In_ WDFDPC _In_ BOOLEAN Wait
VOID NTAPI ExReleaseTimeRefreshLock(VOID)
UNICODE_STRING CmCSDVersionString
VOID FASTCALL ExfWaitForRundownProtectionRelease(IN OUT PEX_RUNDOWN_REF RunRef)
ERESOURCE ExpFirmwareTableResource
FORCEINLINE VOID _ExInitializeRundownProtection(IN PEX_RUNDOWN_REF RunRef)
UNICODE_STRING NtSystemRoot
FAST_MUTEX ExpEnvironmentLock
FORCEINLINE VOID ExWaitOnPushLock(PEX_PUSH_LOCK PushLock)
FORCEINLINE VOID _ExRundownCompleted(IN PEX_RUNDOWN_REF RunRef)
#define InterlockedCompareExchange
PEX_CALLBACK_FUNCTION NTAPI ExGetCallBackBlockRoutine(IN PEX_CALLBACK_ROUTINE_BLOCK CallbackRoutineBlock)
IN PVOID IN PVOID IN USHORT IN USHORT Size
static XMS_HANDLE HandleTable[XMS_MAX_HANDLES]
VOID NTAPI ExInitializeCallBack(IN OUT PEX_CALLBACK Callback)
BOOLEAN NTAPI ExCompareExchangeCallBack(IN OUT PEX_CALLBACK CallBack, IN PEX_CALLBACK_ROUTINE_BLOCK NewBlock, IN PEX_CALLBACK_ROUTINE_BLOCK OldBlock)
NTSTATUS NTAPI ExGetPoolTagInfo(IN PSYSTEM_POOLTAG_INFORMATION SystemInformation, IN ULONG SystemInformationLength, IN OUT PULONG ReturnLength OPTIONAL)
PEX_CALLBACK_ROUTINE_BLOCK NTAPI ExReferenceCallBackBlock(IN OUT PEX_CALLBACK CallBack)
ULONG ExpAnsiCodePageDataOffset
LIST_ENTRY ActiveTimerListEntry
BOOLEAN NTAPI ExpInitializeEventPairImplementation(VOID)
FORCEINLINE VOID _ExReleaseFastMutex(IN OUT PFAST_MUTEX FastMutex)
#define EX_RUNDOWN_COUNT_INC
VOID FASTCALL ExBlockPushLock(IN PEX_PUSH_LOCK PushLock, IN PVOID WaitBlock)
UNICODE_STRING Strings[MAXIMUM_HARDERROR_PARAMETERS]
BOOLEAN(NTAPI * PEX_CHANGE_HANDLE_CALLBACK)(PHANDLE_TABLE_ENTRY HandleTableEntry, ULONG_PTR Context)
VOID FASTCALL ExWaitForUnblockPushLock(IN PEX_PUSH_LOCK PushLock, IN PVOID WaitBlock)
LARGE_INTEGER ExpTimeZoneBias
FORCEINLINE VOID YieldProcessor(VOID)
ULONG ExpInitializationPhase
BOOLEAN(NTAPI * PEX_DUPLICATE_HANDLE_CALLBACK)(IN PEPROCESS Process, IN PHANDLE_TABLE HandleTable, IN PHANDLE_TABLE_ENTRY HandleTableEntry, IN PHANDLE_TABLE_ENTRY NewEntry)
FORCEINLINE EX_FAST_REF ExAcquireFastReference(IN OUT PEX_FAST_REF FastRef)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
LONG NTAPI ExSystemExceptionFilter(VOID)
_Acquires_exclusive_lock_ Resource _Acquires_shared_lock_ Resource _Inout_ PERESOURCE Resource
BOOLEAN NTAPI ExpInitializeTimerImplementation(VOID)
LIST_ENTRY ExpSystemResourcesList
struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE * PGENERAL_LOOKASIDE
POBJECT_TYPE _ExEventObjectType
LIST_ENTRY ExPoolLookasideListHead
FORCEINLINE VOID ExReleasePushLockExclusive(PEX_PUSH_LOCK PushLock)
VOID NTAPI ExSwapinWorkerThreads(IN BOOLEAN AllowSwap)
VOID FASTCALL ExfUnblockPushLock(IN PEX_PUSH_LOCK PushLock, IN PVOID CurrentWaitBlock)
FORCEINLINE EX_FAST_REF ExSwapFastReference(IN PEX_FAST_REF FastRef, IN PVOID Object)
VOID NTAPI ExpInitializeHandleTables(VOID)
VOID NTAPI ExpResourceInitialization(VOID)
BOOLEAN NTAPI ExChangeHandle(IN PHANDLE_TABLE HandleTable, IN HANDLE Handle, IN PEX_CHANGE_HANDLE_CALLBACK ChangeRoutine, IN ULONG_PTR Context)
FORCEINLINE VOID _ExEnterCriticalRegionAndAcquireFastMutexUnsafe(IN OUT PFAST_MUTEX FastMutex)
VOID FASTCALL ExfInitializeRundownProtection(OUT PEX_RUNDOWN_REF RunRef)
VOID NTAPI ExpDebuggerWorker(IN PVOID Context)
BOOLEAN NTAPI ExpInitializeMutantImplementation(VOID)
VOID NTAPI ExpInitializeWorkerThreads(VOID)
PHANDLE_TABLE_ENTRY NTAPI ExMapHandleToPointer(IN PHANDLE_TABLE HandleTable, IN HANDLE Handle)
ULONG ExpOemCodePageDataOffset
KSPIN_LOCK ExpNonPagedLookasideListLock
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
LIST_ENTRY ExpNonPagedLookasideListHead
#define InterlockedBitTestAndSet
VOID NTAPI ExAllocateLocallyUniqueId(OUT LUID *LocallyUniqueId)
PVOID ExpNlsSectionPointer
#define EX_PUSH_LOCK_LOCK
#define InterlockedExchangePointer(Target, Value)
BOOLEAN NTAPI ExpInitializeKeyedEventImplementation(VOID)
FORCEINLINE VOID _ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(IN OUT PFAST_MUTEX FastMutex)
VOID NTAPI Phase1Initialization(IN PVOID Context)
BOOLEAN NTAPI ExpInitializeProfileImplementation(VOID)
FORCEINLINE BOOLEAN _ExAcquireRundownProtection(IN PEX_RUNDOWN_REF RunRef)
#define ExpChangeRundown(x, y, z)
HANDLE GenericHandleOverlay
VOID FASTCALL ExfReleasePushLock(PEX_PUSH_LOCK PushLock)
PEPROCESS ExpDebuggerProcessAttach
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
FORCEINLINE ULONG ExGetCountFastReference(IN EX_FAST_REF FastRef)
VOID FASTCALL ExfReleasePushLockShared(PEX_PUSH_LOCK PushLock)
POBJECT_TYPE _ExSemaphoreObjectType
VOID NTAPI ExpInitializePushLocks(VOID)
VOID FASTCALL ExfReInitializeRundownProtection(OUT PEX_RUNDOWN_REF RunRef)
VOID NTAPI ExTimerRundown(VOID)
VOID NTAPI ExFreeCallBack(IN PEX_CALLBACK_ROUTINE_BLOCK CallbackRoutineBlock)
BOOLEAN FASTCALL ExfAcquireRundownProtectionEx(IN OUT PEX_RUNDOWN_REF RunRef, IN ULONG Count)
KSPIN_LOCK ExpPagedLookasideListLock
PCALLBACK_OBJECT PowerStateCallback
ULONG ExCriticalWorkerThreads
VOID FASTCALL ExfAcquirePushLockExclusive(PEX_PUSH_LOCK PushLock)
#define InterlockedExchangeAddSizeT(a, b)
#define InterlockedDecrement
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
VOID FASTCALL KiAcquireFastMutex(IN PFAST_MUTEX FastMutex)
FORCEINLINE BOOLEAN ExReleaseFastReference(IN PEX_FAST_REF FastRef, IN PVOID Object)
_Must_inspect_result_ _In_ WDFCMRESLIST List
#define KeEnterCriticalRegion()
LIST_ENTRY ExpFirmwareTableProviderListHead
#define MM_SYSTEM_RANGE_START
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
FORCEINLINE EX_FAST_REF ExCompareSwapFastReference(IN PEX_FAST_REF FastRef, IN PVOID Object, IN PVOID OldObject)
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
RTL_TIME_ZONE_INFORMATION ExpTimeZoneInfo
VOID NTAPI ExShutdownSystem(VOID)
BOOLEAN NTAPI ExpUuidInitialization(VOID)
_In_ WDFINTERRUPT _In_ PFN_WDF_INTERRUPT_SYNCHRONIZE Callback
FORCEINLINE VOID ExReleasePushLock(PEX_PUSH_LOCK PushLock)
BOOLEAN NTAPI ExLuidInitialization(VOID)
FORCEINLINE VOID ExAcquirePushLockShared(PEX_PUSH_LOCK PushLock)
FORCEINLINE PEX_RUNDOWN_REF ExGetRunRefForGivenProcessor(IN PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware, IN ULONG ProcNumber)
VOID FASTCALL ExfAcquirePushLockShared(PEX_PUSH_LOCK PushLock)
#define KeLeaveCriticalRegion()
#define InterlockedIncrement
FORCEINLINE VOID _ExAcquireFastMutex(IN PFAST_MUTEX FastMutex)
WINKD_WORKER_STATE ExpDebuggerWork
LIST_ENTRY ExSystemLookasideListHead
BOOLEAN NTAPI ExDestroyHandle(IN PHANDLE_TABLE HandleTable, IN HANDLE Handle, IN PHANDLE_TABLE_ENTRY HandleTableEntry OPTIONAL)
VOID FASTCALL ExfReleaseRundownProtection(IN OUT PEX_RUNDOWN_REF RunRef)
FORCEINLINE VOID ExDoCallBack(IN OUT PEX_CALLBACK Callback, IN PVOID Context, IN PVOID Argument1, IN PVOID Argument2)
struct _HARDERROR_USER_PARAMETERS HARDERROR_USER_PARAMETERS
FORCEINLINE BOOLEAN ExConvertPushLockSharedToExclusive(IN PEX_PUSH_LOCK PushLock)
BOOLEAN NTAPI ExpInitializeSemaphoreImplementation(VOID)
PHANDLE_TABLE_ENTRY NTAPI ExpLookupHandleTableEntry(IN PHANDLE_TABLE HandleTable, IN EXHANDLE Handle)
#define EX_PUSH_LOCK_LOCK_V
VOID FASTCALL ExfReleasePushLockExclusive(PEX_PUSH_LOCK PushLock)
PEPROCESS ExpDefaultErrorPortProcess
ULONG ExDelayedWorkerThreads
BOOLEAN NTAPI ExpWin32kInit(VOID)
HANDLE NTAPI ExCreateHandle(IN PHANDLE_TABLE HandleTable, IN PHANDLE_TABLE_ENTRY HandleTableEntry)
FORCEINLINE BOOLEAN _ExTryToAcquireFastMutex(IN OUT PFAST_MUTEX FastMutex)
VOID NTAPI ExInitializeSystemLookasideList(IN PGENERAL_LOOKASIDE List, IN POOL_TYPE Type, IN ULONG Size, IN ULONG Tag, IN USHORT MaximumDepth, IN PLIST_ENTRY ListHead)
NTSTATUS ExpSetTimeZoneInformation(IN PRTL_TIME_ZONE_INFORMATION TimeZoneInformation)
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
BOOLEAN NTAPI ExpInitializeEventImplementation(VOID)
EX_CALLBACK_FUNCTION * PEX_CALLBACK_FUNCTION
struct tagContext Context
FORCEINLINE VOID ExReleasePushLockShared(PEX_PUSH_LOCK PushLock)
PCALLBACK_OBJECT * CallbackObject
struct _HARDERROR_USER_PARAMETERS * PHARDERROR_USER_PARAMETERS
PEPROCESS ExpDebuggerProcessKill
FORCEINLINE VOID _ExAcquireFastMutexUnsafe(IN PFAST_MUTEX FastMutex)
VOID NTAPI XIPInit(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
VOID NTAPI ExInitPoolLookasidePointers(VOID)
ULONG_PTR ExpDebuggerPageIn
VOID NTAPI KeSetEventBoostPriority(IN PKEVENT Event, IN PKTHREAD *WaitingThread OPTIONAL)
VOID FASTCALL ExfReleaseRundownProtectionEx(IN OUT PEX_RUNDOWN_REF RunRef, IN ULONG Count)
UCHAR ClockSeqHiAndReserved
#define MAXIMUM_HARDERROR_PARAMETERS
struct _UUID_CACHED_VALUES_STRUCT UUID_CACHED_VALUES_STRUCT
VOID NTAPI ExUpdateSystemTimeFromCmos(IN BOOLEAN UpdateInterruptTime, IN ULONG MaxSepInSeconds)
FORCEINLINE VOID _ExReleaseFastMutexUnsafe(IN OUT PFAST_MUTEX FastMutex)
#define KeGetCurrentThread
VOID NTAPI ExpInitializeExecutive(IN ULONG Cpu, IN PLOADER_PARAMETER_BLOCK LoaderBlock)
#define EX_PUSH_LOCK_SHARE_INC
BOOLEAN FASTCALL ExfAcquireRundownProtection(IN OUT PEX_RUNDOWN_REF RunRef)
VOID NTAPI ExSweepHandleTable(IN PHANDLE_TABLE HandleTable, IN PEX_SWEEP_HANDLE_CALLBACK EnumHandleProcedure, IN PVOID Context)
PEX_CALLBACK_ROUTINE_BLOCK NTAPI ExAllocateCallBack(IN PEX_CALLBACK_FUNCTION Function, IN PVOID Context)
BOOLEAN NTAPI ExTryToAcquireResourceExclusiveLite(IN PERESOURCE Resource)
#define ExpChangePushlock(x, y, z)
#define HANDLE_INDEX_BITS
UNICODE_STRING CmVersionString
PVOID NTAPI ExGetCallBackBlockContext(IN PEX_CALLBACK_ROUTINE_BLOCK CallbackRoutineBlock)
POBJECT_TYPE ExEventPairObjectType
#define EX_RUNDOWN_ACTIVE
BOOLEAN(NTAPI * PEX_SWEEP_HANDLE_CALLBACK)(PHANDLE_TABLE_ENTRY HandleTableEntry, HANDLE Handle, PVOID Context)
WORK_QUEUE_ITEM ExpDebuggerWorkItem
FORCEINLINE VOID _ExWaitForRundownProtectionRelease(IN PEX_RUNDOWN_REF RunRef)
VOID NTAPI ExUnlockHandleTableEntry(IN PHANDLE_TABLE HandleTable, IN PHANDLE_TABLE_ENTRY HandleTableEntry)
C_ASSERT(RTL_FIELD_SIZE(UUID_CACHED_VALUES_STRUCT, GuidInit)==RTL_FIELD_SIZE(UUID, Data4))
struct _UUID_CACHED_VALUES_STRUCT * PUUID_CACHED_VALUES_STRUCT
BOOLEAN NTAPI ExAcquireTimeRefreshLock(IN BOOLEAN Wait)
ULONG ExpTickCountMultiplier
ULONG ExpLastTimeZoneBias
union _EXHANDLE * PEXHANDLE
VOID FASTCALL ExfTryToWakePushLock(PEX_PUSH_LOCK PushLock)
PULONG MinorVersion OPTIONAL