VrpIncrementSiloCount

INT64 __stdcall VrpIncrementSiloCount(){
  _ETHREAD *CurrentThread; 
  int v1; 
  INT64 v2; 
  char v3; 
  UNICODE_STRING v5; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  v1 = 0;
  --*((_WORD *)CurrentThread + 242);
  ExAcquirePushLockExclusiveEx((UINT64)&VrpActiveSilosLock, 0i64);
  if( VrpNumActiveSilos
    || (*(_QWORD *)&v5.Length = 917516i64,
        v5.Buffer = (wchar_t *)&stru_1407CDE30.Xmm15,
        v1 = CmRegisterInternalCallback(v2, &v5),
        v1 >= 0) )
  {
    ++VrpNumActiveSilos;
  }
  v3 = _InterlockedExchangeAdd64((volatile signed __int64 *)&VrpActiveSilosLock, 0xFFFFFFFFFFFFFFFFui64);
  if( (v3 & 2) != 0 && (v3 & 4) == 0 )
    ExfTryToWakePushLock((volatile INT64 *)&VrpActiveSilosLock);
  KeAbPostRelease(&VrpActiveSilosLock);
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
  return(unsigned int)v1;
}

Referenced by:

VrpHandleIoctlInitializeJobForVreg