HalpTscReserveResources

CHAR __fastcall HalpTscReserveResources(INT64 a1){
  unsigned int MaximumRegisteredProcessorCount; 
  __int64 v2; 
  __int64 v3; 
  ULONG_PTR v4; 
  __int64 v5; 
  __int64 v6; 
  HalpTscFallbackLock = 0i64;
  MaximumRegisteredProcessorCount = HalpQueryMaximumRegisteredProcessorCount(a1);
  v2 = MaximumRegisteredProcessorCount;
  if( *(_DWORD *)(HalpPerformanceCounter + 228) == 5 )
  {
    v3 = (4 * MaximumRegisteredProcessorCount
        + ((4 * MaximumRegisteredProcessorCount + 8 * MaximumRegisteredProcessorCount + 7) & 0xFFFFFFF8)
        + 7) & 0xFFFFFFF8;
    v4 = ((((_DWORD)v3 + 4 * MaximumRegisteredProcessorCount + 7) & 0xFFFFFFF8)
        + (MaximumRegisteredProcessorCount << 7)
        + 135) & 0xFFFFFFF8;
    v5 = HalpMmAllocCtxAlloc(v3, v4);
    v6 = v5;
    if( !v5 )
      KeBugCheckEx(0xACu, v4, 0xAB00ui64, (ULONG_PTR)"minkernel\\hals\\lib\\timers\\pc\\tscsync.c", 0x15Eui64);
    memset(v5, 0i64);
    HalpTscDeltas = v6;
    HalpTscMaximumCounterSyncSpread = 1024;
    HalpTscNopCycles = (v6 + 8 * v2 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
    HalpTscWaves = (HalpTscNopCycles + 4 * v2 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
    HalpTscSkewOffset = (HalpTscWaves + 4 * v2 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
    TscRequest = (((HalpTscSkewOffset + 4 * v2 + 7) & 0xFFFFFFFFFFFFFFF8ui64) + 120) & 0xFFFFFFFFFFFFFF80ui64;
    LOBYTE(MaximumRegisteredProcessorCount) = HalpTscCheckAdjustMsrCapability();
    HalpTscAdjustAvailable = MaximumRegisteredProcessorCount;
  }
  return MaximumRegisteredProcessorCount;
}

Referenced by:

No references.