PoCaptureReasonContext

INT64 __fastcall PoCaptureReasonContext(
        UINT64 a1,
        CHAR a2,
        VOID *a3,
        CHAR a4,
        BOOL *ImportantTimer,
        INT64 *ReturnContext){
  CHAR v7; 
  INT64 v8; 
  int v9; 
  int v10; 
  INT64 v12; 
  INT64 a6[2]; 
  INT64 a8[2]; 
  __int64 v15; 
  v7 = a2;
  *(_OWORD *)a6 = 0i64;
  *(_OWORD *)a8 = 0i64;
  v15 = 0i64;
  *ReturnContext = 0i64;
  if( a1 && a2 )
  {
    if( !a4 )
    {
      if( (a1 & 3) != 0 )
        ExRaiseDatatypeMisalignment();
      *(_QWORD *)&a2 = 0x7FFFFFFF0000i64;
      if( a1 + 40 > 0x7FFFFFFF0000i64 || a1 + 40 < a1 )
        MEMORY[0x7FFFFFFF0000] = 0;
      *(_OWORD *)a6 = *(_OWORD *)a1;
      *(_OWORD *)a8 = *(_OWORD *)(a1 + 16);
      v15 = *(_QWORD *)(a1 + 32);
      a1 = (UINT64)a6;
    }
    LOBYTE(v8) = v7;
    v10 = PopCaptureReasonContext(
            (_COUNTED_REASON_CONTEXT *)a1,
            v8,
            (UINT8 *)ImportantTimer,
            (_DIAGNOSTIC_CONTEXT **)ReturnContext,
            v12,
            a6[0],
            a6[1],
            a8[0]);
  }
  else
  {
    v10 = PopCaptureReasonContext(
            (_COUNTED_REASON_CONTEXT *)a1,
            a2,
            (UINT8 *)ImportantTimer,
            (_DIAGNOSTIC_CONTEXT **)ReturnContext,
            v12,
            a6[0],
            a6[1],
            a8[0]);
  }
  if( v10 >= 0 )
  {
    LOBYTE(v9) = v7;
    PoGetRequester(v9, (_DEVICE_OBJECT *)a3, (_DIAGNOSTIC_CONTEXT *)*ReturnContext);
  }
  return(unsigned int)v10;
}

Referenced by:

NtSetThreadExecutionState
NtSetTimer
NtSetTimerEx
PoCreatePowerRequest
PoCreateThermalRequest
PoRegisterSystemState
PopInitializeHighPerfPowerRequest
PopPowerRequestCreateInfo