EmonPauseProfiling
UINT64 __stdcall EmonPauseProfiling(){
unsigned int v0;
UINT64 result;
__int64 v2;
unsigned int v3;
int *v4;
__int64 v5;
unsigned int v6;
UINT64 v7;
int *v8;
v0 = 0;
result = *(&CmpDummyThreadEvent + 1223);
v2 = *(&CmpDummyThreadEvent + 620) + 16i64 * *(&CmpDummyThreadEvent + 1217) * KeGetPcr()->Prcb.Number;
if( *(&CmpDummyThreadEvent + 1223) )
{
v3 = 390;
v4 = (int *)v2;
v0 = *(&CmpDummyThreadEvent + 1223);
v5 = *(&CmpDummyThreadEvent + 1223);
do
{
if( *v4 < 2 )
{
result = __readmsr(v3) & 0xFFBFFFFF;
__writemsr(v3, result);
}
++v3;
v4 += 4;
--v5;
}
while( v5 );
}
if( *(&CmpDummyThreadEvent + 1216) >= 2u )
{
v6 = *(&CmpDummyThreadEvent + 1217);
v7 = __readmsr(0x38Fu);
if( v0 < *(&CmpDummyThreadEvent + 1217) )
{
v8 = (int *)(v2 + 16i64 * v0);
do
{
if( *v8 < 2 )
_bittestandreset64((__int64 *)&v7, v0 - *(&CmpDummyThreadEvent + 1223) + 32);
++v0;
v8 += 4;
}
while( v0 < v6 );
}
result = v7;
__writemsr(0x38Fu, v7);
}
return result;
}Referenced by:
No references.