HalpTimerInitializeProfiling
NTSTATUS __stdcall HalpTimerInitializeProfiling(){
_KDPC *v0;
NTSTATUS v1;
_KINTERRUPT_MODE v2;
INT64 v3;
void *v5;
void *v6;
void *v7;
__int64 v8;
void *v9;
void *v10;
void *v11;
__int64 v12;
INT64 a6;
int v14;
_GROUP_AFFINITY GroupAffinity;
v0 = (_KDPC *)HalpProfileTimer;
v1 = 0;
GroupAffinity = 0i64;
if( !qword_140C4A3C8 )
{
qword_140C4A3C8 = (__int64)HalpMmAllocatePerProcessorMemory();
if( !qword_140C4A3C8 )
return -1073741801;
}
v14 = 10000;
(*((void(__fastcall **)(_QWORD, int *))HalpProfileInterface[0] + 3))(0i64, &v14);
if( KeGetPcr()->Prcb.Number )
{
if( v0 )
{
HalpInterruptSetIdtEntry(0xFDui64, HalpTimerProfileInterrupt, 15, v3, (UINT64 *)0xFFFFFFFFFFFFFFFDi64);
if( ((__int64)v0[3].DeferredContext & 1) != 0 )
{
HalpTimerGetInternalData(v0, v5, v6, v7);
v1 = ((__int64(__fastcall *)(__int64))v0[1].SystemArgument1)(v8);
if( v1 >= 0 )
{
HalpTimerGetInternalData(v0, v9, v10, v11);
((void(__fastcall *)(__int64))v0[2].DpcListEntry.Next)(v12);
}
}
}
}
else if( v0 )
{
GroupAffinity.Reserved[1] = 0;
LOBYTE(v2) = 15;
GroupAffinity.Reserved[2] = 0;
*(_DWORD *)&GroupAffinity.Group = (unsigned __int16)((unsigned int)KiProcessorIndexToNumberMappingTable[0] >> 6);
GroupAffinity.Mask = 1i64 << (KiProcessorIndexToNumberMappingTable[0] & 0x3F);
LODWORD(a6) = 1;
return HalpTimerConfigureInterrupt(
v0,
(PVOID)0xFD,
v2,
v3,
(UINT64 *)0xFFFFFFFFFFFFFFFDi64,
a6,
&GroupAffinity,
HalpTimerProfileInterrupt);
}
return v1;
}Referenced by:
No references.