VrpIncrementSiloCount

NTSTATUS __stdcall VrpIncrementSiloCount(){
  _ETHREAD *CurrentThread; 
  NTSTATUS v1; 
  __int64 v2; 
  char v3; 
  const VOID *v5[3]; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v1 = 0;
  --CurrentThread->Tcb.KernelApcDisable;
  ExAcquirePushLockExclusiveEx(&VrpActiveSilosLock, 0i64);
  if( VrpNumActiveSilos
    || (v5[0] = (const VOID *)917516, v5[1] = &stru_1407CDE30._Xmm15, v1 = CmRegisterInternalCallback(v2, v5), v1 >= 0) )
  {
    ++VrpNumActiveSilos;
  }
  v3 = _InterlockedExchangeAdd64(&VrpActiveSilosLock._bf_0, 0xFFFFFFFFFFFFFFFFui64);
  if( (v3 & 2) != 0 && (v3 & 4) == 0 )
    ExfTryToWakePushLock(&VrpActiveSilosLock);
  KeAbPostRelease(&VrpActiveSilosLock);
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
  return v1;
}

Referenced by:

VrpHandleIoctlInitializeJobForVreg