WbAddWarbirdEncryptionSegment

INT64 __fastcall WbAddWarbirdEncryptionSegment(INT64 a1, INT64 a2, _QWORD *a3){
  int v3; 
  _ETHREAD *CurrentThread; 
  UINT64 *v8; 
  _BYTE *v9; 
  _BYTE *v10; 
  int v11; 
  INT64 v12; 
  int v13; 
  char v14; 
  __int64 v16; 
  INT64 a5; 
  UINT64 a6; 
  INT64 a4; 
  volatile INT64 *a3a; 
  INT64 a2a; 
  int v22; 
  int v23; 
  v3 = *(_DWORD *)(a2 + 24);
  v23 = 0;
  a3a = 0i64;
  LODWORD(a4) = 0;
  v22 = v3;
  a2a = *(_QWORD *)(a2 + 32);
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 243);
  v8 = (UINT64 *)(a1 + 176);
  LODWORD(v9) = KeAbPreAcquire((PVOID)(a1 + 176), 0i64, 0i64);
  v10 = v9;
  if( _interlockedbittestandset64((volatile signed __int32 *)v8, 0i64) )
    ExfAcquirePushLockExclusiveEx(v8, v9, v8);
  if( v10 )
    v10[26] |= 1u;
  v11 = sub_1405D21B8(a1, (INT64)&a2a, &a3a, &a4);
  v13 = v11;
  if( v11 )
  {
    if( v11 == -1073741198 )
    {
      LODWORD(a6) = a4;
      LODWORD(a5) = 16;
      v13 = sub_14065FDF0((INT64 *)(a1 + 136), a2, v12, (INT64)&a2a, a5, a6);
      if( v13 >= 0 )
        v13 = sub_1405D23E0((volatile INT64 *)a2);
    }
  }
  else if( a3 )
  {
    sub_1405D23E0(a3a);
    a3a = 0i64;
    *a3 = v16;
  }
  sub_1405D2184(a3a);
  v14 = _InterlockedExchangeAdd64((volatile signed __int64 *)v8, 0xFFFFFFFFFFFFFFFFui64);
  if( (v14 & 2) != 0 && (v14 & 4) == 0 )
    ExfTryToWakePushLock((volatile INT64 *)v8);
  KeAbPostRelease(v8);
  KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
  return(unsigned int)v13;
}

Referenced by:

WbGetWarbirdEncryptionSegment