NtReplyWaitReceivePortEx

NTSTATUS __fastcall NtReplyWaitReceivePortEx(
        _HANDLE Handle,
        VOID **PortContext,
        _PORT_MESSAGE *Message,
        PORT_MESSAGE *ReceiveMessage,
        _LARGE_INTEGER *Timeout){
  VOID *v8; 
  _ETHREAD *CurrentThread; 
  char PreviousMode; 
  int v11; 
  _ADAPTER_OBJECT *v12; 
  NTSTATUS v14; 
  PVOID Object; 
  _ALPC_DISPATCH_CONTEXT DispatchContext; 

  v8 = *(VOID **)&Handle;
  memset(&DispatchContext, 0i64, sizeof(DispatchContext));
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.KernelApcDisable;
  PreviousMode = KeGetCurrentThread()->PreviousMode;
  if( PreviousMode )
    AlpcpProbeForWriteMessageHeader(ReceiveMessage);
  Object = 0i64;
  v11 = ObReferenceObjectByHandle(v8, 1ui64, AlpcPortObjectType, PreviousMode, &Object, 0i64);
  if( v11 >= 0 )
  {
    v12 = (_ADAPTER_OBJECT *)Object;
    DispatchContext.PortObject = (_ALPC_PORT *)Object;
    DispatchContext.Flags = 0;
    if( Message
      && ((*((_DWORD *)Object + 104) & 0x2000) == 0 ? (DispatchContext.Flags = 65541,
                                                       memset(&DispatchContext.TargetThread, 0, 24),
                                                       v14 = AlpcpSendMessage(
                                                               &DispatchContext,
                                                               Message,
                                                               0i64,
                                                               PreviousMode)) : (DispatchContext.Flags = 4,
                                                                                 memset(
                                                                                   &DispatchContext.TargetThread,
                                                                                   0,
                                                                                   24),
                                                                                 v14 = AlpcpReplyLegacySynchronousRequest(
                                                                                         &DispatchContext,
                                                                                         (PORT_MESSAGE *)&Message->u1.DataLength,
                                                                                         PreviousMode)),
          v11 = v14,
          v14 < 0) )
    {
      HalPutDmaAdapter(v12);
      if( v11 == -1073740029 )
        v11 = -1073741769;
    }
    else
    {
      v11 = AlpcpReceiveLegacyMessage(&DispatchContext, ReceiveMessage, Timeout, PortContext);
      AlpcpCompleteDeferSignalRequest(&DispatchContext);
      HalPutDmaAdapter(v12);
    }
  }
  KeLeaveCriticalRegionThread(KeGetCurrentThread());
  return v11;
}

Referenced by:

NtListenPort
NtReplyWaitReceivePort