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.