PopInvokeWin32Callout

NTSTATUS __fastcall PopInvokeWin32Callout(INT64 a1, VOID *a2, INT64 a3, UINT64 *a4){
  PS_WIN32_SESSION_ATTACH_MODE v4; 
  char v6; 
  NTSTATUS v7; 
  PKINTERRUPT_ROUTINE **v8; 
  _MM_SESSION_SPACE *Session; 
  _EPROCESS *NextSession; 
  PKINTERRUPT_ROUTINE *v11; 
  __int64 v12; 
  PS_WIN32_SESSION_ATTACH_MODE v13; 
  UINT64 *p_SessionId; 
  UINT64 v16; 
  UINT64 v17; 
  int v18; 
  NTSTATUS SessionId; 
  __int64 OutputBuffer; 
  __int64 InputBuffer[18]; 
  _WIN32_CALLOUTS_OPERATION Operation; 

  Operation = (int)a1;
  v4 = (int)a3;
  SessionId = 0;
  v18 = 0;
  OutputBuffer = 0i64;
  v6 = 0;
  v7 = 0;
  memset((char *)InputBuffer + 4, 0i64, 0x5Cu);
  LODWORD(InputBuffer[0]) = 21;
  LODWORD(v16) = 8;
  if( ZwPowerInformation(PowerInformationInternal, InputBuffer, 0x60ui64, &OutputBuffer, v16) < 0 )
    return v7;
  NextSession = (_EPROCESS *)MmGetNextSession(0i64);
  do
  {
    if( NextSession
      && (LODWORD(v12) = HalSystemVectorDispatchEntry((UINT32)Session, v8, v11),
          Session = NextSession->Session,
          *((_QWORD *)Session + 131) != v12) )
    {
      if( v4 == PsWin32SessionAttachAll )
      {
        NextSession = (_EPROCESS *)MmGetNextSession(NextSession);
        if( NextSession )
          continue;
      }
      else
      {
        v7 = -1073741811;
      }
      v6 = 1;
    }
    else
    {
      if( v4 == PsWin32SessionAttachAll && NextSession )
      {
        v13 = PsWin32SessionAttachSingle;
        SessionId = MmGetSessionId(NextSession);
        p_SessionId = (UINT64 *)&SessionId;
        NextSession = (_EPROCESS *)MmGetNextSession(NextSession);
        if( !NextSession )
          v6 = 1;
      }
      else
      {
        v6 = 1;
        v13 = v4;
        p_SessionId = a4;
        if( a4 )
          v18 = *(_DWORD *)a4;
        else
          v18 = -1;
      }
      if( OutputBuffer )
      {
        memset(InputBuffer, 0i64, 0x60u);
        LODWORD(v17) = 0;
        LODWORD(InputBuffer[0]) = 21;
        InputBuffer[1] = OutputBuffer;
        LODWORD(InputBuffer[3]) = 417;
        LODWORD(InputBuffer[2]) = 1000 * PopWin32kCalloutWatchdogTimeoutSeconds;
        HIDWORD(InputBuffer[2]) = v18;
        InputBuffer[4] = (__int64)KeGetCurrentThread();
        InputBuffer[10] = (__int64)InputBuffer;
        InputBuffer[9] = (__int64)PopWin32CalloutWatchdogCallbackLiveDump;
        ZwPowerInformation(PowerInformationInternal, InputBuffer, 0x60ui64, 0i64, v17);
      }
      v7 = PsInvokeWin32Callout(Operation, a2, v13, p_SessionId);
      if( OutputBuffer )
      {
        memset(InputBuffer, 0i64, 0x60u);
        LODWORD(InputBuffer[0]) = 21;
        InputBuffer[1] = OutputBuffer;
        LODWORD(v17) = 0;
        ZwPowerInformation(PowerInformationInternal, InputBuffer, 0x60ui64, 0i64, v17);
      }
    }
  }
  while( !v6 );
  if( OutputBuffer )
  {
    memset(InputBuffer, 0i64, 0x60u);
    LODWORD(InputBuffer[0]) = 21;
    InputBuffer[1] = OutputBuffer;
    LOBYTE(InputBuffer[11]) = 1;
    LODWORD(v17) = 0;
    ZwPowerInformation(PowerInformationInternal, InputBuffer, 0x60ui64, 0i64, v17);
  }
  return v7;
}

Referenced by:

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