PopInvokeWin32Callout

INT64 __fastcall PopInvokeWin32Callout(INT64 a1, VOID *a2, INT64 a3, UINT64 *a4){
  unsigned int v4; 
  char v6; 
  unsigned int v7; 
  _QWORD *v8; 
  _QWORD *v9; 
  unsigned int v10; 
  UINT64 *p_SessionId; 
  __int64 v12; 
  unsigned int v13; 
  __int64 v14; 
  __int64 v15; 
  _QWORD *v17; 
  _QWORD *v18; 
  int v19; 
  int SessionId; 
  __int64 OutputBuffer; 
  int InputBuffer; 
  _DWORD result[7]; 
  _ETHREAD *CurrentThread; 
  INT64(__fastcall *v25)(INT64, INT64, INT64, INT64, INT64, INT64); 
  int *p_InputBuffer; 
  char v27; 
  unsigned int v28; 
  v28 = a1;
  v4 = a3;
  SessionId = 0;
  v19 = 0;
  OutputBuffer = 0i64;
  v6 = 0;
  v7 = 0;
  memset((INT64)result, 0i64);
  InputBuffer = 21;
  if( ZwPowerInformation(SystemPowerStateLogging|0x40, &InputBuffer, 0x60u, &OutputBuffer, 8u) < 0 )
    return v7;
  LODWORD(v8) = MmGetNextSession(0i64);
  v9 = v8;
  do
  {
    if( v9 && *(_QWORD *)(v9[171] + 1048i64) != HalSystemVectorDispatchEntry() )
    {
      if( v4 == 2 )
      {
        LODWORD(v18) = MmGetNextSession(v9);
        v9 = v18;
        if( v18 )
          continue;
      }
      else
      {
        v7 = -1073741811;
      }
      v6 = 1;
    }
    else
    {
      if( v4 == 2 && v9 )
      {
        v10 = 1;
        SessionId = MmGetSessionId((__int64)v9);
        p_SessionId = (UINT64 *)&SessionId;
        LODWORD(v17) = MmGetNextSession(v9);
        v9 = v17;
        if( !v17 )
          v6 = 1;
      }
      else
      {
        v6 = 1;
        v10 = v4;
        p_SessionId = a4;
        if( a4 )
          v19 = *(_DWORD *)a4;
        else
          v19 = -1;
      }
      v12 = OutputBuffer;
      if( OutputBuffer )
      {
        memset((INT64)&InputBuffer, 0i64);
        InputBuffer = 21;
        *(_QWORD *)&result[1] = v12;
        result[5] = 417;
        result[3] = 1000 * PopWin32kCalloutWatchdogTimeoutSeconds;
        result[4] = v19;
        CurrentThread = (_ETHREAD *)KeGetCurrentThread();
        p_InputBuffer = &InputBuffer;
        v25 = PopWin32CalloutWatchdogCallbackLiveDump;
        ZwPowerInformation(SystemPowerStateLogging|0x40, &InputBuffer, 0x60u, 0i64, 0);
      }
      v13 = PsInvokeWin32Callout(v28, a2, v10, p_SessionId);
      v14 = OutputBuffer;
      v7 = v13;
      if( OutputBuffer )
      {
        memset((INT64)&InputBuffer, 0i64);
        InputBuffer = 21;
        *(_QWORD *)&result[1] = v14;
        ZwPowerInformation(SystemPowerStateLogging|0x40, &InputBuffer, 0x60u, 0i64, 0);
      }
    }
  }
  while( !v6 );
  v15 = OutputBuffer;
  if( OutputBuffer )
  {
    memset((INT64)&InputBuffer, 0i64);
    InputBuffer = 21;
    *(_QWORD *)&result[1] = v15;
    v27 = 1;
    ZwPowerInformation(SystemPowerStateLogging|0x40, &InputBuffer, 0x60u, 0i64, 0);
  }
  return v7;
}

Referenced by:

PoSessionBuiltinPanelState
PoSessionEngagementUpdate
PoSessionPowerControl
PopBroadcastSessionInfo
PopControlMonitor
PopDispatchStateCallout
PopEventCalloutDispatch
PopGetConsoleDisplayRequestCount
PopNotifyConsoleUserPresent
PopNotifySessionDisplayRequired
PopPowerAggregatorNotifyCsStateExited
PopSendSessionInfo