PoStoreDiagnosticContext

INT64 __fastcall PoStoreDiagnosticContext(INT64 a1, UINT64 *a2, UINT64 *a3){
  UINT64 v3; 
  INT64 result; 
  __int64 v8; 
  UINT64 v9; 
  unsigned int v10; 
  bool v11; 
  UINT8 *v12; 
  UINT64 v13; 
  UINT64 v14; 
  v3 = *a3;
  v14 = *a3;
  result = PoStoreRequester(a1, (INT64)a2, &v14, 0);
  v8 = *(_QWORD *)(a1 + 24);
  v9 = v14;
  v10 = result;
  v11 = (int)result >= 0;
  if( v8 )
  {
    v12 = (UINT8 *)(((unsigned __int64)a2 + v14 + 7) & 0xFFFFFFFFFFFFFFF8ui64);
    v13 = v12 - (UINT8 *)a2 + v8;
    *a3 = v13;
    if( v11 && v3 >= v13 )
    {
      a2[4] = v12 - (UINT8 *)a2;
      *a2 = v13;
      memmove(v12, (UINT8 *)((a1 + 39) & 0xFFFFFFFFFFFFFFF8ui64), *(_QWORD *)(a1 + 24));
      return v10;
    }
    else
    {
      return 3221225507i64;
    }
  }
  else
  {
    if( (int)result >= 0 )
    {
      a2[4] = 0i64;
      *a2 = v9;
    }
    *a3 = v9;
  }
  return result;
}

Referenced by:

ExGetNextWakeTime
ExGetWakeTimerList
PopGetPowerRequestDiagnosticBuffer
PopGetPowerRequestListInfo
PopTraceThermalRequestActiveActivity
PopTraceThermalRequestPassiveHistogram