1 typedef unsigned int size_t;
11 LONG
volatile *Target
, LONG Value
)
13 return _InterlockedExchange(Target
, Value
);
19 InterlockedExchangeAdd(
20 LONG
volatile *Target
, LONG Value
)
22 return _InterlockedExchangeAdd(Target
, Value
);
28 InterlockedCompareExchange(
29 LONG
volatile *Destination
,
30 LONG Exchange
, LONG Comparand
)
32 return _InterlockedCompareExchange(Destination
, Exchange
, Comparand
);
39 (IN OUT LONG
volatile *Addend
)
41 return _InterlockedIncrement(Addend
);
48 IN OUT LONG
volatile *Addend
)
50 return _InterlockedDecrement(Addend
);
55 InterlockedPopEntrySList(
56 PSLIST_HEADER ListHead
)
58 PSLIST_ENTRY Result
= NULL
;
60 static BOOLEAN GLLInit
= FALSE
;
61 static KSPIN_LOCK GlobalListLock
;
65 KeInitializeSpinLock(&GlobalListLock
);
69 KeAcquireSpinLock(&GlobalListLock
, &OldIrql
);
70 if(ListHead
->Next
.Next
)
72 Result
= ListHead
->Next
.Next
;
73 ListHead
->Next
.Next
= Result
->Next
;
75 KeReleaseSpinLock(&GlobalListLock
, OldIrql
);
82 InterlockedPushEntrySList(
83 IN PSLIST_HEADER ListHead
,
84 IN PSLIST_ENTRY ListEntry
)
90 PrevValue
= ListHead
->Next
.Next
;
91 ListEntry
->Next
= PrevValue
;
93 while (InterlockedCompareExchangePointer(&ListHead
->Next
.Next
,
95 PrevValue
) != PrevValue
);
97 return (PSLIST_ENTRY
)PrevValue
;
103 ExInterlockedAddLargeStatistic(
104 IN PLARGE_INTEGER Addend
,
107 _InterlockedAddLargeStatistic(&Addend
->QuadPart
, Increment
);
113 ExInterlockedCompareExchange64(
114 IN OUT PLONGLONG Destination
,
115 IN PLONGLONG Exchange
,
116 IN PLONGLONG Comparand
,
122 KeAcquireSpinLock(Lock
, &OldIrql
);
123 Result
= *Destination
;
124 if(*Destination
== Result
)
125 *Destination
= *Exchange
;
126 KeReleaseSpinLock(Lock
, OldIrql
);