PpmUpdateProcessorIdleVeto
INT64 __fastcall PpmUpdateProcessorIdleVeto(INT64 a1){
unsigned int ProcessorIndexFromNumber;
UINT64 v3;
__int64 v4;
__int64 v5;
int updated;
__int64 v7;
unsigned __int8 v8;
unsigned __int64 v9;
__int64 v11;
char v12[16];
int v13;
INT64 v14;
__int64 v15;
v12[0] = 0;
memset((INT64)&v15, 0i64);
ProcessorIndexFromNumber = KeGetProcessorIndexFromNumber((_PROCESSOR_NUMBER *)(a1 + 4));
KeGetPrcb(ProcessorIndexFromNumber);
v5 = v4;
if( ProcessorIndexFromNumber == -1 )
{
return(unsigned int)-1073741811;
}
else
{
KeAcquireSpinLockRaiseToDpc(&PpmIdleVetoLock, v3);
v7 = *(_QWORD *)(v5 + 0x8000);
v9 = v8;
if( v7 )
{
v11 = *(unsigned int *)(a1 + 8);
if( (unsigned int)v11 < *(_DWORD *)(v7 + 32) )
{
updated = PpmUpdateIdleVeto(*(_BYTE *)(a1 + 16), *(unsigned int *)(a1 + 12), v7 + 248 * v11 + 1016, (BYTE *)v12);
if( updated >= 0 )
{
PpmEventProcessorVetoRequest(
v5,
*(_DWORD *)(a1 + 8),
(EVENT_DESCRIPTOR *)*(unsigned int *)(a1 + 12),
*(_BYTE *)(a1 + 16));
if( v12[0] )
{
if( (struct _KPRCB *)v5 != KeGetCurrentPrcb() )
{
KxReleaseSpinLock(&PpmIdleVetoLock);
__writecr8(v9);
v13 = 1310721;
memset((INT64)&v14, 0i64);
KeAddProcessorAffinityEx(&v13, ProcessorIndexFromNumber);
PopExecuteOnTargetProcessors((INT64)&v13, (INT64)HalSystemVectorDispatchEntry, 0i64, 0i64);
return(unsigned int)updated;
}
}
}
}
else
{
updated = -1073741811;
}
}
else
{
updated = -1073741637;
}
KxReleaseSpinLock(&PpmIdleVetoLock);
__writecr8(v9);
}
return(unsigned int)updated;
}Referenced by:
No references.