PoCaptureReasonContext

NTSTATUS __stdcall PoCaptureReasonContext(
        _COUNTED_REASON_CONTEXT *Context,
        INT8 PreviousMode,
        _DEVICE_OBJECT *DeviceObject,
        UINT8 BaseStructureSafe,
        UINT8 *ImportantTimer,
        _DIAGNOSTIC_CONTEXT **ReturnContext){
  int v6; 
  INT64 a6[2]; 
  INT64 a8[2]; 
  PUNICODE_STRING ReasonStrings; 

  *(_OWORD *)a6 = 0i64;
  *(_OWORD *)a8 = 0i64;
  ReasonStrings = 0i64;
  *ReturnContext = 0i64;
  if( Context && PreviousMode )
  {
    if( !BaseStructureSafe )
    {
      if( ((unsigned __int8)Context & 3) != 0 )
        ExRaiseDatatypeMisalignment();
      if( (unsigned __int64)&Context[1] > 0x7FFFFFFF0000i64 || &Context[1] < Context )
        MEMORY[0x7FFFFFFF0000] = 0;
      *(_OWORD *)a6 = *(_OWORD *)&Context->Version;
      *(_OWORD *)a8 = *(_OWORD *)&Context->SimpleString.Buffer;
      ReasonStrings = Context->ReasonStrings;
      Context = (_COUNTED_REASON_CONTEXT *)a6;
    }
    v6 = PopCaptureReasonContext(Context, PreviousMode, ImportantTimer, ReturnContext);
  }
  else
  {
    v6 = PopCaptureReasonContext(Context, PreviousMode, ImportantTimer, ReturnContext);
  }
  if( v6 >= 0 )
    PoGetRequester();
  return v6;
}

Referenced by:

NtSetThreadExecutionState
NtSetTimer
NtSetTimerEx
PoCreatePowerRequest
PoCreateThermalRequest
PoRegisterSystemState
PopInitializeHighPerfPowerRequest
PopPowerRequestCreateInfo