PopFxActivateComponent

void __fastcall PopFxActivateComponent(__int64 a1, __int64 a2, char a3, char a4){
  UINT64 v8; 
  char v9; 
  int *v10; 
  int v11; 
  _ETHREAD *CurrentThread; 
  unsigned __int8 v13; 
  unsigned __int64 v14; 
  char v15[64]; 
  memset((INT64)v15, 0i64);
  if( (*(_DWORD *)(a1 + 824) & 1) == 0 )
  {
    if( (a3 & 6) == 4 )
    {
      CurrentThread = (_ETHREAD *)KeGetCurrentThread();
      v9 = 1;
      --*((_WORD *)CurrentThread + 243);
    }
    else
    {
      v9 = 0;
    }
    v10 = (int *)v15;
    if( (a3 & 2) != 0 )
      v10 = 0i64;
    v11 = _InterlockedIncrement((volatile signed __int32 *)(a2 + 88));
    if( v11 == 1 )
    {
      _InterlockedIncrement((volatile signed __int32 *)(a2 + 88));
      PopFxActivateComponentWorker(a1, a2, a4, v10);
    }
    else
    {
      if( v11 < 0 )
      {
LABEL_10:
        if( v9 )
          KiLeaveGuardedRegionUnsafe((__int64)KeGetCurrentThread());
        return;
      }
      if( (v11 & 0x40000000) != 0 )
      {
        KeAcquireSpinLockRaiseToDpc((UINT64 *)(a2 + 128), v8);
        v14 = v13;
        KxReleaseSpinLock((UINT64 *)(a2 + 128));
        __writecr8(v14);
      }
    }
    if( (a3 & 1) != 0 )
      KeWaitForSingleObject((PVOID)(a2 + 104), Executive, 0, 0, 0i64);
    goto LABEL_10;
  }
}

Referenced by:

PopFxActivateComponentWorker
PopFxRegisterDeviceWorker