HalpInitializeTimers

NTSTATUS __stdcall HalpInitializeTimers(_LOADER_PARAMETER_BLOCK *LoaderBlock){
  _KDPC *v2; 
  PVOID v3; 
  PVOID v4; 
  PVOID v5; 
  __int64 v6; 
  int ReferencePage; 
  INT64 *Timer; 
  INT64 v9; 
  int v10; 
  int v11; 
  unsigned int v12; 
  WCHAR *v13; 
  int v14; 
  char v16[136]; 
  int v17; 
  int v18; 

  memset(v16, 0i64, sizeof(v16));
  HalpTimerLoaderBlock = LoaderBlock;
  v2 = HalpStallCounter;
  HalpOriginalStallTimer = (__int64)HalpStallCounter;
  HalpTimerGetInternalData(HalpStallCounter, v3, v4, v5);
  ReferencePage = ((__int64(__fastcall *)(__int64))v2[1].SystemArgument1)(v6);
  if( ReferencePage < 0 )
  {
    v2[4].TargetInfoAsUlong = ReferencePage;
    HalpTimerLastProblem = 15;
    HIDWORD(v2[3].DpcData) = 15;
    v2[4].DpcListEntry.Next = (_SINGLE_LIST_ENTRY *)"minkernel\\hals\\lib\\timers\\common\\timer.c";
    LODWORD(v2[4].ProcessorHistory) = 1552;
  }
  else
  {
    ReferencePage = HalpTimerRegisterBuiltinPluginsCommon(1i64);
    if( ReferencePage < 0 )
    {
      HalpTimerLastProblem = 14;
    }
    else
    {
      Timer = HalpFindTimer(5, 0, 0, 0, 1);
      if( Timer )
      {
        v9 = Timer[36];
        v10 = *((_DWORD *)Timer + 57);
        v11 = *((_DWORD *)Timer + 71);
        v17 = v10;
        v12 = *(unsigned __int16 *)(v9 + 24);
        v13 = *(WCHAR **)(v9 + 32);
        v18 = v11;
        HalpTimerBuildKnownResourceIdString((__int64)v16, v12 >> 1, v13);
      }
      HalpTimerSelectRoles();
      ReferencePage = v14;
      if( v14 < 0 || (ReferencePage = HalpTimerCreateReferencePage(), ReferencePage < 0) )
LABEL_13:
        KeBugCheckEx(0x5Cu, (PVOID)0x110, (PVOID)0x5250631, (PVOID)HalpTimerLastProblem, (PVOID)ReferencePage);
      HalpOriginalPerformanceCounter = HalpPerformanceCounter;
      HalpTimerDpc.DeferredRoutine = (void(__fastcall *)(_KDPC *, void *, void *, void *))HalpTimerDpcRoutine;
      *(_QWORD *)&HalpTimerPeriodicTimer.gap0[16] = &HalpTimerPeriodicTimer.gap0[8];
      *(_QWORD *)&HalpTimerPeriodicTimer.gap0[8] = &HalpTimerPeriodicTimer.gap0[8];
      off_140C006A8[0] = (__int64(__fastcall *)())HalpTimerReportIdleStateUsage;
      *(_QWORD *)HalpTimerPeriodicTimer.gap0 = 8i64;
      off_140C006A0[0] = (__int64(__fastcall *)())HalpTimerQueryWakeTime;
      HalpTimerDpc.TargetInfoAsUlong = 275;
      HalpTimerDpc.DeferredContext = 0i64;
      HalpTimerDpc.DpcData = 0i64;
      HalpTimerDpc.ProcessorHistory = 0i64;
      HalpTimerPeriodicTimer.DueTime.QuadPart = 0i64;
      HalpTimerPeriodicTimer.Period = 0;
      HalpTimerPeriodicTimer.Processor = 0;
      if( HalpAlwaysOnCounter )
        HalpTimerMaximumAllowableDrift = HalpTimerCalculateMaximumAllowableDrift();
    }
  }
  if( ReferencePage < 0 )
    goto LABEL_13;
  return ReferencePage;
}

Referenced by:

No references.