NtReplyPort

NTSTATUS __stdcall NtReplyPort(HANDLE PortHandle, PPORT_MESSAGE LpcReply){
  _ETHREAD *CurrentThread; 
  NTSTATUS v5; 
  INT64 v6; 
  _ALPC_DISPATCH_CONTEXT result; 
  PVOID Object; 
  memset((INT64)&result, 0i64);
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  Object = 0i64;
  v5 = ObReferenceObjectByHandle(
         PortHandle,
         1u,
         AlpcPortObjectType,
         *((_BYTE *)KeGetCurrentThread() + 562),
         &Object,
         0i64);
  if( v5 >= 0 )
  {
    result.Flags = 0;
    result.PortObject = (_ALPC_PORT *)Object;
    if( (*((_DWORD *)Object + 104) & 0x2000) != 0 )
    {
      LOBYTE(v6) = *((_BYTE *)KeGetCurrentThread() + 562);
      v5 = AlpcpReplyLegacySynchronousRequest(&result, LpcReply, v6);
    }
    else
    {
      result.Flags = 65537;
      v5 = AlpcpSendMessage(&result, LpcReply, 0i64, *((_BYTE *)KeGetCurrentThread() + 562));
      if( v5 == -1073740029 )
        v5 = -1073741769;
    }
    HalPutDmaAdapter((PADAPTER_OBJECT)Object);
  }
  KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
  return v5;
}

Referenced by:

No references.