{
SLIST_HEADER newslh, oldslh;
PSLIST_ENTRY le;
-
+
do
{
- oldslh = *ListHead;
+ oldslh = *(volatile SLIST_HEADER *)ListHead;
le = oldslh.Next.Next;
if(le == NULL)
{
newslh.Sequence = oldslh.Sequence + 1;
newslh.Depth = oldslh.Depth - 1;
newslh.Next.Next = MmSafeReadPtr(&le->Next);
- } while(ExfInterlockedCompareExchange64(&ListHead->Alignment,
- &newslh.Alignment,
- &oldslh.Alignment) != oldslh.Alignment);
+ } while(ExfInterlockedCompareExchange64((PLONGLONG)&ListHead->Alignment,
+ (PLONGLONG)&newslh.Alignment,
+ (PLONGLONG)&oldslh.Alignment) != (LONGLONG)oldslh.Alignment);
return le;
}
IN PSLIST_ENTRY ListEntry)
{
SLIST_HEADER newslh, oldslh;
-
+
newslh.Next.Next = ListEntry;
-
+
do
{
- oldslh = *ListHead;
+ oldslh = *(volatile SLIST_HEADER *)ListHead;
newslh.Depth = oldslh.Depth + 1;
newslh.Sequence = oldslh.Sequence + 1;
ListEntry->Next = oldslh.Next.Next;
- } while(ExfInterlockedCompareExchange64(&ListHead->Alignment,
- &newslh.Alignment,
- &oldslh.Alignment) != oldslh.Alignment);
+ } while(ExfInterlockedCompareExchange64((PLONGLONG)&ListHead->Alignment,
+ (PLONGLONG)&newslh.Alignment,
+ (PLONGLONG)&oldslh.Alignment) != (LONGLONG)oldslh.Alignment);
return oldslh.Next.Next;
}