summaryrefslogtreecommitdiff
path: root/boost/winapi/pipes.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/winapi/pipes.hpp')
-rw-r--r--boost/winapi/pipes.hpp318
1 files changed, 318 insertions, 0 deletions
diff --git a/boost/winapi/pipes.hpp b/boost/winapi/pipes.hpp
new file mode 100644
index 0000000000..63e31274e3
--- /dev/null
+++ b/boost/winapi/pipes.hpp
@@ -0,0 +1,318 @@
+/*
+ * Copyright 2016 Klemens D. Morgenstern
+ * Copyright 2016, 2017 Andrey Semashev
+ *
+ * Distributed under the Boost Software License, Version 1.0.
+ * See http://www.boost.org/LICENSE_1_0.txt
+ */
+
+#ifndef BOOST_WINAPI_PIPES_HPP_INCLUDED_
+#define BOOST_WINAPI_PIPES_HPP_INCLUDED_
+
+#include <boost/winapi/basic_types.hpp>
+#include <boost/winapi/config.hpp>
+#include <boost/winapi/overlapped.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#if BOOST_WINAPI_PARTITION_DESKTOP_SYSTEM
+
+#if !defined( BOOST_USE_WINDOWS_H ) && BOOST_WINAPI_PARTITION_DESKTOP && !defined( BOOST_NO_ANSI_APIS )
+extern "C" {
+BOOST_SYMBOL_IMPORT boost::winapi::HANDLE_ WINAPI CreateNamedPipeA(
+ boost::winapi::LPCSTR_ lpName,
+ boost::winapi::DWORD_ dwOpenMode,
+ boost::winapi::DWORD_ dwPipeMode,
+ boost::winapi::DWORD_ nMaxInstances,
+ boost::winapi::DWORD_ nOutBufferSize,
+ boost::winapi::DWORD_ nInBufferSize,
+ boost::winapi::DWORD_ nDefaultTimeOut,
+ _SECURITY_ATTRIBUTES *lpSecurityAttributes);
+} // extern "C"
+#endif // !defined( BOOST_USE_WINDOWS_H ) && BOOST_WINAPI_PARTITION_DESKTOP && !defined( BOOST_NO_ANSI_APIS )
+
+#if !defined( BOOST_USE_WINDOWS_H )
+extern "C" {
+
+BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI ImpersonateNamedPipeClient(
+ boost::winapi::HANDLE_ hNamedPipe);
+
+BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI CreatePipe(
+ boost::winapi::PHANDLE_ hReadPipe,
+ boost::winapi::PHANDLE_ hWritePipe,
+ _SECURITY_ATTRIBUTES* lpPipeAttributes,
+ boost::winapi::DWORD_ nSize);
+
+BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI ConnectNamedPipe(
+ boost::winapi::HANDLE_ hNamedPipe,
+ _OVERLAPPED* lpOverlapped);
+
+BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI DisconnectNamedPipe(
+ boost::winapi::HANDLE_ hNamedPipe);
+
+BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI SetNamedPipeHandleState(
+ boost::winapi::HANDLE_ hNamedPipe,
+ boost::winapi::LPDWORD_ lpMode,
+ boost::winapi::LPDWORD_ lpMaxCollectionCount,
+ boost::winapi::LPDWORD_ lpCollectDataTimeout);
+
+BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI PeekNamedPipe(
+ boost::winapi::HANDLE_ hNamedPipe,
+ boost::winapi::LPVOID_ lpBuffer,
+ boost::winapi::DWORD_ nBufferSize,
+ boost::winapi::LPDWORD_ lpBytesRead,
+ boost::winapi::LPDWORD_ lpTotalBytesAvail,
+ boost::winapi::LPDWORD_ lpBytesLeftThisMessage);
+
+BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI TransactNamedPipe(
+ boost::winapi::HANDLE_ hNamedPipe,
+ boost::winapi::LPVOID_ lpInBuffer,
+ boost::winapi::DWORD_ nInBufferSize,
+ boost::winapi::LPVOID_ lpOutBuffer,
+ boost::winapi::DWORD_ nOutBufferSize,
+ boost::winapi::LPDWORD_ lpBytesRead,
+ _OVERLAPPED* lpOverlapped);
+
+#if !defined( BOOST_NO_ANSI_APIS )
+BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI WaitNamedPipeA(
+ boost::winapi::LPCSTR_ lpNamedPipeName,
+ boost::winapi::DWORD_ nTimeOut);
+#endif // !defined( BOOST_NO_ANSI_APIS )
+
+BOOST_SYMBOL_IMPORT boost::winapi::HANDLE_ WINAPI CreateNamedPipeW(
+ boost::winapi::LPCWSTR_ lpName,
+ boost::winapi::DWORD_ dwOpenMode,
+ boost::winapi::DWORD_ dwPipeMode,
+ boost::winapi::DWORD_ nMaxInstances,
+ boost::winapi::DWORD_ nOutBufferSize,
+ boost::winapi::DWORD_ nInBufferSize,
+ boost::winapi::DWORD_ nDefaultTimeOut,
+ _SECURITY_ATTRIBUTES* lpSecurityAttributes);
+
+BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI WaitNamedPipeW(
+ boost::winapi::LPCWSTR_ lpNamedPipeName,
+ boost::winapi::DWORD_ nTimeOut);
+
+#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+#if !defined( BOOST_NO_ANSI_APIS )
+BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI GetNamedPipeClientComputerNameA(
+ boost::winapi::HANDLE_ Pipe,
+ boost::winapi::LPSTR_ ClientComputerName,
+ boost::winapi::ULONG_ ClientComputerNameLength);
+#endif // !defined( BOOST_NO_ANSI_APIS )
+
+BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI GetNamedPipeClientComputerNameW(
+ boost::winapi::HANDLE_ Pipe,
+ boost::winapi::LPWSTR_ ClientComputerName,
+ boost::winapi::ULONG_ ClientComputerNameLength);
+#endif
+
+} // extern "C"
+#endif // !defined( BOOST_USE_WINDOWS_H )
+
+namespace boost {
+namespace winapi {
+
+#if defined( BOOST_USE_WINDOWS_H )
+
+const DWORD_ PIPE_ACCESS_DUPLEX_ = PIPE_ACCESS_DUPLEX;
+const DWORD_ PIPE_ACCESS_INBOUND_ = PIPE_ACCESS_INBOUND;
+const DWORD_ PIPE_ACCESS_OUTBOUND_ = PIPE_ACCESS_OUTBOUND;
+
+const DWORD_ PIPE_TYPE_BYTE_ = PIPE_TYPE_BYTE;
+const DWORD_ PIPE_TYPE_MESSAGE_ = PIPE_TYPE_MESSAGE;
+
+const DWORD_ PIPE_READMODE_BYTE_ = PIPE_READMODE_BYTE;
+const DWORD_ PIPE_READMODE_MESSAGE_ = PIPE_READMODE_MESSAGE;
+
+const DWORD_ PIPE_WAIT_ = PIPE_WAIT;
+const DWORD_ PIPE_NOWAIT_ = PIPE_NOWAIT;
+
+const DWORD_ PIPE_UNLIMITED_INSTANCES_ = PIPE_UNLIMITED_INSTANCES;
+
+const DWORD_ NMPWAIT_USE_DEFAULT_WAIT_ = NMPWAIT_USE_DEFAULT_WAIT;
+const DWORD_ NMPWAIT_NOWAIT_ = NMPWAIT_NOWAIT;
+const DWORD_ NMPWAIT_WAIT_FOREVER_ = NMPWAIT_WAIT_FOREVER;
+
+#else // defined( BOOST_USE_WINDOWS_H )
+
+const DWORD_ PIPE_ACCESS_DUPLEX_ = 0x00000003;
+const DWORD_ PIPE_ACCESS_INBOUND_ = 0x00000001;
+const DWORD_ PIPE_ACCESS_OUTBOUND_ = 0x00000002;
+
+const DWORD_ PIPE_TYPE_BYTE_ = 0x00000000;
+const DWORD_ PIPE_TYPE_MESSAGE_ = 0x00000004;
+
+const DWORD_ PIPE_READMODE_BYTE_ = 0x00000000;
+const DWORD_ PIPE_READMODE_MESSAGE_ = 0x00000002;
+
+const DWORD_ PIPE_WAIT_ = 0x00000000;
+const DWORD_ PIPE_NOWAIT_ = 0x00000001;
+
+const DWORD_ PIPE_UNLIMITED_INSTANCES_ = 255u;
+
+const DWORD_ NMPWAIT_USE_DEFAULT_WAIT_ = 0x00000000;
+const DWORD_ NMPWAIT_NOWAIT_ = 0x00000001;
+const DWORD_ NMPWAIT_WAIT_FOREVER_ = 0xFFFFFFFF;
+
+#endif // defined( BOOST_USE_WINDOWS_H )
+
+// These constants are not defined in Windows SDK prior to 7.0A
+const DWORD_ PIPE_ACCEPT_REMOTE_CLIENTS_ = 0x00000000;
+const DWORD_ PIPE_REJECT_REMOTE_CLIENTS_ = 0x00000008;
+
+using ::ImpersonateNamedPipeClient;
+using ::DisconnectNamedPipe;
+using ::SetNamedPipeHandleState;
+using ::PeekNamedPipe;
+
+#if !defined( BOOST_NO_ANSI_APIS )
+using ::WaitNamedPipeA;
+#endif
+using ::WaitNamedPipeW;
+
+#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+#if !defined( BOOST_NO_ANSI_APIS )
+using ::GetNamedPipeClientComputerNameA;
+#endif // !defined( BOOST_NO_ANSI_APIS )
+using ::GetNamedPipeClientComputerNameW;
+#endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+
+BOOST_FORCEINLINE BOOL_ CreatePipe(PHANDLE_ hReadPipe, PHANDLE_ hWritePipe, LPSECURITY_ATTRIBUTES_ lpPipeAttributes, DWORD_ nSize)
+{
+ return ::CreatePipe(hReadPipe, hWritePipe, reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpPipeAttributes), nSize);
+}
+
+BOOST_FORCEINLINE BOOL_ ConnectNamedPipe(HANDLE_ hNamedPipe, LPOVERLAPPED_ lpOverlapped)
+{
+ return ::ConnectNamedPipe(hNamedPipe, reinterpret_cast< ::_OVERLAPPED* >(lpOverlapped));
+}
+
+BOOST_FORCEINLINE BOOL_ TransactNamedPipe(HANDLE_ hNamedPipe, LPVOID_ lpInBuffer, DWORD_ nInBufferSize, LPVOID_ lpOutBuffer, DWORD_ nOutBufferSize, LPDWORD_ lpBytesRead, LPOVERLAPPED_ lpOverlapped)
+{
+ return ::TransactNamedPipe(hNamedPipe, lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesRead, reinterpret_cast< ::_OVERLAPPED* >(lpOverlapped));
+}
+
+
+#if BOOST_WINAPI_PARTITION_DESKTOP && !defined( BOOST_NO_ANSI_APIS )
+BOOST_FORCEINLINE HANDLE_ CreateNamedPipeA(
+ LPCSTR_ lpName,
+ DWORD_ dwOpenMode,
+ DWORD_ dwPipeMode,
+ DWORD_ nMaxInstances,
+ DWORD_ nOutBufferSize,
+ DWORD_ nInBufferSize,
+ DWORD_ nDefaultTimeOut,
+ LPSECURITY_ATTRIBUTES_ lpSecurityAttributes)
+{
+ return ::CreateNamedPipeA(
+ lpName,
+ dwOpenMode,
+ dwPipeMode,
+ nMaxInstances,
+ nOutBufferSize,
+ nInBufferSize,
+ nDefaultTimeOut,
+ reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes));
+}
+
+BOOST_FORCEINLINE HANDLE_ create_named_pipe(
+ LPCSTR_ lpName,
+ DWORD_ dwOpenMode,
+ DWORD_ dwPipeMode,
+ DWORD_ nMaxInstances,
+ DWORD_ nOutBufferSize,
+ DWORD_ nInBufferSize,
+ DWORD_ nDefaultTimeOut,
+ LPSECURITY_ATTRIBUTES_ lpSecurityAttributes)
+{
+ return ::CreateNamedPipeA(
+ lpName,
+ dwOpenMode,
+ dwPipeMode,
+ nMaxInstances,
+ nOutBufferSize,
+ nInBufferSize,
+ nDefaultTimeOut,
+ reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes));
+}
+#endif // BOOST_WINAPI_PARTITION_DESKTOP && !defined( BOOST_NO_ANSI_APIS )
+
+BOOST_FORCEINLINE HANDLE_ CreateNamedPipeW(
+ LPCWSTR_ lpName,
+ DWORD_ dwOpenMode,
+ DWORD_ dwPipeMode,
+ DWORD_ nMaxInstances,
+ DWORD_ nOutBufferSize,
+ DWORD_ nInBufferSize,
+ DWORD_ nDefaultTimeOut,
+ LPSECURITY_ATTRIBUTES_ lpSecurityAttributes)
+{
+ return ::CreateNamedPipeW(
+ lpName,
+ dwOpenMode,
+ dwPipeMode,
+ nMaxInstances,
+ nOutBufferSize,
+ nInBufferSize,
+ nDefaultTimeOut,
+ reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes));
+}
+
+BOOST_FORCEINLINE HANDLE_ create_named_pipe(
+ LPCWSTR_ lpName,
+ DWORD_ dwOpenMode,
+ DWORD_ dwPipeMode,
+ DWORD_ nMaxInstances,
+ DWORD_ nOutBufferSize,
+ DWORD_ nInBufferSize,
+ DWORD_ nDefaultTimeOut,
+ LPSECURITY_ATTRIBUTES_ lpSecurityAttributes)
+{
+ return ::CreateNamedPipeW(
+ lpName,
+ dwOpenMode,
+ dwPipeMode,
+ nMaxInstances,
+ nOutBufferSize,
+ nInBufferSize,
+ nDefaultTimeOut,
+ reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes));
+}
+
+#if !defined( BOOST_NO_ANSI_APIS )
+BOOST_FORCEINLINE BOOL_ wait_named_pipe(LPCSTR_ lpNamedPipeName, DWORD_ nTimeOut)
+{
+ return ::WaitNamedPipeA(lpNamedPipeName, nTimeOut);
+}
+#endif //BOOST_NO_ANSI_APIS
+
+BOOST_FORCEINLINE BOOL_ wait_named_pipe(LPCWSTR_ lpNamedPipeName, DWORD_ nTimeOut)
+{
+ return ::WaitNamedPipeW(lpNamedPipeName, nTimeOut);
+}
+
+#if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+
+#if !defined( BOOST_NO_ANSI_APIS )
+BOOST_FORCEINLINE BOOL_ get_named_pipe_client_computer_name(HANDLE_ Pipe, LPSTR_ ClientComputerName, ULONG_ ClientComputerNameLength)
+{
+ return ::GetNamedPipeClientComputerNameA(Pipe, ClientComputerName, ClientComputerNameLength);
+}
+#endif // !defined( BOOST_NO_ANSI_APIS )
+
+BOOST_FORCEINLINE BOOL_ get_named_pipe_client_computer_name(HANDLE_ Pipe, LPWSTR_ ClientComputerName, ULONG_ ClientComputerNameLength)
+{
+ return ::GetNamedPipeClientComputerNameW(Pipe, ClientComputerName, ClientComputerNameLength);
+}
+
+#endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
+
+}
+}
+
+#endif // BOOST_WINAPI_PARTITION_DESKTOP_SYSTEM
+
+#endif // BOOST_WINAPI_PIPES_HPP_INCLUDED_