/// <summary>
        /// Overridden ProcessRecord method.
        /// </summary>
        protected override void ProcessRecord()
        {
            if (Objects == null || Objects.Length == 0)
            {
                throw new ArgumentException("Must specify at least one object to wait on.");
            }

            NtWaitTimeout timeout = null;

            if (Infinite)
            {
                timeout = NtWaitTimeout.Infinite;
            }
            else
            {
                long total_timeout = MilliSeconds + ((((Hours * 60L) + Minutes) * 60L) + Seconds) * 1000L;
                if (total_timeout < 0)
                {
                    throw new ArgumentException("Total timeout can't be negative.");
                }

                timeout = NtWaitTimeout.FromMilliseconds(total_timeout);
            }

            if (Objects.Length == 1)
            {
                WriteObject(Objects[0].Wait(Alertable, timeout));
            }
            else
            {
                WriteObject(NtWait.Wait(Objects, Alertable, WaitAll, timeout));
            }
        }
        /// <summary>
        /// Process record.
        /// </summary>
        protected override void ProcessRecord()
        {
            NtWaitTimeout timeout = TimeoutMs.HasValue
                ? NtWaitTimeout.FromMilliseconds(TimeoutMs.Value) : NtWaitTimeout.Infinite;

            var msg = Port.Receive(Flags, ReceiveLength, ReceiveAttributes, timeout);

            WriteObject(msg);
        }
        private AlpcMessage Send(AlpcMessage msg)
        {
            NtWaitTimeout timeout = TimeoutMs.HasValue
                ? NtWaitTimeout.FromMilliseconds(TimeoutMs.Value) : NtWaitTimeout.Infinite;
            var recv_message = CreateReceiveMessage();

            Port.SendReceive(Flags, msg, SendAttributes, recv_message, recv_message != null ? ReceiveAttributes : null, timeout);
            return(recv_message);
        }
        /// <summary>
        /// Get the NtWaitTimeout object.
        /// </summary>
        /// <returns>The NtWaitTime object.</returns>
        protected NtWaitTimeout GetTimeout()
        {
            if (Infinite)
            {
                return NtWaitTimeout.Infinite;
            }

            long total_timeout = MilliSeconds + ((((Hours * 60L) + Minutes) * 60L) + Seconds) * 1000L;
            if (total_timeout < 0)
            {
                throw new ArgumentException("Total timeout can't be negative.");
            }

            return NtWaitTimeout.FromMilliseconds(total_timeout);
        }
 /// <summary>
 /// Method to create an object from a set of object attributes.
 /// </summary>
 /// <param name="obj_attributes">The object attributes to create/open from.</param>
 /// <returns>The newly created object.</returns>
 protected override object CreateObject(ObjectAttributes obj_attributes)
 {
     return(NtFile.CreateNamedPipe(obj_attributes, Access, ShareMode, Options, FileDisposition.Open, NamedPipeType.Bytestream,
                                   NamedPipeReadMode.ByteStream, NamedPipeCompletionMode.CompleteOperation, 0, 0, 0, NtWaitTimeout.FromMilliseconds(0)));
 }
 private static NtResult <NtFile> OpenFile(string name, FileAccessRights desired_access, bool open_server)
 {
     using (ObjectAttributes obja = new ObjectAttributes(NamedPipeBasePath + name,
                                                         AttributeFlags.CaseInsensitive, null))
     {
         if (open_server)
         {
             return(NtFile.CreateNamedPipe(obja, desired_access | FileAccessRights.Synchronize,
                                           FileShareMode.Read | FileShareMode.Write, FileOpenOptions.SynchronousIoNonAlert,
                                           FileDisposition.Open, NamedPipeType.Bytestream, NamedPipeReadMode.ByteStream,
                                           NamedPipeCompletionMode.CompleteOperation, 0, 0, 0, NtWaitTimeout.FromMilliseconds(0), false).Cast <NtFile>());
         }
         else
         {
             return(NtFile.Open(obja, desired_access,
                                FileShareMode.Read | FileShareMode.Write, FileOpenOptions.None, false));
         }
     }
 }
 /// <summary>
 /// Method to create an object from a set of object attributes.
 /// </summary>
 /// <param name="obj_attributes">The object attributes to create/open from.</param>
 /// <returns>The newly created object.</returns>
 protected override object CreateObject(ObjectAttributes obj_attributes)
 {
     return(NtFile.CreateNamedPipe(obj_attributes, Access, ShareMode, Options, Disposition, PipeType,
                                   ReadMode, CompletionMode, UnlimitedInstances ? -1 : MaximumInstances, InputQuota, OutputQuota, NtWaitTimeout.FromMilliseconds(DefaultTimeoutMs)));
 }