ExpWakePushLock

VOID __fastcall ExpWakePushLock(volatile INT64 *a1, INT64 a2){
  int v2; 
  _QWORD *v3; 
  struct _KEVENT *v4; 
  _LIST_ENTRY *Blink; 
  bool v6; 
  INT64 v7; 
  unsigned __int8 CurrentIrql; 
  _LIST_ENTRY *v9; 
  __int64 Flink; 
  INT64 v11; 
  _QWORD *v12; 
  v2 = 1;
  while( (a2 & 1) == 0 )
  {
LABEL_3:
    v3 = (_QWORD *)(a2 & 0xFFFFFFFFFFFFFFF0ui64);
    v4 = *(struct _KEVENT **)((a2 & 0xFFFFFFFFFFFFFFF0ui64) + 0x20);
    if( !v4 )
    {
      do
      {
        v12 = v3;
        v3 = (_QWORD *)v3[3];
        v3[5] = v12;
        v4 = (struct _KEVENT *)v3[4];
      }
      while( !v4 );
      if( v3 != (_QWORD *)(a2 & 0xFFFFFFFFFFFFFFF0ui64) )
        *(_QWORD *)((a2 & 0xFFFFFFFFFFFFFFF0ui64) + 0x20) = v4;
    }
    if( (v4[2].Header.SignalState & 1) != 0 )
    {
      Blink = v4[1].Header.WaitListHead.Blink;
      if( Blink )
      {
        *(_QWORD *)((a2 & 0xFFFFFFFFFFFFFFF0ui64) + 0x20) = Blink;
        v4[1].Header.WaitListHead.Blink = 0i64;
        _InterlockedAnd64(a1, 0xFFFFFFFFFFFFFFFBui64);
        v2 = 0;
LABEL_7:
        CurrentIrql = 2;
        if( v4[1].Header.WaitListHead.Blink )
        {
          CurrentIrql = KeGetCurrentIrql();
          __writecr8(2ui64);
        }
        if( !v2 )
        {
          Flink = (__int64)v4[2].Header.WaitListHead.Flink;
          if( Flink )
            KiAbApplyWakeupBoost(*((_BYTE *)KeGetCurrentThread() + 195), Flink, 0);
        }
        do
        {
          v9 = v4[1].Header.WaitListHead.Blink;
          if( !_interlockedbittestandreset(&v4[2].Header.SignalState, 1u) )
            KeSetEvent(v4, 0);
          v4 = (struct _KEVENT *)v9;
        }
        while( v9 );
        if( CurrentIrql != 2 )
          __writecr8(CurrentIrql);
        return;
      }
    }
    v7 = _InterlockedCompareExchange64(a1, 0i64, a2);
    v6 = a2 == v7;
    a2 = v7;
    if( v6 )
      goto LABEL_7;
  }
  while( 1 )
  {
    v11 = _InterlockedCompareExchange64(a1, a2 - 4, a2);
    v6 = a2 == v11;
    a2 = v11;
    if( v6 )
      break;
    if( (v11 & 1) == 0 )
      goto LABEL_3;
  }
}

Referenced by:

ExfReleasePushLockExclusive
ExfReleasePushLockShared
ExfReleasePushLockSharedEx
ExfTryToWakePushLock
ExpOptimizePushLockList