1 /******************************************************************************
2 * Executive Functions *
3 ******************************************************************************/
6 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
7 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
8 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
10 #define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
11 #define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
12 #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
13 #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
15 #define ExInitializeSListHead InitializeSListHead
17 #if defined(_NTHAL_) && defined(_X86_)
23 IN OUT PFAST_MUTEX FastMutex
);
29 IN OUT PFAST_MUTEX FastMutex
);
34 ExiTryToAcquireFastMutex(
35 IN OUT PFAST_MUTEX FastMutex
);
37 #define ExAcquireFastMutex ExiAcquireFastMutex
38 #define ExReleaseFastMutex ExiReleaseFastMutex
39 #define ExTryToAcquireFastMutex ExiTryToAcquireFastMutex
43 #if (NTDDI_VERSION >= NTDDI_WIN2K)
49 IN OUT PFAST_MUTEX FastMutex
);
55 IN OUT PFAST_MUTEX FastMutex
);
60 ExTryToAcquireFastMutex(
61 IN OUT PFAST_MUTEX FastMutex
);
63 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
65 #endif /* defined(_NTHAL_) && defined(_X86_) */
68 #define ExInterlockedAddUlong ExfInterlockedAddUlong
69 #define ExInterlockedInsertHeadList ExfInterlockedInsertHeadList
70 #define ExInterlockedInsertTailList ExfInterlockedInsertTailList
71 #define ExInterlockedRemoveHeadList ExfInterlockedRemoveHeadList
72 #define ExInterlockedPopEntryList ExfInterlockedPopEntryList
73 #define ExInterlockedPushEntryList ExfInterlockedPushEntryList
74 #endif /* defined(_X86_) */
78 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || \
79 defined(_NTHAL_) || defined(_NTOSP_)
82 ExQueryDepthSList(IN PSLIST_HEADER ListHead
);
86 ExQueryDepthSList(IN PSLIST_HEADER ListHead
)
88 return (USHORT
)(ListHead
->Alignment
& 0xffff);
94 ExpInterlockedFlushSList(
95 PSLIST_HEADER ListHead
);
99 ExpInterlockedPopEntrySList(
100 PSLIST_HEADER ListHead
);
104 ExpInterlockedPushEntrySList(
105 PSLIST_HEADER ListHead
,
106 PSLIST_ENTRY ListEntry
);
108 #define ExInterlockedFlushSList(Head) \
109 ExpInterlockedFlushSList(Head)
110 #define ExInterlockedPopEntrySList(Head, Lock) \
111 ExpInterlockedPopEntrySList(Head)
112 #define ExInterlockedPushEntrySList(Head, Entry, Lock) \
113 ExpInterlockedPushEntrySList(Head, Entry)
115 #else /* !defined(_WIN64) */
117 #define ExQueryDepthSList(listhead) (listhead)->Depth
122 ExInterlockedFlushSList(
123 IN OUT PSLIST_HEADER ListHead
);
125 #endif /* !defined(_WIN64) */
127 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
132 ExInterlockedPopEntrySList(
133 IN PSLIST_HEADER ListHead
,
134 IN PKSPIN_LOCK Lock
);
139 ExInterlockedPushEntrySList(
140 IN PSLIST_HEADER ListHead
,
141 IN PSINGLE_LIST_ENTRY ListEntry
,
142 IN PKSPIN_LOCK Lock
);
147 ExAllocateFromPagedLookasideList(
148 IN OUT PPAGED_LOOKASIDE_LIST Lookaside
);
153 ExFreeToPagedLookasideList(
154 IN OUT PPAGED_LOOKASIDE_LIST Lookaside
,
157 #else /* !_WIN2K_COMPAT_SLIST_USAGE */
160 #define ExInterlockedPopEntrySList(_ListHead, _Lock) \
161 InterlockedPopEntrySList(_ListHead)
162 #define ExInterlockedPushEntrySList(_ListHead, _ListEntry, _Lock) \
163 InterlockedPushEntrySList(_ListHead, _ListEntry)
168 ExAllocateFromPagedLookasideList(
169 IN OUT PPAGED_LOOKASIDE_LIST Lookaside
)
173 Lookaside
->L
.TotalAllocates
++;
174 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
176 Lookaside
->L
.AllocateMisses
++;
177 Entry
= (Lookaside
->L
.Allocate
)(Lookaside
->L
.Type
,
186 ExFreeToPagedLookasideList(
187 IN OUT PPAGED_LOOKASIDE_LIST Lookaside
,
190 Lookaside
->L
.TotalFrees
++;
191 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
192 Lookaside
->L
.FreeMisses
++;
193 (Lookaside
->L
.Free
)(Entry
);
195 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
199 #endif /* _WIN2K_COMPAT_SLIST_USAGE */
203 * ExGetCurrentResourceThread(
206 #define ExGetCurrentResourceThread() ((ULONG_PTR)PsGetCurrentThread())
208 #define ExReleaseResource(R) (ExReleaseResourceLite(R))
211 * ExInitializeWorkItem(
212 * IN PWORK_QUEUE_ITEM Item,
213 * IN PWORKER_THREAD_ROUTINE Routine,
216 #define ExInitializeWorkItem(Item, Routine, Context) \
218 (Item)->WorkerRoutine = Routine; \
219 (Item)->Parameter = Context; \
220 (Item)->List.Flink = NULL; \
225 ExInitializeFastMutex(
226 OUT PFAST_MUTEX FastMutex
)
228 FastMutex
->Count
= FM_LOCK_BIT
;
229 FastMutex
->Owner
= NULL
;
230 FastMutex
->Contention
= 0;
231 KeInitializeEvent(&FastMutex
->Event
, SynchronizationEvent
, FALSE
);
237 static __inline PVOID
239 IN PZONE_HEADER Zone
)
241 if (Zone
->FreeList
.Next
)
242 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
243 return (PVOID
) Zone
->FreeList
.Next
;
246 static __inline PVOID
248 IN PZONE_HEADER Zone
,
251 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
252 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
253 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
258 * ExInterlockedAllocateFromZone(
259 * IN PZONE_HEADER Zone,
260 * IN PKSPIN_LOCK Lock)
262 #define ExInterlockedAllocateFromZone(Zone, Lock) \
263 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
266 * ExInterlockedFreeToZone(
267 * IN PZONE_HEADER Zone,
269 * IN PKSPIN_LOCK Lock);
271 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
272 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
277 * IN PZONE_HEADER Zone)
279 #define ExIsFullZone(Zone) \
280 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
283 * ExIsObjectInFirstZoneSegment(
284 * IN PZONE_HEADER Zone,
287 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
288 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
289 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
290 (Zone)->TotalSegmentSize)) )
292 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
293 #define ExAcquireResourceShared ExAcquireResourceSharedLite
294 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
295 #define ExDeleteResource ExDeleteResourceLite
296 #define ExInitializeResource ExInitializeResourceLite
297 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
298 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
299 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
300 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
303 #define RESULT_ZERO 0
304 #define RESULT_NEGATIVE 1
305 #define RESULT_POSITIVE 2
308 typedef enum _INTERLOCKED_RESULT
{
309 ResultNegative
= RESULT_NEGATIVE
,
310 ResultZero
= RESULT_ZERO
,
311 ResultPositive
= RESULT_POSITIVE
312 } INTERLOCKED_RESULT
;
319 Exfi386InterlockedIncrementLong(
320 IN OUT LONG
volatile *Addend
);
325 Exfi386InterlockedDecrementLong(
331 Exfi386InterlockedExchangeUlong(
340 #define ExDisableResourceBoost ExDisableResourceBoostLite
343 ExInitializePushLock (
344 OUT PEX_PUSH_LOCK PushLock
);
347 #if (NTDDI_VERSION >= NTDDI_WIN2K)
352 ExAcquireFastMutexUnsafe(
353 IN OUT PFAST_MUTEX FastMutex
);
358 ExReleaseFastMutexUnsafe(
359 IN OUT PFAST_MUTEX FastMutex
);
364 ExAcquireResourceExclusiveLite(
365 IN OUT PERESOURCE Resource
,
371 ExAcquireResourceSharedLite(
372 IN OUT PERESOURCE Resource
,
378 ExAcquireSharedStarveExclusive(
379 IN OUT PERESOURCE Resource
,
385 ExAcquireSharedWaitForExclusive(
386 IN OUT PERESOURCE Resource
,
393 IN POOL_TYPE PoolType
,
394 IN SIZE_T NumberOfBytes
);
399 ExAllocatePoolWithQuota(
400 IN POOL_TYPE PoolType
,
401 IN SIZE_T NumberOfBytes
);
406 ExAllocatePoolWithQuotaTag(
407 IN POOL_TYPE PoolType
,
408 IN SIZE_T NumberOfBytes
,
412 #define ExAllocatePoolWithQuotaTag(a,b,c) ExAllocatePoolWithQuota(a,b)
418 ExAllocatePoolWithTag(
419 IN POOL_TYPE PoolType
,
420 IN SIZE_T NumberOfBytes
,
424 #define ExAllocatePoolWithTag(a,b,c) ExAllocatePool(a,b)
430 ExAllocatePoolWithTagPriority(
431 IN POOL_TYPE PoolType
,
432 IN SIZE_T NumberOfBytes
,
434 IN EX_POOL_PRIORITY Priority
);
439 ExConvertExclusiveToSharedLite(
440 IN OUT PERESOURCE Resource
);
446 OUT PCALLBACK_OBJECT
*CallbackObject
,
447 IN POBJECT_ATTRIBUTES ObjectAttributes
,
449 IN BOOLEAN AllowMultipleCallbacks
);
454 ExDeleteNPagedLookasideList(
455 IN OUT PNPAGED_LOOKASIDE_LIST Lookaside
);
460 ExDeletePagedLookasideList(
461 IN PPAGED_LOOKASIDE_LIST Lookaside
);
466 ExDeleteResourceLite(
467 IN OUT PERESOURCE Resource
);
485 ExGetExclusiveWaiterCount(
486 IN PERESOURCE Resource
);
491 ExGetPreviousMode(VOID
);
496 ExGetSharedWaiterCount(
497 IN PERESOURCE Resource
);
502 ExInitializeNPagedLookasideList(
503 IN PNPAGED_LOOKASIDE_LIST Lookaside
,
504 IN PALLOCATE_FUNCTION Allocate OPTIONAL
,
505 IN PFREE_FUNCTION Free OPTIONAL
,
514 ExInitializePagedLookasideList(
515 IN PPAGED_LOOKASIDE_LIST Lookaside
,
516 IN PALLOCATE_FUNCTION Allocate OPTIONAL
,
517 IN PFREE_FUNCTION Free OPTIONAL
,
526 ExInitializeResourceLite(
527 OUT PERESOURCE Resource
);
532 ExInterlockedAddLargeInteger(
533 IN PLARGE_INTEGER Addend
,
534 IN LARGE_INTEGER Increment
,
535 IN PKSPIN_LOCK Lock
);
538 #define ExInterlockedAddLargeStatistic(Addend, Increment) \
539 (VOID)InterlockedAdd64(&(Addend)->QuadPart, Increment)
541 #define ExInterlockedAddLargeStatistic(Addend, Increment) \
542 _InterlockedAddLargeStatistic((PLONGLONG)&(Addend)->QuadPart, Increment)
548 ExInterlockedAddUlong(
551 IN OUT PKSPIN_LOCK Lock
);
553 #if defined(_AMD64_) || defined(_IA64_)
555 #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
556 InterlockedCompareExchange64(Destination, *(Exchange), *(Comperand))
563 ExfInterlockedCompareExchange64(
564 IN OUT LONGLONG
volatile *Destination
,
565 IN PLONGLONG Exchange
,
566 IN PLONGLONG Comperand
);
568 #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
569 ExfInterlockedCompareExchange64(Destination, Exchange, Comperand)
576 ExInterlockedCompareExchange64(
577 IN OUT LONGLONG
volatile *Destination
,
578 IN PLONGLONG Exchange
,
579 IN PLONGLONG Comparand
,
580 IN PKSPIN_LOCK Lock
);
582 #endif /* defined(_AMD64_) || defined(_IA64_) */
587 ExInterlockedInsertHeadList(
588 IN OUT PLIST_ENTRY ListHead
,
589 IN OUT PLIST_ENTRY ListEntry
,
590 IN OUT PKSPIN_LOCK Lock
);
595 ExInterlockedInsertTailList(
596 IN OUT PLIST_ENTRY ListHead
,
597 IN OUT PLIST_ENTRY ListEntry
,
598 IN OUT PKSPIN_LOCK Lock
);
603 ExInterlockedPopEntryList(
604 IN OUT PSINGLE_LIST_ENTRY ListHead
,
605 IN OUT PKSPIN_LOCK Lock
);
610 ExInterlockedPushEntryList(
611 IN OUT PSINGLE_LIST_ENTRY ListHead
,
612 IN OUT PSINGLE_LIST_ENTRY ListEntry
,
613 IN OUT PKSPIN_LOCK Lock
);
618 ExInterlockedRemoveHeadList(
619 IN OUT PLIST_ENTRY ListHead
,
620 IN OUT PKSPIN_LOCK Lock
);
625 ExIsProcessorFeaturePresent(
626 IN ULONG ProcessorFeature
);
631 ExIsResourceAcquiredExclusiveLite(
632 IN PERESOURCE Resource
);
637 ExIsResourceAcquiredSharedLite(
638 IN PERESOURCE Resource
);
640 #define ExIsResourceAcquiredLite ExIsResourceAcquiredSharedLite
645 ExLocalTimeToSystemTime(
646 IN PLARGE_INTEGER LocalTime
,
647 OUT PLARGE_INTEGER SystemTime
);
653 IN PCALLBACK_OBJECT CallbackObject
,
654 IN PVOID Argument1 OPTIONAL
,
655 IN PVOID Argument2 OPTIONAL
);
661 IN OUT PWORK_QUEUE_ITEM WorkItem
,
662 IN WORK_QUEUE_TYPE QueueType
);
675 IN PCALLBACK_OBJECT CallbackObject
,
676 IN PCALLBACK_FUNCTION CallbackFunction
,
677 IN PVOID CallbackContext OPTIONAL
);
682 ExReinitializeResourceLite(
683 IN OUT PERESOURCE Resource
);
688 ExReleaseResourceForThreadLite(
689 IN OUT PERESOURCE Resource
,
690 IN ERESOURCE_THREAD ResourceThreadId
);
695 ExReleaseResourceLite(
696 IN OUT PERESOURCE Resource
);
701 ExSetResourceOwnerPointer(
702 IN OUT PERESOURCE Resource
,
703 IN PVOID OwnerPointer
);
708 ExSetTimerResolution(
709 IN ULONG DesiredTime
,
710 IN BOOLEAN SetResolution
);
715 ExSystemTimeToLocalTime(
716 IN PLARGE_INTEGER SystemTime
,
717 OUT PLARGE_INTEGER LocalTime
);
722 ExUnregisterCallback(
723 IN OUT PVOID CbRegistration
);
731 IN OUT PZONE_HEADER Zone
,
732 IN OUT PVOID Segment
,
733 IN ULONG SegmentSize
);
739 OUT PZONE_HEADER Zone
,
741 IN OUT PVOID InitialSegment
,
742 IN ULONG InitialSegmentSize
);
747 ExInterlockedExtendZone(
748 IN OUT PZONE_HEADER Zone
,
749 IN OUT PVOID Segment
,
750 IN ULONG SegmentSize
,
751 IN OUT PKSPIN_LOCK Lock
);
763 ExRaiseAccessViolation(VOID
);
769 ExRaiseDatatypeMisalignment(VOID
);
777 ExQueryPoolBlockSize(
779 OUT PBOOLEAN QuotaCharged
);
782 ExAdjustLookasideDepth(
788 ExDisableResourceBoostLite(
789 IN PERESOURCE Resource
);
791 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
793 $
if (_WDMDDK_
|| _NTIFS_
)
794 #if (NTDDI_VERSION >= NTDDI_WINXP)
801 ExAcquireRundownProtection(
802 IN OUT PEX_RUNDOWN_REF RunRef
);
807 ExInitializeRundownProtection(
808 OUT PEX_RUNDOWN_REF RunRef
);
813 ExReInitializeRundownProtection(
814 IN OUT PEX_RUNDOWN_REF RunRef
);
819 ExReleaseRundownProtection(
820 IN OUT PEX_RUNDOWN_REF RunRef
);
826 OUT PEX_RUNDOWN_REF RunRef
);
832 IN SUITE_TYPE SuiteType
);
837 ExWaitForRundownProtectionRelease(
838 IN OUT PEX_RUNDOWN_REF RunRef
);
844 InterlockedPushListSList(
845 IN OUT PSLIST_HEADER ListHead
,
846 IN OUT PSLIST_ENTRY List
,
847 IN OUT PSLIST_ENTRY ListEnd
,
850 $
if (_WDMDDK_
|| _NTIFS_
)
851 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
855 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
860 ExAcquireRundownProtectionEx(
861 IN OUT PEX_RUNDOWN_REF RunRef
,
867 ExReleaseRundownProtectionEx(
868 IN OUT PEX_RUNDOWN_REF RunRef
,
871 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
873 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
876 PEX_RUNDOWN_REF_CACHE_AWARE
878 ExAllocateCacheAwareRundownProtection(
879 IN POOL_TYPE PoolType
,
885 ExSizeOfRundownProtectionCacheAware(VOID
);
890 ExEnterCriticalRegionAndAcquireResourceShared(
891 IN OUT PERESOURCE Resource
);
896 ExEnterCriticalRegionAndAcquireResourceExclusive(
897 IN OUT PERESOURCE Resource
);
902 ExEnterCriticalRegionAndAcquireSharedWaitForExclusive(
903 IN OUT PERESOURCE Resource
);
908 ExReleaseResourceAndLeaveCriticalRegion(
909 IN OUT PERESOURCE Resource
);
914 ExInitializeRundownProtectionCacheAware(
915 OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
,
916 IN SIZE_T RunRefSize
);
921 ExFreeCacheAwareRundownProtection(
922 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
927 ExAcquireRundownProtectionCacheAware(
928 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
933 ExReleaseRundownProtectionCacheAware(
934 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
939 ExAcquireRundownProtectionCacheAwareEx(
940 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
,
946 ExReleaseRundownProtectionCacheAwareEx(
947 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef
,
953 ExWaitForRundownProtectionReleaseCacheAware(
954 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef
);
959 ExReInitializeRundownProtectionCacheAware(
960 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
965 ExRundownCompletedCacheAware(
966 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
968 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
970 #if (NTDDI_VERSION >= NTDDI_VISTA)
975 ExInitializeLookasideListEx(
976 OUT PLOOKASIDE_LIST_EX Lookaside
,
977 IN PALLOCATE_FUNCTION_EX Allocate OPTIONAL
,
978 IN PFREE_FUNCTION_EX Free OPTIONAL
,
979 IN POOL_TYPE PoolType
,
988 ExDeleteLookasideListEx(
989 IN OUT PLOOKASIDE_LIST_EX Lookaside
);
994 ExFlushLookasideListEx(
995 IN OUT PLOOKASIDE_LIST_EX Lookaside
);
999 ExAllocateFromLookasideListEx(
1000 IN OUT PLOOKASIDE_LIST_EX Lookaside
)
1004 Lookaside
->L
.TotalAllocates
+= 1;
1005 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
1006 if (Entry
== NULL
) {
1007 Lookaside
->L
.AllocateMisses
+= 1;
1008 Entry
= (Lookaside
->L
.AllocateEx
)(Lookaside
->L
.Type
,
1018 ExFreeToLookasideListEx(
1019 IN OUT PLOOKASIDE_LIST_EX Lookaside
,
1022 Lookaside
->L
.TotalFrees
+= 1;
1023 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
1024 Lookaside
->L
.FreeMisses
+= 1;
1025 (Lookaside
->L
.FreeEx
)(Entry
, Lookaside
);
1027 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
1032 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
1034 #if (NTDDI_VERSION >= NTDDI_WIN7)
1039 ExSetResourceOwnerPointerEx(
1040 IN OUT PERESOURCE Resource
,
1041 IN PVOID OwnerPointer
,
1044 #define FLAG_OWNER_POINTER_IS_THREAD 0x1
1046 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1048 static __inline PVOID
1049 ExAllocateFromNPagedLookasideList(
1050 IN OUT PNPAGED_LOOKASIDE_LIST Lookaside
)
1054 Lookaside
->L
.TotalAllocates
++;
1055 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
1056 Entry
= ExInterlockedPopEntrySList(&Lookaside
->L
.ListHead
,
1057 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
1059 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
1061 if (Entry
== NULL
) {
1062 Lookaside
->L
.AllocateMisses
++;
1063 Entry
= (Lookaside
->L
.Allocate
)(Lookaside
->L
.Type
,
1070 static __inline VOID
1071 ExFreeToNPagedLookasideList(
1072 IN OUT PNPAGED_LOOKASIDE_LIST Lookaside
,
1075 Lookaside
->L
.TotalFrees
++;
1076 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
1077 Lookaside
->L
.FreeMisses
++;
1078 (Lookaside
->L
.Free
)(Entry
);
1080 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
1081 ExInterlockedPushEntrySList(&Lookaside
->L
.ListHead
,
1082 (PSLIST_ENTRY
)Entry
,
1083 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
1085 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);