EmonCompleteInitializeProfiling
VOID __stdcall EmonCompleteInitializeProfiling(INT64 a1){
__int64 v1;
__int64 v2;
PROCESSOR_PROFILE_CONTROL_AREA *v3;
size_t v4;
unsigned __int64 v5;
unsigned __int64 *PebsFixedCounterReset;
unsigned int MaximumRegisteredProcessorCount;
unsigned int PebsBufferBase;
PROCESSOR_PROFILE_CONTROL_AREA *v9;
if( *(&CmpDummyThreadEvent + 4921) )
{
LODWORD(v1) = KeGetPcr()->Prcb.Number;
v2 = 4096i64;
if( ((_DWORD)v1
|| (MaximumRegisteredProcessorCount = HalpQueryMaximumRegisteredProcessorCount(),
KeAllocateProcessorProfileStructures(
MaximumRegisteredProcessorCount,
4096i64,
(PROCESSOR_PROFILE_CONTROL_AREA **)&CmpDummyThreadEvent + 614,
1) >= 0))
&& (v9 = (PROCESSOR_PROFILE_CONTROL_AREA *)(*(&CmpDummyThreadEvent + 614) + 160 * v1),
KeAllocateProcessorProfileStructures(0i64, 0i64, &v9, 0) >= 0) )
{
if( *(&CmpDummyThreadEvent + 1245) )
v2 = *(&CmpDummyThreadEvent + 1245) * (0x1000u / *(&CmpDummyThreadEvent + 1245));
v3 = v9;
v4 = 8 * *(&CmpDummyThreadEvent + 1223);
if( *(&CmpDummyThreadEvent + 4920) )
{
v5 = v9->PebsDsSaveArea.As32Bit.PebsGpCounterReset[0];
v9->PebsDsSaveArea.As32Bit.PebsGpCounterReset[1] = v5;
v3->PebsDsSaveArea.As32Bit.PebsGpCounterReset[2] = v2 + v5;
v3->PebsDsSaveArea.As32Bit.PebsGpCounterReset[3] = v5;
memset(v3->PebsDsSaveArea.As64Bit.PebsGpCounterReset, 0i64, v4);
PebsFixedCounterReset = v3->PebsDsSaveArea.As64Bit.PebsFixedCounterReset;
}
else
{
PebsBufferBase = v9->PebsDsSaveArea.As32Bit.PebsBufferBase;
v9->PebsDsSaveArea.As32Bit.PebsIndex = PebsBufferBase;
v3->PebsDsSaveArea.As32Bit.PebsAbsoluteMaximum = PebsBufferBase + v2;
v3->PebsDsSaveArea.As32Bit.PebsInterruptThreshold = PebsBufferBase;
memset(&v3->PebsDsSaveArea.As64Bit.PebsBufferBase, 0i64, v4);
PebsFixedCounterReset = v3->PebsDsSaveArea.As32Bit.PebsFixedCounterReset;
}
memset(PebsFixedCounterReset, 0i64, 8 * *(&CmpDummyThreadEvent + 1244));
__writemsr(0x600u, (unsigned __int64)v3);
}
else
{
*(&CmpDummyThreadEvent + 4921) = 0;
}
}
}Referenced by:
No references.