WbRemoveWarbirdProcess

INT64 __fastcall WbRemoveWarbirdProcess(INT64 rcx0){
  _ETHREAD *CurrentThread; 
  _BYTE *v3; 
  _BYTE *v4; 
  int v5; 
  _ETHREAD *v7; 
  _BYTE *v8; 
  _BYTE *v9; 
  char v10; 
  volatile signed __int64 *a1; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  a1 = 0i64;
  --*((_WORD *)CurrentThread + 243);
  LODWORD(v3) = KeAbPreAcquire(&qword_140C53AF8, 0i64, 0i64);
  v4 = v3;
  if( _InterlockedCompareExchange64((volatile signed __int64 *)&qword_140C53AF8, 17i64, 0i64) )
    ExfAcquirePushLockSharedEx(&qword_140C53AF8, v3, &qword_140C53AF8);
  if( v4 )
    v4[26] |= 1u;
  v5 = sub_14065EAF4(rcx0, 0i64);
  if( _InterlockedCompareExchange64((volatile signed __int64 *)&qword_140C53AF8, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared((INT64 *)&qword_140C53AF8);
  KeAbPostRelease(&qword_140C53AF8);
  KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
  if( v5 >= 0 )
  {
    v7 = (_ETHREAD *)KeGetCurrentThread();
    --*((_WORD *)v7 + 243);
    LODWORD(v8) = KeAbPreAcquire(&qword_140C53AF8, 0i64, 0i64);
    v9 = v8;
    if( _interlockedbittestandset64((volatile signed __int32 *)&qword_140C53AF8, 0i64) )
      ExfAcquirePushLockExclusiveEx(&qword_140C53AF8, v8, &qword_140C53AF8);
    if( v9 )
      v9[26] |= 1u;
    v5 = sub_14065D374((INT64)&qword_140C53AD0, rcx0, 8ui64, 0xFFFFFFFFi64, &a1);
    v10 = _InterlockedExchangeAdd64((volatile signed __int64 *)&qword_140C53AF8, 0xFFFFFFFFFFFFFFFFui64);
    if( (v10 & 2) != 0 && (v10 & 4) == 0 )
      ExfTryToWakePushLock((volatile INT64 *)&qword_140C53AF8);
    KeAbPostRelease(&qword_140C53AF8);
    KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
    sub_14065E8E4(a1);
  }
  return(unsigned int)v5;
}

Referenced by:

WbDispatchOperation