/// <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))); }