HalpTimerInitializeEarlyStallSource

NTSTATUS __fastcall HalpTimerInitializeEarlyStallSource(
        _LOADER_PARAMETER_BLOCK *LoaderBlock,
        INT64 a2,
        INT64 a3,
        INT64 a4,
        INT64 a5,
        INT64 a6,
        INT64 a7,
        INT64 a8){
  NTSTATUS v9; 
  _KDPC *Timer; 
  void *v11; 
  void *v12; 
  void *v13; 
  _KDPC *v14; 
  unsigned int v15; 
  bool v16; 
  unsigned __int64 ProcessorCounterFrequency; 

  LODWORD(HalpRegisteredTimerCount) = 0;
  HalpTimerLoaderBlock = LoaderBlock;
  qword_140C4BEA8 = (__int64)&HalpRegisteredTimers;
  HalpRegisteredTimers = (INT64)&HalpRegisteredTimers;
  v9 = HalpTimerRegisterBuiltinPluginsCommon(0i64);
  if( v9 < 0 )
  {
    HalpTimerLastProblem = 14;
  }
  else if( (_DWORD)HalpRegisteredTimerCount && (Timer = (_KDPC *)HalpFindTimer(0, 2, 0, 0, 1), (v14 = Timer) != 0i64) )
  {
    HalpPerformanceCounter = (INT64)Timer;
    HalpStallCounter = Timer;
    v9 = HalpTimerInitialize((INT64)Timer, v11, v12, v13);
    if( v9 >= 0 )
    {
      v15 = (__int64)v14[2].DpcData & 0xFFFFFFFB;
      v16 = *(_QWORD *)&v14[3].TargetInfoAsUlong == 0i64;
      LODWORD(v14[2].DpcData) = v15;
      if( v16 )
      {
        LODWORD(v14[2].DpcData) = v15 | 8;
        ProcessorCounterFrequency = LoaderBlock->Extension->ProcessorCounterFrequency;
        *(_QWORD *)&v14[3].TargetInfoAsUlong = ProcessorCounterFrequency;
        if( ProcessorCounterFrequency < 0x3E8 )
        {
          v14[4].TargetInfoAsUlong = 0;
          HalpTimerLastProblem = 40;
          HIDWORD(v14[3].DpcData) = 40;
          v14[4].DpcListEntry.Next = (_SINGLE_LIST_ENTRY *)"minkernel\\hals\\lib\\timers\\common\\timer.c";
          *(_QWORD *)&v14[3].TargetInfoAsUlong = 15625000i64;
          LODWORD(v14[4].ProcessorHistory) = 1186;
        }
      }
      else
      {
        HalpTimerProcessorFrequencyKnown = 1;
      }
    }
  }
  else
  {
    v9 = -1073741823;
    HalpTimerLastProblem = 21;
  }
  return v9;
}

Referenced by:

No references.