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.