Функция CallNamedPipeA (winbase.h)
Подключается к каналу типа сообщения (и ожидает, если экземпляр канала недоступен), записывает в канал и считывает его, а затем закрывает канал.
Синтаксис
BOOL CallNamedPipeA(
[in] LPCSTR lpNamedPipeName,
[in] LPVOID lpInBuffer,
[in] DWORD nInBufferSize,
[out] LPVOID lpOutBuffer,
[in] DWORD nOutBufferSize,
[out] LPDWORD lpBytesRead,
[in] DWORD nTimeOut
);
Параметры
[in] lpNamedPipeName
Имя канала.
[in] lpInBuffer
Данные, записываемые в канал.
[in] nInBufferSize
Размер буфера записи в байтах.
[out] lpOutBuffer
Указатель на буфер, который получает данные, считываемые из канала.
[in] nOutBufferSize
Размер буфера чтения в байтах.
[out] lpBytesRead
Указатель на переменную, получающую число байтов, считанных из канала.
[in] nTimeOut
Количество миллисекундах, ожидающего доступности именованного канала. В дополнение к числовым значениям можно указать следующие специальные значения.
Значение | Значение |
---|---|
|
Не ожидает именованного канала. Если именованный канал недоступен, функция возвращает ошибку. |
|
Ожидает неограниченное время. |
|
Использует время ожидания по умолчанию, указанное в вызове функции CreateNamedPipe . |
Возвращаемое значение
Если функция выполняется успешно, возвращается ненулевое значение.
Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
Если сообщение, записанное в канал серверным процессом, длиннее nOutBufferSize, CallNamedPipe возвращает значение FALSE, а GetLastError возвращает ERROR_MORE_DATA. Оставшаяся часть сообщения отклоняется, так как CallNamedPipe закрывает дескриптор в канале перед возвратом.
Комментарии
Вызов CallNamedPipe эквивалентен вызову функций CreateFile (или WaitNamedPipe, если CreateFile не удается открыть канал немедленно), TransactNamedPipe и CloseHandle . CreateFile вызывается с флагом доступа GENERIC_READ | GENERIC_WRITE и флаг дескриптора наследуется со значением FALSE.
CallNamedPipe завершается ошибкой , если канал является каналом байтового типа.
Windows 10 версии 1709: каналы поддерживаются только в контейнере приложений, т. е. от одного процесса UWP к другому процессу UWP, который является частью того же приложения. Кроме того, именованные каналы должны использовать синтаксис \\.\pipe\LOCAL\
для имени канала.
Примеры
Пример см. в разделе Транзакции по именованным каналам.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Профессиональная [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows 2000 Server [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | winbase.h (включая Windows.h) |
Библиотека | Kernel32.lib |
DLL | Kernel32.dll |