CreateNamedPipe

CreateNamedPipe-функция создает экземпляр именованного канала и возвращает дескриптор следующим операциям канала. Именованный канал серверного процесса использует эту функцию либо для создания первого экземпляра специфического именованного канала, либо для установки основных атрибутов, или создания новых экземпляров имеющихся именованных каналов.

HANDLE CreateNamedPipe( LPCTSTR lpName,// Указатель на имя канала DWORD dwOpenMode, // канал открывает режимDWORD dwPipeMode,// pipe-specific режимыDWORD nMaxInstances,// максимальное число запросовDWORD nOutBufferSize,// выводимый размер буфера, в байтахDWORD nInBufferSize,// вводимый размер буфера, в байтахDWORD nDefaultTimeOut,// time-out время, в миллисекундахLPSECURITY_ATTRIBUTES lpSecurityAttributes //указатель на атрибуты безопасности); Параметры:

lpName – указатель на строку с завершающим нулем, который однозначно идентифицирует канал. Строка должна иметь следующую форму:

\.pipepipename

часть имени pipename может включать любой другой символ после backslash, включая числа и специальные символы. Сплошная строка имени канала не должна превышать 256 символов.

dwOpenMode – описатель режима доступа канала, режим с наложением, режим сквозной записи (одновременное занесение данных в КЭШ и ОЗУ) и безопасность режима доступа дескриптора канала.

 

CreateNamedPipeвозвращает ошибку, если dwOpenMode-описатель – любой-другой из флагов, не приведенных в ниже перечисленном списке.

Этот параметр должен включать один из ниже перечисленных флагов режимов доступа канала. Эти же режимы должны быть определены для каждого экземпляра канала:

Режим Описание
PIPE_ACCESS_DUPLEX Канал двунаправленный; оба – серверные и клиентские процессы – могут читать с канала и записывать в него. Этот режим дает серверу эквивалент GENERIC_READ | GENERIC_WRITE доступа к каналу. Клиент может включать GENERIC_READ или GENERIC_WRITE, или оба, когда он соединяется с каналом, использующим CreateFile функцию.
PIPE_ACCESS_INBOUND Поток данных в канале идет только от клиента к серверу. Этот режим дает серверу эквивалент GENERIC_READ доступа к каналу. Клиент должен включать GENERIC_WRITE доступ, когда присоединяется к каналу.
PIPE_ACCESS_OUTBOUND Поток данных в канале идет только от сервера к клиенту. Этот режим дает серверу эквивалент GENERIC_WRITE доступа к каналу. Клиент должен включать GENERIC_ READ доступ, когда присоединяется к каналу.

Этот параметр может еще включать или оба флага (FILE_FLAG_WRITE_THROUGH и FILE_FLAG_OVERLAPPED), с доступным write-through режимом, или режим OVERLAPPED.

dwPipeMode – специфицирует тип, чтение и ожидание режимов дескриптора канала.

Один из ниже перечисленных флагов может быть задан. Если вы укажете 0, то параметр по умолчанию – режим типа байт.

 

 

Режим Описание
PIPE_TYPE_BYTE Данные записываются в канал как поток байтов. Этот режим не может быть использован с PIPE_READMODE_MESSAGE.
PIPE_TYPE_MESSAGE Данные записываются в канал как поток сообщений Этот режим может быть использован либо с PIPE_READMODE_MESSAGE, либо PIPE_READMODE_BYTE.

 

 

Режим Описание
PIPE_READMODE_BYTE Данные считываются с канала как поток байтов Этот режим может использоваться либо с PIPE_TYPE_MESSAGE, либо PIPE_TYPE_BYTE.
PIPE_READMODE_MESSAGE Данные считываются с канала как поток сообщений. Этот режим может использоваться, если задан и PIPE_TYPE_MESSAGE.

 

Один из ниже перечисленных флагов ожидания может быть указан. Если вы укажите 0, то параметр по умолчанию блокирует режим.

Режим Описание
PIPE_WAIT Объединение записей в блок доступно.Когда дескриптор канала указан в ReadFile, WriteFile, или ConnectNamedPipe функции, операции не будут выполнены, пока там считывание данных, все данные записаны или клиент присоединен. Использование этого режима означает неограниченное ожидание в течение выполнения действий клиентским процессом.
PIPE_NOWAIT неблокируемый режим доступен (позволяющий выполнять следующую операцию даже в случае невозможности полного завершения предшествующей). В этом режиме ReadFile, WriteFile, и ConnectNamedPipe всегда возвращаются немедленно.

 

nMaxInstances – заданное максимальное число экземпляров, которые могут быть созданы для этого канала. Это же число должно быть задано для всех экземпляров. Если этот параметр - PIPE_UNLIMITED_INSTANCES (количество экземпляров канала), то создание может быть ограниченным только наличием системных ресурсов.

nOutBufferSize – спецификатор количества байтов в резерв для выводимого буфера.

nInBufferSize – спецификатор количества байтов в резерв для вводимого буфера.

nDefaultTimeOut – спецификатор значения time-out по умолчанию, в миллисекундах, если в WaitNamedPipe-функции спецификатор NMPWAIT_USE_DEFAULT_WAIT. Каждый экземпляр именованного канала должен определять это же значение.

lpSecurityAttributes – указатель на SECURITY_ATTRIBUTES структуру, которая специфицирует дескриптор экземпляра нового именованного канала. Если lpSecurityAttributes – NULL, именованный канал получает дескриптор экземпляра безопасности по умолчанию, и он не может наследоваться.

Возвращаемые значения:

Если функция успешна, возвращаемое значение – дескриптор экземпляра именованного канала серверной части.

Если функция неудачна, возвращаемое значение – INVALID_HANDLE_VALUE. Для получения более детальной информации, вызовите GetLastError. Возвращаемое значение ­– ERROR_INVALID_PARAMETER, если nMaxInstances ­– больше, чем PIPE_UNLIMITED_INSTANCES.