ExReleaseCacheAwarePushLockExclusiveEx
VOID __stdcall ExReleaseCacheAwarePushLockExclusiveEx(VOID *PushLock, ULONG_PTR Flags){
char v2;
volatile signed __int64 **v4;
volatile signed __int64 **v5;
_EX_PUSH_LOCK *v6;
v2 = Flags;
if( (Flags & 0xFFFFFFFC) != 0 )
KeBugCheckEx(0x152u, (PVOID)Flags, PushLock, 0i64, 0i64);
v4 = (volatile signed __int64 **)((char *)PushLock + 256);
v5 = (volatile signed __int64 **)PushLock;
if( PushLock < (char *)PushLock + 256 )
{
do
{
v6 = (_EX_PUSH_LOCK *)*v5;
if( (_InterlockedExchangeAdd64(*v5, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(v6);
++v5;
}
while( v5 < v4 );
}
if( (v2 & 2) == 0 )
KeAbPostRelease(PushLock);
}Referenced by:
No references.