WbRemoveWarbirdProcess

NTSTATUS __fastcall WbRemoveWarbirdProcess(INT64 a1){
  _ETHREAD *CurrentThread; 
  _BYTE *v3; 
  NTSTATUS v4; 
  _ETHREAD *v6; 
  _BYTE *v7; 
  _BYTE *v8; 
  char v9; 
  UINT64 v10; 
  _LARGE_INTEGER v11; 
  VOID *v12; 
  __int64 v13; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v13 = 0i64;
  --CurrentThread->Tcb.SpecialApcDisable;
  v3 = KeAbPreAcquire(&LockPointer, 0i64, 0i64);
  if( _InterlockedCompareExchange64(&LockPointer._bf_0, 17i64, 0i64) )
    ExfAcquirePushLockSharedEx(&LockPointer, v3, &LockPointer);
  if( v3 )
    v3[26] |= 1u;
  v4 = sub_14065EAF4(a1, 0i64);
  if( _InterlockedCompareExchange64(&LockPointer._bf_0, 0i64, 17i64) != 17 )
    ExfReleasePushLockShared(&LockPointer);
  KeAbPostRelease(&LockPointer);
  KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
  if( v4 >= 0 )
  {
    v6 = (_ETHREAD *)KeGetCurrentThread();
    --v6->Tcb.SpecialApcDisable;
    v7 = KeAbPreAcquire(&LockPointer, 0i64, 0i64);
    v8 = v7;
    if( _interlockedbittestandset64((volatile signed __int32 *)&LockPointer, 0i64) )
      ExfAcquirePushLockExclusiveEx(&LockPointer, v7, &LockPointer);
    if( v8 )
      v8[26] |= 1u;
    v4 = sub_14065D374((__int64)&qword_140C53AD0, a1, 8u, -1, &v13);
    v9 = _InterlockedExchangeAdd64(&LockPointer._bf_0, 0xFFFFFFFFFFFFFFFFui64);
    if( (v9 & 2) != 0 && (v9 & 4) == 0 )
      ExfTryToWakePushLock(&LockPointer);
    KeAbPostRelease(&LockPointer);
    KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
    sub_14065E8E4(v13, v10, v11, v12);
  }
  return v4;
}

Referenced by:

WbDispatchOperation