PopUmpoProcessMessages

VOID __stdcall PopUmpoProcessMessages(){
  VOID **PoolWithTag; 
  NTSTATUS v1; 
  INT64 v2; 
  INT64 v3; 
  _ALPC_CONTEXT_ATTR *MessageAttribute; 
  PORT_MESSAGE *ReceiveMessage; 
  UINT64 *BufferLength; 
  UINT64 v7; 
  _LARGE_INTEGER Timeout; 
  __int64 RequiredBufferSize[2]; 
  _ALPC_MESSAGE_ATTRIBUTES Buffer[20]; 

  v7 = 0i64;
  Timeout.QuadPart = 0i64;
  PoolWithTag = ExAllocatePoolWithTag(1ui64, 0x1000ui64, 1869638997i64);
  if( !PoolWithTag )
    goto LABEL_7;
  memset(Buffer, 0i64, sizeof(Buffer));
  while( 1 )
  {
    AlpcInitializeMessageAttribute(0x20000000ui64, Buffer, 0xA0ui64, (UINT64 *)RequiredBufferSize);
    v7 = 4096i64;
    v1 = ZwAlpcSendWaitReceivePort(
           (VOID *)PopAlpcServerPort,
           0i64,
           0i64,
           0i64,
           (PORT_MESSAGE *)PoolWithTag,
           &v7,
           Buffer,
           &Timeout);
    if( v1 )
      break;
    MessageAttribute = (_ALPC_CONTEXT_ATTR *)AlpcGetMessageAttribute(
                                               Buffer,
                                               0x20000000ui64,
                                               v2,
                                               v3,
                                               (INT64)ReceiveMessage,
                                               (INT64)BufferLength);
    PopUmpoProcessMessage((PORT_MESSAGE *)PoolWithTag, MessageAttribute);
  }
  ExFreePoolWithTag(PoolWithTag, 0);
  if( v1 < 0 )
LABEL_7:
    PopDiagTraceUmpoAlpcProcessingError();
}

Referenced by:

PopUmpoInitializeChannel
PopUmpoMessageCallback