AnonymousPipeServerStream AnonymousPipeServerStream AnonymousPipeServerStream AnonymousPipeServerStream Class

Definition

Exposes a stream around an anonymous pipe, which supports both synchronous and asynchronous read and write operations.

public ref class AnonymousPipeServerStream sealed : System::IO::Pipes::PipeStream
public sealed class AnonymousPipeServerStream : System.IO.Pipes.PipeStream
type AnonymousPipeServerStream = class
    inherit PipeStream
Public NotInheritable Class AnonymousPipeServerStream
Inherits PipeStream
Inheritance

Examples

The following example demonstrates a way to send a string from a parent process to a child process using anonymous pipes. This example creates an AnonymousPipeServerStream object in a parent process with a PipeDirection value of Out. It also creates an AnonymousPipeClientStream object in a child process with a PipeDirection value of In. The parent process then sends a user-supplied string to the child process. The string is displayed to the console.

This example is for the server process, which uses the AnonymousPipeServerStream class. For the entire code example, including the code for both the pipe client and server, see How to: Use Anonymous Pipes for Local Interprocess Communication.

#using <System.dll>
#using <System.Core.dll>

using namespace System;
using namespace System::IO;
using namespace System::IO::Pipes;
using namespace System::Diagnostics;

ref class PipeServer
{
public:
    static void Main()
    {
        Process^ pipeClient = gcnew Process();

        pipeClient->StartInfo->FileName = "pipeClient.exe";

        AnonymousPipeServerStream^ pipeServer =
            gcnew AnonymousPipeServerStream(PipeDirection::Out,
            HandleInheritability::Inheritable);
        // Show that anonymous pipes do not support Message mode.
        try
        {
            Console::WriteLine("[SERVER] Setting ReadMode to \"Message\".");
            pipeServer->ReadMode = PipeTransmissionMode::Message;
        }
        catch (NotSupportedException^ e)
        {
            Console::WriteLine("[SERVER] Exception:\n    {0}", e->Message);
        }

        Console::WriteLine("[SERVER] Current TransmissionMode: {0}.",
            pipeServer->TransmissionMode);

        // Pass the client process a handle to the server.
        pipeClient->StartInfo->Arguments =
            pipeServer->GetClientHandleAsString();
        pipeClient->StartInfo->UseShellExecute = false;
        pipeClient->Start();

        pipeServer->DisposeLocalCopyOfClientHandle();

        try
        {
            // Read user input and send that to the client process.
            StreamWriter^ sw = gcnew StreamWriter(pipeServer);

            sw->AutoFlush = true;
            // Send a 'sync message' and wait for client to receive it.
            sw->WriteLine("SYNC");
            pipeServer->WaitForPipeDrain();
            // Send the console input to the client process.
            Console::Write("[SERVER] Enter text: ");
            sw->WriteLine(Console::ReadLine());
            sw->Close();
        }
        // Catch the IOException that is raised if the pipe is broken
        // or disconnected.
        catch (IOException^ e)
        {
            Console::WriteLine("[SERVER] Error: {0}", e->Message);
        }
        pipeServer->Close();
        pipeClient->WaitForExit();
        pipeClient->Close();
        Console::WriteLine("[SERVER] Client quit. Server terminating.");
    }
};

int main()
{
    PipeServer::Main();
}
using System;
using System.IO;
using System.IO.Pipes;
using System.Diagnostics;

class PipeServer
{
    static void Main()
    {
        Process pipeClient = new Process();

        pipeClient.StartInfo.FileName = "pipeClient.exe";

        using (AnonymousPipeServerStream pipeServer =
            new AnonymousPipeServerStream(PipeDirection.Out,
            HandleInheritability.Inheritable))
        {
            // Show that anonymous pipes do not support Message mode.
            try
            {
                Console.WriteLine("[SERVER] Setting ReadMode to \"Message\".");
                pipeServer.ReadMode = PipeTransmissionMode.Message;
            }
            catch (NotSupportedException e)
            {
                Console.WriteLine("[SERVER] Exception:\n    {0}", e.Message);
            }

            Console.WriteLine("[SERVER] Current TransmissionMode: {0}.",
                pipeServer.TransmissionMode);

            // Pass the client process a handle to the server.
            pipeClient.StartInfo.Arguments =
                pipeServer.GetClientHandleAsString();
            pipeClient.StartInfo.UseShellExecute = false;
            pipeClient.Start();

            pipeServer.DisposeLocalCopyOfClientHandle();

            try
            {
                // Read user input and send that to the client process.
                using (StreamWriter sw = new StreamWriter(pipeServer))
                {
                    sw.AutoFlush = true;
                    // Send a 'sync message' and wait for client to receive it.
                    sw.WriteLine("SYNC");
                    pipeServer.WaitForPipeDrain();
                    // Send the console input to the client process.
                    Console.Write("[SERVER] Enter text: ");
                    sw.WriteLine(Console.ReadLine());
                }
            }
            // Catch the IOException that is raised if the pipe is broken
            // or disconnected.
            catch (IOException e)
            {
                Console.WriteLine("[SERVER] Error: {0}", e.Message);
            }
        }

        pipeClient.WaitForExit();
        pipeClient.Close();
        Console.WriteLine("[SERVER] Client quit. Server terminating.");
    }
}
Imports System
Imports System.IO
Imports System.IO.Pipes
Imports System.Diagnostics

Class PipeServer
    Shared Sub Main()
        Dim pipeClient As New Process()

        pipeClient.StartInfo.FileName = "pipeClient.exe"

        Using pipeServer As New AnonymousPipeServerStream(PipeDirection.Out, _
            HandleInheritability.Inheritable)

            ' Show that anonymous pipes do not support Message mode.
            Try
                Console.WriteLine("[SERVER] Setting ReadMode to ""Message"".")
                pipeServer.ReadMode = PipeTransmissionMode.Message
            Catch e As NotSupportedException
                Console.WriteLine("[SERVER] Exception:\n    {0}", e.Message)
            End Try

            Console.WriteLine("[SERVER] Current TransmissionMode: {0}.",
                pipeServer.TransmissionMode)

            ' Pass the client process a handle to the server.
            pipeClient.StartInfo.Arguments = pipeServer.GetClientHandleAsString()
            pipeClient.StartInfo.UseShellExecute = false
            pipeClient.Start()

            pipeServer.DisposeLocalCopyOfClientHandle()

            Try
                ' Read user input and send that to the client process.
                Using sw As New StreamWriter(pipeServer)
                    sw.AutoFlush = true
                    ' Send a 'sync message' and wait for client to receive it.
                    sw.WriteLine("SYNC")
                    pipeServer.WaitForPipeDrain()
                    ' Send the console input to the client process.
                    Console.Write("[SERVER] Enter text: ")
                    sw.WriteLine(Console.ReadLine())
                End Using
            Catch e As IOException
                ' Catch the IOException that is raised if the pipe is broken
                ' or disconnected.
                Console.WriteLine("[SERVER] Error: {0}", e.Message)
            End Try
        End Using

        pipeClient.WaitForExit()
        pipeClient.Close()
        Console.WriteLine("[SERVER] Client quit. Server terminating.")
    End Sub
End Class

Remarks

Anonymous pipes help provide safe and secure interprocess communication between child and parent processes. The AnonymousPipeServerStream class enables a parent process to send or receive information from a child process.

Anonymous pipes are unnamed, one-way pipes that typically transfer data between parent and child processes. Anonymous pipes are always local; they cannot be used over a network. A PipeDirection value of InOut is not supported because anonymous pipes are defined to be one-way.

Anonymous pipes do not support Message read modes.

The client side of an anonymous pipe must be created from a pipe handle provided by the server side by calling the GetClientHandleAsString method. The string is then passed as a parameter when creating the client process. From the client process, it is then passed to the AnonymousPipeClientStream constructor as the pipeHandleAsString parameter.

The AnonymousPipeServerStream object must dispose the client handle using the DisposeLocalCopyOfClientHandle method in order to be notified when the client exits.

Note

For Windows XP Professional and Windows 2000 Server, a maximum of 10 pipes can simultaneously connect over the network.

Constructors

AnonymousPipeServerStream() AnonymousPipeServerStream() AnonymousPipeServerStream() AnonymousPipeServerStream()

Initializes a new instance of the AnonymousPipeServerStream class.

AnonymousPipeServerStream(PipeDirection) AnonymousPipeServerStream(PipeDirection) AnonymousPipeServerStream(PipeDirection) AnonymousPipeServerStream(PipeDirection)

Initializes a new instance of the AnonymousPipeServerStream class with the specified pipe direction.

AnonymousPipeServerStream(PipeDirection, HandleInheritability) AnonymousPipeServerStream(PipeDirection, HandleInheritability) AnonymousPipeServerStream(PipeDirection, HandleInheritability) AnonymousPipeServerStream(PipeDirection, HandleInheritability)

Initializes a new instance of the AnonymousPipeServerStream class with the specified pipe direction and inheritability mode.

AnonymousPipeServerStream(PipeDirection, HandleInheritability, Int32) AnonymousPipeServerStream(PipeDirection, HandleInheritability, Int32) AnonymousPipeServerStream(PipeDirection, HandleInheritability, Int32) AnonymousPipeServerStream(PipeDirection, HandleInheritability, Int32)

Initializes a new instance of the AnonymousPipeServerStream class with the specified pipe direction, inheritability mode, and buffer size.

AnonymousPipeServerStream(PipeDirection, HandleInheritability, Int32, PipeSecurity) AnonymousPipeServerStream(PipeDirection, HandleInheritability, Int32, PipeSecurity) AnonymousPipeServerStream(PipeDirection, HandleInheritability, Int32, PipeSecurity) AnonymousPipeServerStream(PipeDirection, HandleInheritability, Int32, PipeSecurity)

Initializes a new instance of the AnonymousPipeServerStream class with the specified pipe direction, inheritability mode, buffer size, and pipe security.

AnonymousPipeServerStream(PipeDirection, SafePipeHandle, SafePipeHandle) AnonymousPipeServerStream(PipeDirection, SafePipeHandle, SafePipeHandle) AnonymousPipeServerStream(PipeDirection, SafePipeHandle, SafePipeHandle) AnonymousPipeServerStream(PipeDirection, SafePipeHandle, SafePipeHandle)

Initializes a new instance of the AnonymousPipeServerStream class from the specified pipe handles.

Properties

CanRead CanRead CanRead CanRead

Gets a value indicating whether the current stream supports read operations.

(Inherited from PipeStream)
CanSeek CanSeek CanSeek CanSeek

Gets a value indicating whether the current stream supports seek operations.

(Inherited from PipeStream)
CanTimeout CanTimeout CanTimeout CanTimeout

Gets a value that determines whether the current stream can time out.

(Inherited from Stream)
CanWrite CanWrite CanWrite CanWrite

Gets a value indicating whether the current stream supports write operations.

(Inherited from PipeStream)
ClientSafePipeHandle ClientSafePipeHandle ClientSafePipeHandle ClientSafePipeHandle

Gets the safe handle for the AnonymousPipeClientStream object that is currently connected to the AnonymousPipeServerStream object.

InBufferSize InBufferSize InBufferSize InBufferSize

Gets the size, in bytes, of the inbound buffer for a pipe.

(Inherited from PipeStream)
IsAsync IsAsync IsAsync IsAsync

Gets a value indicating whether a PipeStream object was opened asynchronously or synchronously.

(Inherited from PipeStream)
IsConnected IsConnected IsConnected IsConnected

Gets or sets a value indicating whether a PipeStream object is connected.

(Inherited from PipeStream)
IsHandleExposed IsHandleExposed IsHandleExposed IsHandleExposed

Gets a value indicating whether a handle to a PipeStream object is exposed.

(Inherited from PipeStream)
IsMessageComplete IsMessageComplete IsMessageComplete IsMessageComplete

Gets a value indicating whether there is more data in the message returned from the most recent read operation.

(Inherited from PipeStream)
Length Length Length Length

Gets the length of a stream, in bytes.

(Inherited from PipeStream)
OutBufferSize OutBufferSize OutBufferSize OutBufferSize

Gets the size, in bytes, of the outbound buffer for a pipe.

(Inherited from PipeStream)
Position Position Position Position

Gets or sets the current position of the current stream.

(Inherited from PipeStream)
ReadMode ReadMode ReadMode ReadMode

Sets the reading mode for the AnonymousPipeServerStream object. For anonymous pipes, transmission mode must be Byte.

ReadTimeout ReadTimeout ReadTimeout ReadTimeout

Gets or sets a value, in miliseconds, that determines how long the stream will attempt to read before timing out.

(Inherited from Stream)
SafePipeHandle SafePipeHandle SafePipeHandle SafePipeHandle

Gets the safe handle for the local end of the pipe that the current PipeStream object encapsulates.

(Inherited from PipeStream)
TransmissionMode TransmissionMode TransmissionMode TransmissionMode

Gets the pipe transmission mode that is supported by the current pipe.

WriteTimeout WriteTimeout WriteTimeout WriteTimeout

Gets or sets a value, in miliseconds, that determines how long the stream will attempt to write before timing out.

(Inherited from Stream)

Methods

BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

Begins an asynchronous read operation.

(Inherited from PipeStream)
BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object) BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

Begins an asynchronous write operation.

(Inherited from PipeStream)
CheckPipePropertyOperations() CheckPipePropertyOperations() CheckPipePropertyOperations() CheckPipePropertyOperations()

Verifies that the pipe is in a proper state for getting or setting properties.

(Inherited from PipeStream)
CheckReadOperations() CheckReadOperations() CheckReadOperations() CheckReadOperations()

Verifies that the pipe is in a connected state for read operations.

(Inherited from PipeStream)
CheckWriteOperations() CheckWriteOperations() CheckWriteOperations() CheckWriteOperations()

Verifies that the pipe is in a connected state for write operations.

(Inherited from PipeStream)
Close() Close() Close() Close()

Closes the current stream and releases any resources (such as sockets and file handles) associated with the current stream. Instead of calling this method, ensure that the stream is properly disposed.

(Inherited from Stream)
CopyTo(Stream) CopyTo(Stream) CopyTo(Stream) CopyTo(Stream)

Reads the bytes from the current stream and writes them to another stream.

(Inherited from Stream)
CopyTo(Stream, Int32) CopyTo(Stream, Int32) CopyTo(Stream, Int32) CopyTo(Stream, Int32)

Reads the bytes from the current stream and writes them to another stream, using a specified buffer size.

(Inherited from Stream)
CopyToAsync(Stream) CopyToAsync(Stream) CopyToAsync(Stream) CopyToAsync(Stream)

Asynchronously reads the bytes from the current stream and writes them to another stream.

(Inherited from Stream)
CopyToAsync(Stream, CancellationToken) CopyToAsync(Stream, CancellationToken) CopyToAsync(Stream, CancellationToken) CopyToAsync(Stream, CancellationToken) Inherited from Stream
CopyToAsync(Stream, Int32) CopyToAsync(Stream, Int32) CopyToAsync(Stream, Int32) CopyToAsync(Stream, Int32)

Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size.

(Inherited from Stream)
CopyToAsync(Stream, Int32, CancellationToken) CopyToAsync(Stream, Int32, CancellationToken) CopyToAsync(Stream, Int32, CancellationToken) CopyToAsync(Stream, Int32, CancellationToken)

Asynchronously reads the bytes from the current stream and writes them to another stream, using a specified buffer size and cancellation token.

(Inherited from Stream)
CreateObjRef(Type) CreateObjRef(Type) CreateObjRef(Type) CreateObjRef(Type)

Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.

(Inherited from MarshalByRefObject)
CreateWaitHandle() CreateWaitHandle() CreateWaitHandle() CreateWaitHandle()

Allocates a WaitHandle object.

(Inherited from Stream)
Dispose() Dispose() Dispose() Dispose()

Releases all resources used by the Stream.

(Inherited from Stream)
Dispose(Boolean) Dispose(Boolean) Dispose(Boolean) Dispose(Boolean)

Releases the unmanaged resources used by the PipeStream class and optionally releases the managed resources.

(Inherited from PipeStream)
DisposeLocalCopyOfClientHandle() DisposeLocalCopyOfClientHandle() DisposeLocalCopyOfClientHandle() DisposeLocalCopyOfClientHandle()

Closes the local copy of the AnonymousPipeClientStream object's handle.

EndRead(IAsyncResult) EndRead(IAsyncResult) EndRead(IAsyncResult) EndRead(IAsyncResult)

Ends a pending asynchronous read request.

(Inherited from PipeStream)
EndWrite(IAsyncResult) EndWrite(IAsyncResult) EndWrite(IAsyncResult) EndWrite(IAsyncResult)

Ends a pending asynchronous write request.

(Inherited from PipeStream)
Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Determines whether the specified object is equal to the current object.

(Inherited from Object)
Finalize() Finalize() Finalize() Finalize()

Releases unmanaged resources and performs other cleanup operations before the AnonymousPipeServerStream instance is reclaimed by garbage collection.

Flush() Flush() Flush() Flush()

Clears the buffer for the current stream and causes any buffered data to be written to the underlying device.

(Inherited from PipeStream)
FlushAsync() FlushAsync() FlushAsync() FlushAsync()

Asynchronously clears all buffers for this stream and causes any buffered data to be written to the underlying device.

(Inherited from Stream)
FlushAsync(CancellationToken) FlushAsync(CancellationToken) FlushAsync(CancellationToken) FlushAsync(CancellationToken)

Asynchronously clears all buffers for this stream, causes any buffered data to be written to the underlying device, and monitors cancellation requests.

(Inherited from Stream)
GetAccessControl() GetAccessControl() GetAccessControl() GetAccessControl()

Gets a PipeSecurity object that encapsulates the access control list (ACL) entries for the pipe described by the current PipeStream object.

(Inherited from PipeStream)
GetClientHandleAsString() GetClientHandleAsString() GetClientHandleAsString() GetClientHandleAsString()

Gets the connected AnonymousPipeClientStream object's handle as a string.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Serves as the default hash function.

(Inherited from Object)
GetLifetimeService() GetLifetimeService() GetLifetimeService() GetLifetimeService()

Retrieves the current lifetime service object that controls the lifetime policy for this instance.

(Inherited from MarshalByRefObject)
GetType() GetType() GetType() GetType()

Gets the Type of the current instance.

(Inherited from Object)
InitializeHandle(SafePipeHandle, Boolean, Boolean) InitializeHandle(SafePipeHandle, Boolean, Boolean) InitializeHandle(SafePipeHandle, Boolean, Boolean) InitializeHandle(SafePipeHandle, Boolean, Boolean)

Initializes a PipeStream object from the specified SafePipeHandle object.

(Inherited from PipeStream)
InitializeLifetimeService() InitializeLifetimeService() InitializeLifetimeService() InitializeLifetimeService()

Obtains a lifetime service object to control the lifetime policy for this instance.

(Inherited from MarshalByRefObject)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Creates a shallow copy of the current Object.

(Inherited from Object)
MemberwiseClone(Boolean) MemberwiseClone(Boolean) MemberwiseClone(Boolean) MemberwiseClone(Boolean)

Creates a shallow copy of the current MarshalByRefObject object.

(Inherited from MarshalByRefObject)
ObjectInvariant() ObjectInvariant() ObjectInvariant() ObjectInvariant()

Provides support for a Contract.

(Inherited from Stream)
Read(Byte[], Int32, Int32) Read(Byte[], Int32, Int32) Read(Byte[], Int32, Int32) Read(Byte[], Int32, Int32)

Reads a block of bytes from a stream and writes the data to a specified buffer.

(Inherited from PipeStream)
Read(Span<Byte>) Read(Span<Byte>) Read(Span<Byte>) Read(Span<Byte>) Inherited from Stream
ReadAsync(Byte[], Int32, Int32) ReadAsync(Byte[], Int32, Int32) ReadAsync(Byte[], Int32, Int32) ReadAsync(Byte[], Int32, Int32)

Asynchronously reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read.

(Inherited from Stream)
ReadAsync(Byte[], Int32, Int32, CancellationToken) ReadAsync(Byte[], Int32, Int32, CancellationToken) ReadAsync(Byte[], Int32, Int32, CancellationToken) ReadAsync(Byte[], Int32, Int32, CancellationToken) Inherited from PipeStream
ReadAsync(Memory<Byte>, CancellationToken) ReadAsync(Memory<Byte>, CancellationToken) ReadAsync(Memory<Byte>, CancellationToken) ReadAsync(Memory<Byte>, CancellationToken) Inherited from Stream
ReadByte() ReadByte() ReadByte() ReadByte()

Reads a byte from a pipe.

(Inherited from PipeStream)
Seek(Int64, SeekOrigin) Seek(Int64, SeekOrigin) Seek(Int64, SeekOrigin) Seek(Int64, SeekOrigin)

Sets the current position of the current stream to the specified value.

(Inherited from PipeStream)
SetAccessControl(PipeSecurity) SetAccessControl(PipeSecurity) SetAccessControl(PipeSecurity) SetAccessControl(PipeSecurity)

Applies the access control list (ACL) entries specified by a PipeSecurity object to the pipe specified by the current PipeStream object.

(Inherited from PipeStream)
SetLength(Int64) SetLength(Int64) SetLength(Int64) SetLength(Int64)

Sets the length of the current stream to the specified value.

(Inherited from PipeStream)
ToString() ToString() ToString() ToString()

Returns a string that represents the current object.

(Inherited from Object)
WaitForPipeDrain() WaitForPipeDrain() WaitForPipeDrain() WaitForPipeDrain()

Waits for the other end of the pipe to read all sent bytes.

(Inherited from PipeStream)
Write(Byte[], Int32, Int32) Write(Byte[], Int32, Int32) Write(Byte[], Int32, Int32) Write(Byte[], Int32, Int32)

Writes a block of bytes to the current stream using data from a buffer.

(Inherited from PipeStream)
Write(ReadOnlySpan<Byte>) Write(ReadOnlySpan<Byte>) Write(ReadOnlySpan<Byte>) Write(ReadOnlySpan<Byte>) Inherited from Stream
WriteAsync(Byte[], Int32, Int32) WriteAsync(Byte[], Int32, Int32) WriteAsync(Byte[], Int32, Int32) WriteAsync(Byte[], Int32, Int32)

Asynchronously writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written.

(Inherited from Stream)
WriteAsync(Byte[], Int32, Int32, CancellationToken) WriteAsync(Byte[], Int32, Int32, CancellationToken) WriteAsync(Byte[], Int32, Int32, CancellationToken) WriteAsync(Byte[], Int32, Int32, CancellationToken) Inherited from PipeStream
WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) WriteAsync(ReadOnlyMemory<Byte>, CancellationToken) Inherited from Stream
WriteByte(Byte) WriteByte(Byte) WriteByte(Byte) WriteByte(Byte)

Writes a byte to the current stream.

(Inherited from PipeStream)

Explicit Interface Implementations

IDisposable.Dispose() IDisposable.Dispose() IDisposable.Dispose() IDisposable.Dispose() Inherited from Stream

Extension Methods

GetAccessControl(PipeStream) GetAccessControl(PipeStream) GetAccessControl(PipeStream) GetAccessControl(PipeStream)
SetAccessControl(PipeStream, PipeSecurity) SetAccessControl(PipeStream, PipeSecurity) SetAccessControl(PipeStream, PipeSecurity) SetAccessControl(PipeStream, PipeSecurity)

Applies to