Функция CreatePipe
Анонимный канал создается функцией CreatePipe, имеющей следующий прототип:
BOOL CreatePipe(
PHANDLE hReadPipe, // адрес переменной, в которую будет
// записан идентификатор канала для
// чтения данных
PHANDLE hWritePipe, // адрес переменной, в которую будет
// записан идентификатор канала для
// записи данных
LPSECURITY_ATTRIBUTES lpPipeAttributes, // адрес переменной
// для атрибутов защиты
DWORD nSize); // количество байт памяти,
// зарезервированной для канала
Канал может использоваться как для записи в него данных, так и для чтения. Поэтому при создании канала функция CreatePipe возвращает два идентификатора, записывая их по адресу, заданному в параметрах hReadPipe и hWritePipe.
Идентификатор, записанный по адресу hReadPipe, можно передавать в качестве параметра функции ReadFile или ReadFileEx для выполнения операции чтения. Идентификатор, записанный по адресу hWritePipe, передается функции WriteFile или WriteFileEx для выполнения операции записи.
Через параметр lpPipeAttributes передается адрес переменной, содержащей атрибуты защиты для создаваемого канала. В наших приложениях мы будем указывать этот параметр как NULL. В результате канал будет иметь атрибуты защиты, принятые по умолчанию.
И, наконец, параметр nSize определяет размер буфера для создаваемого канала. Если этот размер указан как нуль, будет создан буфер с размером, принятым по умолчанию. Заметим, что при необходимости система может изменить указанный вами размер буфера.
В случае успеха функция CreatePipe возвращает значение TRUE, при ошибке - FALSE. В последнем случае для уточнения причины возникновения ошибки вы можете воспользоваться функцией GetLastError.