Windows API Reference

Kernel-User Base Services

Pipes

Pipes are a unidirectional data stream mechanism used for inter-process communication (IPC). They allow one process to write data and another process to read it.

Types of Pipes

Windows supports two main types of pipes:

  • Anonymous Pipes: Typically used for parent-child process communication. They are created by a single process and have two ends: a read handle and a write handle.
  • Named Pipes: Provide a more robust IPC mechanism, allowing communication between unrelated processes on the same computer or across a network. They have a well-defined name that clients use to connect to a server instance.

Key Concepts

  • Handles: Pipes are accessed via handles, which are integer identifiers returned by pipe creation functions.
  • Unidirectional: Data flows in only one direction. For bidirectional communication, two pipes are typically used.
  • Buffering: Pipes are buffered, meaning data written to the pipe is stored in a buffer until it's read.
  • Blocking Behavior: Read and write operations can block if the pipe is empty (for reads) or full (for writes), depending on the pipe's configuration.

Core Pipe Functions

The following functions are fundamental to working with pipes in Windows:

CreatePipe

Creates an anonymous pipe and returns handles to the read and write ends.

CreateNamedPipe

Creates a named pipe server and returns a handle to the pipe instance.

ConnectNamedPipe

Waits for a client process to connect to a named pipe server.

CreateFile (for Named Pipes)

Used by client processes to open a handle to a named pipe.

ReadFile

Reads data from a pipe's read handle.

WriteFile

Writes data to a pipe's write handle.

CloseHandle

Closes a pipe handle when it's no longer needed.

PeekNamedPipe

Retrieves information about the data in a named pipe without removing it.

Advanced Features and Considerations

  • Pipe Modes: Named pipes can operate in message-read or byte-read mode, affecting how data is consumed.
  • Asynchronous Operations: Pipes can be used with asynchronous I/O operations (using OVERLAPPED structures) for non-blocking performance.
  • Security Attributes: When creating named pipes, you can specify security attributes to control access permissions.
  • Client/Server Model: Named pipes are commonly used in a client-server architecture, where a server process creates the pipe and listens for connections, while client processes connect to it to send or receive data.