1 /******************************************************************************
2 * Executive Functions *
3 ******************************************************************************/
9 if (Zone
->FreeList
.Next
)
10 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
11 return (PVOID
) Zone
->FreeList
.Next
;
19 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
20 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
21 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
26 * ExInterlockedAllocateFromZone(
27 * IN PZONE_HEADER Zone,
28 * IN PKSPIN_LOCK Lock)
30 #define ExInterlockedAllocateFromZone(Zone, Lock) \
31 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
34 * ExInterlockedFreeToZone(
35 * IN PZONE_HEADER Zone,
37 * IN PKSPIN_LOCK Lock);
39 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
40 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
45 * IN PZONE_HEADER Zone)
47 #define ExIsFullZone(Zone) \
48 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
51 * ExIsObjectInFirstZoneSegment(
52 * IN PZONE_HEADER Zone,
55 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
56 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
57 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
58 (Zone)->TotalSegmentSize)) )
60 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
61 #define ExAcquireResourceShared ExAcquireResourceSharedLite
62 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
63 #define ExDeleteResource ExDeleteResourceLite
64 #define ExInitializeResource ExInitializeResourceLite
65 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
66 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
67 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
68 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
70 typedef enum _INTERLOCKED_RESULT
{
71 ResultNegative
= RESULT_NEGATIVE
,
72 ResultZero
= RESULT_ZERO
,
73 ResultPositive
= RESULT_POSITIVE
80 Exfi386InterlockedIncrementLong(
81 IN OUT LONG
volatile *Addend
);
86 Exfi386InterlockedDecrementLong(
92 Exfi386InterlockedExchangeUlong(
100 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend)
101 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend)
102 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value)
104 #define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql))
105 #define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql))
106 #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock)
107 #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock)
109 #define ExInitializeSListHead InitializeSListHead
111 #if defined(_NTHAL_) && defined(_X86_)
117 IN OUT PFAST_MUTEX FastMutex
);
123 IN OUT PFAST_MUTEX FastMutex
);
128 ExiTryToAcquireFastMutex(
129 IN OUT PFAST_MUTEX FastMutex
);
131 #define ExAcquireFastMutex ExiAcquireFastMutex
132 #define ExReleaseFastMutex ExiReleaseFastMutex
133 #define ExTryToAcquireFastMutex ExiTryToAcquireFastMutex
137 #if (NTDDI_VERSION >= NTDDI_WIN2K)
143 IN OUT PFAST_MUTEX FastMutex
);
149 IN OUT PFAST_MUTEX FastMutex
);
154 ExTryToAcquireFastMutex(
155 IN OUT PFAST_MUTEX FastMutex
);
157 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
159 #endif /* defined(_NTHAL_) && defined(_X86_) */
162 #define ExInterlockedAddUlong ExfInterlockedAddUlong
163 #define ExInterlockedInsertHeadList ExfInterlockedInsertHeadList
164 #define ExInterlockedInsertTailList ExfInterlockedInsertTailList
165 #define ExInterlockedRemoveHeadList ExfInterlockedRemoveHeadList
166 #define ExInterlockedPopEntryList ExfInterlockedPopEntryList
167 #define ExInterlockedPushEntryList ExfInterlockedPushEntryList
168 #endif /* defined(_X86_) */
172 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || \
173 defined(_NTHAL_) || defined(_NTOSP_)
176 ExQueryDepthSList(IN PSLIST_HEADER ListHead
);
180 ExQueryDepthSList(IN PSLIST_HEADER ListHead
)
182 return (USHORT
)(ListHead
->Alignment
& 0xffff);
188 ExpInterlockedFlushSList(
189 PSLIST_HEADER ListHead
);
193 ExpInterlockedPopEntrySList(
194 PSLIST_HEADER ListHead
);
198 ExpInterlockedPushEntrySList(
199 PSLIST_HEADER ListHead
,
200 PSLIST_ENTRY ListEntry
);
202 #define ExInterlockedFlushSList(Head) \
203 ExpInterlockedFlushSList(Head)
204 #define ExInterlockedPopEntrySList(Head, Lock) \
205 ExpInterlockedPopEntrySList(Head)
206 #define ExInterlockedPushEntrySList(Head, Entry, Lock) \
207 ExpInterlockedPushEntrySList(Head, Entry)
209 #else /* !defined(_WIN64) */
211 #define ExQueryDepthSList(listhead) (listhead)->Depth
216 ExInterlockedFlushSList(
217 IN OUT PSLIST_HEADER ListHead
);
219 #endif /* !defined(_WIN64) */
221 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
226 ExInterlockedPopEntrySList(
227 IN PSLIST_HEADER ListHead
,
228 IN PKSPIN_LOCK Lock
);
233 ExInterlockedPushEntrySList(
234 IN PSLIST_HEADER ListHead
,
235 IN PSINGLE_LIST_ENTRY ListEntry
,
236 IN PKSPIN_LOCK Lock
);
241 ExAllocateFromPagedLookasideList(
242 IN OUT PPAGED_LOOKASIDE_LIST Lookaside
);
247 ExFreeToPagedLookasideList(
248 IN OUT PPAGED_LOOKASIDE_LIST Lookaside
,
251 #else /* !_WIN2K_COMPAT_SLIST_USAGE */
254 #define ExInterlockedPopEntrySList(_ListHead, _Lock) \
255 InterlockedPopEntrySList(_ListHead)
256 #define ExInterlockedPushEntrySList(_ListHead, _ListEntry, _Lock) \
257 InterlockedPushEntrySList(_ListHead, _ListEntry)
262 ExAllocateFromPagedLookasideList(
263 IN OUT PPAGED_LOOKASIDE_LIST Lookaside
)
267 Lookaside
->L
.TotalAllocates
++;
268 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
270 Lookaside
->L
.AllocateMisses
++;
271 Entry
= (Lookaside
->L
.Allocate
)(Lookaside
->L
.Type
,
280 ExFreeToPagedLookasideList(
281 IN OUT PPAGED_LOOKASIDE_LIST Lookaside
,
284 Lookaside
->L
.TotalFrees
++;
285 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
286 Lookaside
->L
.FreeMisses
++;
287 (Lookaside
->L
.Free
)(Entry
);
289 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
293 #endif /* _WIN2K_COMPAT_SLIST_USAGE */
297 * ExGetCurrentResourceThread(
300 #define ExGetCurrentResourceThread() ((ULONG_PTR)PsGetCurrentThread())
302 #define ExReleaseResource(R) (ExReleaseResourceLite(R))
305 * ExInitializeWorkItem(
306 * IN PWORK_QUEUE_ITEM Item,
307 * IN PWORKER_THREAD_ROUTINE Routine,
310 #define ExInitializeWorkItem(Item, Routine, Context) \
312 (Item)->WorkerRoutine = Routine; \
313 (Item)->Parameter = Context; \
314 (Item)->List.Flink = NULL; \
319 ExInitializeFastMutex(
320 OUT PFAST_MUTEX FastMutex
)
322 FastMutex
->Count
= FM_LOCK_BIT
;
323 FastMutex
->Owner
= NULL
;
324 FastMutex
->Contention
= 0;
325 KeInitializeEvent(&FastMutex
->Event
, SynchronizationEvent
, FALSE
);
330 #if (NTDDI_VERSION >= NTDDI_WIN2K)
336 IN OUT PZONE_HEADER Zone
,
337 IN OUT PVOID Segment
,
338 IN ULONG SegmentSize
);
344 OUT PZONE_HEADER Zone
,
346 IN OUT PVOID InitialSegment
,
347 IN ULONG InitialSegmentSize
);
352 ExInterlockedExtendZone(
353 IN OUT PZONE_HEADER Zone
,
354 IN OUT PVOID Segment
,
355 IN ULONG SegmentSize
,
356 IN OUT PKSPIN_LOCK Lock
);
368 ExRaiseAccessViolation(VOID
);
374 ExRaiseDatatypeMisalignment(VOID
);
381 ExAcquireFastMutexUnsafe(
382 IN OUT PFAST_MUTEX FastMutex
);
387 ExReleaseFastMutexUnsafe(
388 IN OUT PFAST_MUTEX FastMutex
);
393 ExAcquireResourceExclusiveLite(
394 IN OUT PERESOURCE Resource
,
400 ExAcquireResourceSharedLite(
401 IN OUT PERESOURCE Resource
,
407 ExAcquireSharedStarveExclusive(
408 IN OUT PERESOURCE Resource
,
414 ExAcquireSharedWaitForExclusive(
415 IN OUT PERESOURCE Resource
,
422 IN POOL_TYPE PoolType
,
423 IN SIZE_T NumberOfBytes
);
428 ExAllocatePoolWithQuota(
429 IN POOL_TYPE PoolType
,
430 IN SIZE_T NumberOfBytes
);
435 ExAllocatePoolWithQuotaTag(
436 IN POOL_TYPE PoolType
,
437 IN SIZE_T NumberOfBytes
,
441 #define ExAllocatePoolWithQuotaTag(a,b,c) ExAllocatePoolWithQuota(a,b)
447 ExAllocatePoolWithTag(
448 IN POOL_TYPE PoolType
,
449 IN SIZE_T NumberOfBytes
,
453 #define ExAllocatePoolWithTag(a,b,c) ExAllocatePool(a,b)
459 ExAllocatePoolWithTagPriority(
460 IN POOL_TYPE PoolType
,
461 IN SIZE_T NumberOfBytes
,
463 IN EX_POOL_PRIORITY Priority
);
468 ExConvertExclusiveToSharedLite(
469 IN OUT PERESOURCE Resource
);
475 OUT PCALLBACK_OBJECT
*CallbackObject
,
476 IN POBJECT_ATTRIBUTES ObjectAttributes
,
478 IN BOOLEAN AllowMultipleCallbacks
);
483 ExDeleteNPagedLookasideList(
484 IN OUT PNPAGED_LOOKASIDE_LIST Lookaside
);
489 ExDeletePagedLookasideList(
490 IN PPAGED_LOOKASIDE_LIST Lookaside
);
495 ExDeleteResourceLite(
496 IN OUT PERESOURCE Resource
);
514 ExGetExclusiveWaiterCount(
515 IN PERESOURCE Resource
);
520 ExGetPreviousMode(VOID
);
525 ExGetSharedWaiterCount(
526 IN PERESOURCE Resource
);
531 ExInitializeNPagedLookasideList(
532 IN PNPAGED_LOOKASIDE_LIST Lookaside
,
533 IN PALLOCATE_FUNCTION Allocate OPTIONAL
,
534 IN PFREE_FUNCTION Free OPTIONAL
,
543 ExInitializePagedLookasideList(
544 IN PPAGED_LOOKASIDE_LIST Lookaside
,
545 IN PALLOCATE_FUNCTION Allocate OPTIONAL
,
546 IN PFREE_FUNCTION Free OPTIONAL
,
555 ExInitializeResourceLite(
556 OUT PERESOURCE Resource
);
561 ExInterlockedAddLargeInteger(
562 IN PLARGE_INTEGER Addend
,
563 IN LARGE_INTEGER Increment
,
564 IN PKSPIN_LOCK Lock
);
567 #define ExInterlockedAddLargeStatistic(Addend, Increment) \
568 (VOID)InterlockedAdd64(&(Addend)->QuadPart, Increment)
570 #define ExInterlockedAddLargeStatistic(Addend, Increment) \
571 _InterlockedAddLargeStatistic((PLONGLONG)&(Addend)->QuadPart, Increment)
577 ExInterlockedAddUlong(
580 IN OUT PKSPIN_LOCK Lock
);
582 #if defined(_AMD64_) || defined(_IA64_)
584 #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
585 InterlockedCompareExchange64(Destination, *(Exchange), *(Comperand))
592 ExfInterlockedCompareExchange64(
593 IN OUT LONGLONG
volatile *Destination
,
594 IN PLONGLONG Exchange
,
595 IN PLONGLONG Comperand
);
597 #define ExInterlockedCompareExchange64(Destination, Exchange, Comperand, Lock) \
598 ExfInterlockedCompareExchange64(Destination, Exchange, Comperand)
605 ExInterlockedCompareExchange64(
606 IN OUT LONGLONG
volatile *Destination
,
607 IN PLONGLONG Exchange
,
608 IN PLONGLONG Comparand
,
609 IN PKSPIN_LOCK Lock
);
611 #endif /* defined(_AMD64_) || defined(_IA64_) */
616 ExInterlockedInsertHeadList(
617 IN OUT PLIST_ENTRY ListHead
,
618 IN OUT PLIST_ENTRY ListEntry
,
619 IN OUT PKSPIN_LOCK Lock
);
624 ExInterlockedInsertTailList(
625 IN OUT PLIST_ENTRY ListHead
,
626 IN OUT PLIST_ENTRY ListEntry
,
627 IN OUT PKSPIN_LOCK Lock
);
632 ExInterlockedPopEntryList(
633 IN OUT PSINGLE_LIST_ENTRY ListHead
,
634 IN OUT PKSPIN_LOCK Lock
);
639 ExInterlockedPushEntryList(
640 IN OUT PSINGLE_LIST_ENTRY ListHead
,
641 IN OUT PSINGLE_LIST_ENTRY ListEntry
,
642 IN OUT PKSPIN_LOCK Lock
);
647 ExInterlockedRemoveHeadList(
648 IN OUT PLIST_ENTRY ListHead
,
649 IN OUT PKSPIN_LOCK Lock
);
654 ExIsProcessorFeaturePresent(
655 IN ULONG ProcessorFeature
);
660 ExIsResourceAcquiredExclusiveLite(
661 IN PERESOURCE Resource
);
666 ExIsResourceAcquiredSharedLite(
667 IN PERESOURCE Resource
);
669 #define ExIsResourceAcquiredLite ExIsResourceAcquiredSharedLite
674 ExLocalTimeToSystemTime(
675 IN PLARGE_INTEGER LocalTime
,
676 OUT PLARGE_INTEGER SystemTime
);
682 IN PCALLBACK_OBJECT CallbackObject
,
683 IN PVOID Argument1 OPTIONAL
,
684 IN PVOID Argument2 OPTIONAL
);
690 IN OUT PWORK_QUEUE_ITEM WorkItem
,
691 IN WORK_QUEUE_TYPE QueueType
);
704 IN PCALLBACK_OBJECT CallbackObject
,
705 IN PCALLBACK_FUNCTION CallbackFunction
,
706 IN PVOID CallbackContext OPTIONAL
);
711 ExReinitializeResourceLite(
712 IN OUT PERESOURCE Resource
);
717 ExReleaseResourceForThreadLite(
718 IN OUT PERESOURCE Resource
,
719 IN ERESOURCE_THREAD ResourceThreadId
);
724 ExReleaseResourceLite(
725 IN OUT PERESOURCE Resource
);
730 ExSetResourceOwnerPointer(
731 IN OUT PERESOURCE Resource
,
732 IN PVOID OwnerPointer
);
737 ExSetTimerResolution(
738 IN ULONG DesiredTime
,
739 IN BOOLEAN SetResolution
);
744 ExSystemTimeToLocalTime(
745 IN PLARGE_INTEGER SystemTime
,
746 OUT PLARGE_INTEGER LocalTime
);
751 ExUnregisterCallback(
752 IN OUT PVOID CbRegistration
);
755 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
758 #if (NTDDI_VERSION >= NTDDI_WINXP)
763 ExAcquireRundownProtection(
764 IN OUT PEX_RUNDOWN_REF RunRef
);
769 ExInitializeRundownProtection(
770 OUT PEX_RUNDOWN_REF RunRef
);
775 ExReInitializeRundownProtection(
776 IN OUT PEX_RUNDOWN_REF RunRef
);
781 ExReleaseRundownProtection(
782 IN OUT PEX_RUNDOWN_REF RunRef
);
788 OUT PEX_RUNDOWN_REF RunRef
);
794 IN SUITE_TYPE SuiteType
);
799 ExWaitForRundownProtectionRelease(
800 IN OUT PEX_RUNDOWN_REF RunRef
);
802 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
804 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
809 ExAcquireRundownProtectionEx(
810 IN OUT PEX_RUNDOWN_REF RunRef
,
816 ExReleaseRundownProtectionEx(
817 IN OUT PEX_RUNDOWN_REF RunRef
,
820 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
822 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
825 PEX_RUNDOWN_REF_CACHE_AWARE
827 ExAllocateCacheAwareRundownProtection(
828 IN POOL_TYPE PoolType
,
834 ExSizeOfRundownProtectionCacheAware(VOID
);
839 ExEnterCriticalRegionAndAcquireResourceShared(
840 IN OUT PERESOURCE Resource
);
845 ExEnterCriticalRegionAndAcquireResourceExclusive(
846 IN OUT PERESOURCE Resource
);
851 ExEnterCriticalRegionAndAcquireSharedWaitForExclusive(
852 IN OUT PERESOURCE Resource
);
857 ExReleaseResourceAndLeaveCriticalRegion(
858 IN OUT PERESOURCE Resource
);
863 ExInitializeRundownProtectionCacheAware(
864 OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
,
865 IN SIZE_T RunRefSize
);
870 ExFreeCacheAwareRundownProtection(
871 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
876 ExAcquireRundownProtectionCacheAware(
877 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
882 ExReleaseRundownProtectionCacheAware(
883 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
888 ExAcquireRundownProtectionCacheAwareEx(
889 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
,
895 ExReleaseRundownProtectionCacheAwareEx(
896 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef
,
902 ExWaitForRundownProtectionReleaseCacheAware(
903 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRef
);
908 ExReInitializeRundownProtectionCacheAware(
909 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
914 ExRundownCompletedCacheAware(
915 IN OUT PEX_RUNDOWN_REF_CACHE_AWARE RunRefCacheAware
);
917 #endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
919 #if (NTDDI_VERSION >= NTDDI_VISTA)
924 ExInitializeLookasideListEx(
925 OUT PLOOKASIDE_LIST_EX Lookaside
,
926 IN PALLOCATE_FUNCTION_EX Allocate OPTIONAL
,
927 IN PFREE_FUNCTION_EX Free OPTIONAL
,
928 IN POOL_TYPE PoolType
,
937 ExDeleteLookasideListEx(
938 IN OUT PLOOKASIDE_LIST_EX Lookaside
);
943 ExFlushLookasideListEx(
944 IN OUT PLOOKASIDE_LIST_EX Lookaside
);
948 ExAllocateFromLookasideListEx(
949 IN OUT PLOOKASIDE_LIST_EX Lookaside
)
953 Lookaside
->L
.TotalAllocates
+= 1;
954 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
956 Lookaside
->L
.AllocateMisses
+= 1;
957 Entry
= (Lookaside
->L
.AllocateEx
)(Lookaside
->L
.Type
,
967 ExFreeToLookasideListEx(
968 IN OUT PLOOKASIDE_LIST_EX Lookaside
,
971 Lookaside
->L
.TotalFrees
+= 1;
972 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
973 Lookaside
->L
.FreeMisses
+= 1;
974 (Lookaside
->L
.FreeEx
)(Entry
, Lookaside
);
976 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);
981 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
983 #if (NTDDI_VERSION >= NTDDI_WIN7)
988 ExSetResourceOwnerPointerEx(
989 IN OUT PERESOURCE Resource
,
990 IN PVOID OwnerPointer
,
993 #define FLAG_OWNER_POINTER_IS_THREAD 0x1
995 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
997 static __inline PVOID
998 ExAllocateFromNPagedLookasideList(
999 IN OUT PNPAGED_LOOKASIDE_LIST Lookaside
)
1003 Lookaside
->L
.TotalAllocates
++;
1004 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
1005 Entry
= ExInterlockedPopEntrySList(&Lookaside
->L
.ListHead
,
1006 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
1008 Entry
= InterlockedPopEntrySList(&Lookaside
->L
.ListHead
);
1010 if (Entry
== NULL
) {
1011 Lookaside
->L
.AllocateMisses
++;
1012 Entry
= (Lookaside
->L
.Allocate
)(Lookaside
->L
.Type
,
1019 static __inline VOID
1020 ExFreeToNPagedLookasideList(
1021 IN OUT PNPAGED_LOOKASIDE_LIST Lookaside
,
1024 Lookaside
->L
.TotalFrees
++;
1025 if (ExQueryDepthSList(&Lookaside
->L
.ListHead
) >= Lookaside
->L
.Depth
) {
1026 Lookaside
->L
.FreeMisses
++;
1027 (Lookaside
->L
.Free
)(Entry
);
1029 #if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
1030 ExInterlockedPushEntrySList(&Lookaside
->L
.ListHead
,
1031 (PSLIST_ENTRY
)Entry
,
1032 &Lookaside
->Lock__ObsoleteButDoNotDelete
);
1034 InterlockedPushEntrySList(&Lookaside
->L
.ListHead
, (PSLIST_ENTRY
)Entry
);