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 #if defined(_X86_) || defined(_IA64_) || defined(_M_AMD64) && !defined(RC_INVOKED) && !defined(MIDL_PASS)
309 typedef enum _INTERLOCKED_RESULT
{
310 ResultNegative
= RESULT_NEGATIVE
,
311 ResultZero
= RESULT_ZERO
,
312 ResultPositive
= RESULT_POSITIVE
313 } INTERLOCKED_RESULT
;
321 Exfi386InterlockedIncrementLong(
322 IN OUT LONG
volatile *Addend
);
327 Exfi386InterlockedDecrementLong(
333 Exfi386InterlockedExchangeUlong(
342 #define ExDisableResourceBoost ExDisableResourceBoostLite
345 ExInitializePushLock (
346 OUT PEX_PUSH_LOCK PushLock
);
349 #if (NTDDI_VERSION >= NTDDI_WIN2K)
354 ExAcquireFastMutexUnsafe(
355 IN OUT PFAST_MUTEX FastMutex
);
360 ExReleaseFastMutexUnsafe(
361 IN OUT PFAST_MUTEX FastMutex
);
366 ExAcquireResourceExclusiveLite(
367 IN OUT PERESOURCE Resource
,
373 ExAcquireResourceSharedLite(
374 IN OUT PERESOURCE Resource
,
380 ExAcquireSharedStarveExclusive(
381 IN OUT PERESOURCE Resource
,
387 ExAcquireSharedWaitForExclusive(
388 IN OUT PERESOURCE Resource
,
395 IN POOL_TYPE PoolType
,
396 IN SIZE_T NumberOfBytes
);
401 ExAllocatePoolWithQuota(
402 IN POOL_TYPE PoolType
,
403 IN SIZE_T NumberOfBytes
);
408 ExAllocatePoolWithQuotaTag(
409 IN POOL_TYPE PoolType
,
410 IN SIZE_T NumberOfBytes
,
414 #define ExAllocatePoolWithQuotaTag(a,b,c) ExAllocatePoolWithQuota(a,b)
420 ExAllocatePoolWithTag(
421 IN POOL_TYPE PoolType
,
422 IN SIZE_T NumberOfBytes
,
426 #define ExAllocatePoolWithTag(a,b,c) ExAllocatePool(a,b)
432 ExAllocatePoolWithTagPriority(
433 IN POOL_TYPE PoolType
,
434 IN SIZE_T NumberOfBytes
,
436 IN EX_POOL_PRIORITY Priority
);
441 ExConvertExclusiveToSharedLite(
442 IN OUT PERESOURCE Resource
);
448 OUT PCALLBACK_OBJECT
*CallbackObject
,
449 IN POBJECT_ATTRIBUTES ObjectAttributes
,
451 IN BOOLEAN AllowMultipleCallbacks
);
456 ExDeleteNPagedLookasideList(
457 IN OUT PNPAGED_LOOKASIDE_LIST Lookaside
);
462 ExDeletePagedLookasideList(
463 IN PPAGED_LOOKASIDE_LIST Lookaside
);
468 ExDeleteResourceLite(
469 IN OUT PERESOURCE Resource
);
487 ExGetExclusiveWaiterCount(
488 IN PERESOURCE Resource
);
493 ExGetPreviousMode(VOID
);
498 ExGetSharedWaiterCount(
499 IN PERESOURCE Resource
);
504 ExInitializeNPagedLookasideList(
505 IN PNPAGED_LOOKASIDE_LIST Lookaside
,
506 IN PALLOCATE_FUNCTION Allocate OPTIONAL
,
507 IN PFREE_FUNCTION Free OPTIONAL
,
516 ExInitializePagedLookasideList(
517 IN PPAGED_LOOKASIDE_LIST Lookaside
,
518 IN PALLOCATE_FUNCTION Allocate OPTIONAL
,
519 IN PFREE_FUNCTION Free OPTIONAL
,
528 ExInitializeResourceLite(
529 OUT PERESOURCE Resource
);
534 ExInterlockedAddLargeInteger(
535 IN PLARGE_INTEGER Addend
,
536 IN LARGE_INTEGER Increment
,
537 IN PKSPIN_LOCK Lock
);
540 #define ExInterlockedAddLargeStatistic(Addend, Increment) \
541 (VOID)InterlockedAdd64(&(Addend)->QuadPart, Increment)
543 #define ExInterlockedAddLargeStatistic(Addend, Increment) \
544 _InterlockedAddLargeStatistic((PLONGLONG)&(Addend)->QuadPart, Increment)
550 ExInterlockedAddUlong(
553 IN OUT PKSPIN_LOCK Lock
);
555 #if defined(_AMD64_) || defined(_IA64_)
557 #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
558 InterlockedCompareExchange64(Destination, *(Exchange), *(Comperand))
565 ExfInterlockedCompareExchange64(
566 IN OUT LONGLONG
volatile *Destination
,
567 IN PLONGLONG Exchange
,
568 IN PLONGLONG Comperand
);
570 #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
571 ExfInterlockedCompareExchange64(Destination, Exchange, Comperand)
578 ExInterlockedCompareExchange64(
579 IN OUT LONGLONG
volatile *Destination
,
580 IN PLONGLONG Exchange
,
581 IN PLONGLONG Comparand
,
582 IN PKSPIN_LOCK Lock
);
584 #endif /* defined(_AMD64_) || defined(_IA64_) */
589 ExInterlockedInsertHeadList(
590 IN OUT PLIST_ENTRY ListHead
,
591 IN OUT PLIST_ENTRY ListEntry
,
592 IN OUT PKSPIN_LOCK Lock
);
597 ExInterlockedInsertTailList(
598 IN OUT PLIST_ENTRY ListHead
,
599 IN OUT PLIST_ENTRY ListEntry
,
600 IN OUT PKSPIN_LOCK Lock
);
605 ExInterlockedPopEntryList(
606 IN OUT PSINGLE_LIST_ENTRY ListHead
,
607 IN OUT PKSPIN_LOCK Lock
);
612 ExInterlockedPushEntryList(
613 IN OUT PSINGLE_LIST_ENTRY ListHead
,
614 IN OUT PSINGLE_LIST_ENTRY ListEntry
,
615 IN OUT PKSPIN_LOCK Lock
);
620 ExInterlockedRemoveHeadList(
621 IN OUT PLIST_ENTRY ListHead
,
622 IN OUT PKSPIN_LOCK Lock
);
627 ExIsProcessorFeaturePresent(
628 IN ULONG ProcessorFeature
);
633 ExIsResourceAcquiredExclusiveLite(
634 IN PERESOURCE Resource
);
639 ExIsResourceAcquiredSharedLite(
640 IN PERESOURCE Resource
);
642 #define ExIsResourceAcquiredLite ExIsResourceAcquiredSharedLite
647 ExLocalTimeToSystemTime(
648 IN PLARGE_INTEGER LocalTime
,
649 OUT PLARGE_INTEGER SystemTime
);
655 IN PCALLBACK_OBJECT CallbackObject
,
656 IN PVOID Argument1 OPTIONAL
,
657 IN PVOID Argument2 OPTIONAL
);
663 IN OUT PWORK_QUEUE_ITEM WorkItem
,
664 IN WORK_QUEUE_TYPE QueueType
);
677 IN PCALLBACK_OBJECT CallbackObject
,
678 IN PCALLBACK_FUNCTION CallbackFunction
,
679 IN PVOID CallbackContext OPTIONAL
);
684 ExReinitializeResourceLite(
685 IN OUT PERESOURCE Resource
);
690 ExReleaseResourceForThreadLite(
691 IN OUT PERESOURCE Resource
,
692 IN ERESOURCE_THREAD ResourceThreadId
);
697 ExReleaseResourceLite(
698 IN OUT PERESOURCE Resource
);
703 ExSetResourceOwnerPointer(
704 IN OUT PERESOURCE Resource
,
705 IN PVOID OwnerPointer
);
710 ExSetTimerResolution(
711 IN ULONG DesiredTime
,
712 IN BOOLEAN SetResolution
);
717 ExSystemTimeToLocalTime(
718 IN PLARGE_INTEGER SystemTime
,
719 OUT PLARGE_INTEGER LocalTime
);
724 ExUnregisterCallback(
725 IN OUT PVOID CbRegistration
);
733 IN OUT PZONE_HEADER Zone
,
734 IN OUT PVOID Segment
,
735 IN ULONG SegmentSize
);
741 OUT PZONE_HEADER Zone
,
743 IN OUT PVOID InitialSegment
,
744 IN ULONG InitialSegmentSize
);
749 ExInterlockedExtendZone(
750 IN OUT PZONE_HEADER Zone
,
751 IN OUT PVOID Segment
,
752 IN ULONG SegmentSize
,
753 IN OUT PKSPIN_LOCK Lock
);
765 ExRaiseAccessViolation(VOID
);
771 ExRaiseDatatypeMisalignment(VOID
);
779 ExQueryPoolBlockSize(
781 OUT PBOOLEAN QuotaCharged
);
784 ExAdjustLookasideDepth(
790 ExDisableResourceBoostLite(
791 IN PERESOURCE Resource
);
793 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
795 $
if (_WDMDDK_
|| _NTIFS_
)
796 #if (NTDDI_VERSION >= NTDDI_WINXP)
803 ExAcquireRundownProtection(
804 IN OUT PEX_RUNDOWN_REF RunRef
);
809 ExInitializeRundownProtection(
810 OUT PEX_RUNDOWN_REF RunRef
);
815 ExReInitializeRundownProtection(
816 IN OUT PEX_RUNDOWN_REF RunRef
);
821 ExReleaseRundownProtection(
822 IN OUT PEX_RUNDOWN_REF RunRef
);
828 OUT PEX_RUNDOWN_REF RunRef
);
834 IN SUITE_TYPE SuiteType
);
839 ExWaitForRundownProtectionRelease(
840 IN OUT PEX_RUNDOWN_REF RunRef
);
846 InterlockedPushListSList(
847 IN OUT PSLIST_HEADER ListHead
,
848 IN OUT PSLIST_ENTRY List
,
849 IN OUT PSLIST_ENTRY ListEnd
,
852 $
if (_WDMDDK_
|| _NTIFS_
)
853 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
857 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
862 ExAcquireRundownProtectionEx(
863 IN OUT PEX_RUNDOWN_REF RunRef
,
869 ExReleaseRundownProtectionEx(
870 IN OUT PEX_RUNDOWN_REF RunRef
,
873 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
875 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
878 PEX_RUNDOWN_REF_CACHE_AWARE
880 ExAllocateCacheAwareRundownProtection(
881 IN POOL_TYPE PoolType
,
887 ExSizeOfRundownProtectionCacheAware(VOID
);
892 ExEnterCriticalRegionAndAcquireResourceShared(
893 IN OUT PERESOURCE Resource
);
898 ExEnterCriticalRegionAndAcquireResourceExclusive(
899 IN OUT PERESOURCE Resource
);
904 ExEnterCriticalRegionAndAcquireSharedWaitForExclusive(
905 IN OUT PERESOURCE Resource
);
910 ExReleaseResourceAndLeaveCriticalRegion(
911 IN OUT PERESOURCE Resource
);
916 ExInitializeRundownProtectionCacheAware(
917 OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
,
918 IN SIZE_T RunRefSize
);
923 ExFreeCacheAwareRundownProtection(
924 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
929 ExAcquireRundownProtectionCacheAware(
930 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
935 ExReleaseRundownProtectionCacheAware(
936 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
941 ExAcquireRundownProtectionCacheAwareEx(
942 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
,
948 ExReleaseRundownProtectionCacheAwareEx(
949 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef
,
955 ExWaitForRundownProtectionReleaseCacheAware(
956 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef
);
961 ExReInitializeRundownProtectionCacheAware(
962 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
967 ExRundownCompletedCacheAware(
968 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
970 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
972 #if (NTDDI_VERSION >= NTDDI_VISTA)
977 ExInitializeLookasideListEx(
978 OUT PLOOKASIDE_LIST_EX Lookaside
,
979 IN PALLOCATE_FUNCTION_EX Allocate OPTIONAL
,
980 IN PFREE_FUNCTION_EX Free OPTIONAL
,
981 IN POOL_TYPE PoolType
,
990 ExDeleteLookasideListEx(
991 IN OUT PLOOKASIDE_LIST_EX Lookaside
);
996 ExFlushLookasideListEx(
997 IN OUT PLOOKASIDE_LIST_EX Lookaside
);
1001 ExAllocateFromLookasideListEx(
1002 IN OUT PLOOKASIDE_LIST_EX Lookaside
)
1006 Lookaside
->L
.TotalAllocates
+= 1;
1007 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
1008 if (Entry
== NULL
) {
1009 Lookaside
->L
.AllocateMisses
+= 1;
1010 Entry
= (Lookaside
->L
.AllocateEx
)(Lookaside
->L
.Type
,
1020 ExFreeToLookasideListEx(
1021 IN OUT PLOOKASIDE_LIST_EX Lookaside
,
1024 Lookaside
->L
.TotalFrees
+= 1;
1025 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
1026 Lookaside
->L
.FreeMisses
+= 1;
1027 (Lookaside
->L
.FreeEx
)(Entry
, Lookaside
);
1029 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
1034 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
1036 #if (NTDDI_VERSION >= NTDDI_WIN7)
1041 ExSetResourceOwnerPointerEx(
1042 IN OUT PERESOURCE Resource
,
1043 IN PVOID OwnerPointer
,
1046 #define FLAG_OWNER_POINTER_IS_THREAD 0x1
1048 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1050 static __inline PVOID
1051 ExAllocateFromNPagedLookasideList(
1052 IN OUT PNPAGED_LOOKASIDE_LIST Lookaside
)
1056 Lookaside
->L
.TotalAllocates
++;
1057 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
1058 Entry
= ExInterlockedPopEntrySList(&Lookaside
->L
.ListHead
,
1059 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
1061 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
1063 if (Entry
== NULL
) {
1064 Lookaside
->L
.AllocateMisses
++;
1065 Entry
= (Lookaside
->L
.Allocate
)(Lookaside
->L
.Type
,
1072 static __inline VOID
1073 ExFreeToNPagedLookasideList(
1074 IN OUT PNPAGED_LOOKASIDE_LIST Lookaside
,
1077 Lookaside
->L
.TotalFrees
++;
1078 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
1079 Lookaside
->L
.FreeMisses
++;
1080 (Lookaside
->L
.Free
)(Entry
);
1082 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
1083 ExInterlockedPushEntrySList(&Lookaside
->L
.ListHead
,
1084 (PSLIST_ENTRY
)Entry
,
1085 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
1087 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);