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.