#else /* !defined(_WIN64) */
+#ifdef NONAMELESSUNION
+#define ExQueryDepthSList(listhead) (listhead)->s.Depth
+#else
#define ExQueryDepthSList(listhead) (listhead)->Depth
+#endif
NTKERNELAPI
PSINGLE_LIST_ENTRY
PVOID Entry;
Lookaside->L.TotalAllocates++;
+#ifdef NONAMELESSUNION
+ Entry = InterlockedPopEntrySList(&Lookaside->L.u.ListHead);
+ if (Entry == NULL) {
+ Lookaside->L.u2.AllocateMisses++;
+ Entry = (Lookaside->L.u4.Allocate)(Lookaside->L.Type,
+ Lookaside->L.Size,
+ Lookaside->L.Tag);
+ }
+#else /* NONAMELESSUNION */
Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead);
if (Entry == NULL) {
Lookaside->L.AllocateMisses++;
Lookaside->L.Size,
Lookaside->L.Tag);
}
+#endif /* NONAMELESSUNION */
return Entry;
}
IN PVOID Entry)
{
Lookaside->L.TotalFrees++;
+#ifdef NONAMELESSUNION
+ if (ExQueryDepthSList(&Lookaside->L.u.ListHead) >= Lookaside->L.Depth) {
+ Lookaside->L.u3.FreeMisses++;
+ (Lookaside->L.u5.Free)(Entry);
+ } else {
+ InterlockedPushEntrySList(&Lookaside->L.u.ListHead, (PSLIST_ENTRY)Entry);
+ }
+#else /* NONAMELESSUNION */
if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) {
Lookaside->L.FreeMisses++;
(Lookaside->L.Free)(Entry);
} else {
InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry);
}
+#endif /* NONAMELESSUNION */
}
#endif /* _WIN2K_COMPAT_SLIST_USAGE */
#define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
#define ExReleaseResourceForThread ExReleaseResourceForThreadLite
-#ifdef _X86_
+#ifndef _M_IX86
+#define RESULT_ZERO 0
+#define RESULT_NEGATIVE 1
+#define RESULT_POSITIVE 2
+#endif
typedef enum _INTERLOCKED_RESULT {
ResultNegative = RESULT_NEGATIVE,
ResultPositive = RESULT_POSITIVE
} INTERLOCKED_RESULT;
+#ifdef _X86_
+
NTKERNELAPI
INTERLOCKED_RESULT
FASTCALL
PVOID Entry;
Lookaside->L.TotalAllocates += 1;
+#ifdef NONAMELESSUNION
+ Entry = InterlockedPopEntrySList(&Lookaside->L.u.ListHead);
+ if (Entry == NULL) {
+ Lookaside->L.u2.AllocateMisses += 1;
+ Entry = (Lookaside->L.u4.AllocateEx)(Lookaside->L.Type,
+ Lookaside->L.Size,
+ Lookaside->L.Tag,
+ Lookaside);
+ }
+#else /* NONAMELESSUNION */
Entry = InterlockedPopEntrySList(&Lookaside->L.ListHead);
if (Entry == NULL) {
Lookaside->L.AllocateMisses += 1;
Lookaside->L.Tag,
Lookaside);
}
+#endif /* NONAMELESSUNION */
return Entry;
}
PVOID Entry;
Lookaside->L.TotalAllocates++;
+#ifdef NONAMELESSUNION
+#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
+ Entry = ExInterlockedPopEntrySList(&Lookaside->L.u.ListHead,
+ &Lookaside->Lock__ObsoleteButDoNotDelete);
+#else
+ Entry = InterlockedPopEntrySList(&Lookaside->L.u.ListHead);
+#endif
+ if (Entry == NULL) {
+ Lookaside->L.u2.AllocateMisses++;
+ Entry = (Lookaside->L.u4.Allocate)(Lookaside->L.Type,
+ Lookaside->L.Size,
+ Lookaside->L.Tag);
+ }
+#else /* NONAMELESSUNION */
#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
Entry = ExInterlockedPopEntrySList(&Lookaside->L.ListHead,
&Lookaside->Lock__ObsoleteButDoNotDelete);
Lookaside->L.Size,
Lookaside->L.Tag);
}
+#endif /* NONAMELESSUNION */
return Entry;
}
IN PVOID Entry)
{
Lookaside->L.TotalFrees++;
+#ifdef NONAMELESSUNION
+ if (ExQueryDepthSList(&Lookaside->L.u.ListHead) >= Lookaside->L.Depth) {
+ Lookaside->L.u3.FreeMisses++;
+ (Lookaside->L.u5.Free)(Entry);
+ } else {
+#if defined(_WIN2K_COMPAT_SLIST_USAGE) && defined(_X86_)
+ ExInterlockedPushEntrySList(&Lookaside->L.u.ListHead,
+ (PSLIST_ENTRY)Entry,
+ &Lookaside->Lock__ObsoleteButDoNotDelete);
+#else
+ InterlockedPushEntrySList(&Lookaside->L.u.ListHead, (PSLIST_ENTRY)Entry);
+#endif
+ }
+#else /* NONAMELESSUNION */
if (ExQueryDepthSList(&Lookaside->L.ListHead) >= Lookaside->L.Depth) {
Lookaside->L.FreeMisses++;
(Lookaside->L.Free)(Entry);
InterlockedPushEntrySList(&Lookaside->L.ListHead, (PSLIST_ENTRY)Entry);
#endif
}
+#endif /* NONAMELESSUNION */
}
-$endif (_WDMDDK_)
+$endif (_WDMDDK_)