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.