]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/winapi/pipes.hpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / boost / winapi / pipes.hpp
1 /*
2 * Copyright 2016 Klemens D. Morgenstern
3 * Copyright 2016, 2017 Andrey Semashev
4 *
5 * Distributed under the Boost Software License, Version 1.0.
6 * See http://www.boost.org/LICENSE_1_0.txt
7 */
8
9 #ifndef BOOST_WINAPI_PIPES_HPP_INCLUDED_
10 #define BOOST_WINAPI_PIPES_HPP_INCLUDED_
11
12 #include <boost/winapi/basic_types.hpp>
13 #include <boost/winapi/config.hpp>
14 #include <boost/winapi/overlapped.hpp>
15
16 #ifdef BOOST_HAS_PRAGMA_ONCE
17 #pragma once
18 #endif
19
20 #if BOOST_WINAPI_PARTITION_DESKTOP_SYSTEM
21
22 #include <boost/winapi/detail/header.hpp>
23
24 #if !defined( BOOST_USE_WINDOWS_H ) && BOOST_WINAPI_PARTITION_DESKTOP && !defined( BOOST_NO_ANSI_APIS )
25 extern "C" {
26 BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC CreateNamedPipeA(
27 boost::winapi::LPCSTR_ lpName,
28 boost::winapi::DWORD_ dwOpenMode,
29 boost::winapi::DWORD_ dwPipeMode,
30 boost::winapi::DWORD_ nMaxInstances,
31 boost::winapi::DWORD_ nOutBufferSize,
32 boost::winapi::DWORD_ nInBufferSize,
33 boost::winapi::DWORD_ nDefaultTimeOut,
34 _SECURITY_ATTRIBUTES *lpSecurityAttributes);
35 } // extern "C"
36 #endif // !defined( BOOST_USE_WINDOWS_H ) && BOOST_WINAPI_PARTITION_DESKTOP && !defined( BOOST_NO_ANSI_APIS )
37
38 #if !defined( BOOST_USE_WINDOWS_H )
39 extern "C" {
40
41 BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC ImpersonateNamedPipeClient(
42 boost::winapi::HANDLE_ hNamedPipe);
43
44 BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC CreatePipe(
45 boost::winapi::PHANDLE_ hReadPipe,
46 boost::winapi::PHANDLE_ hWritePipe,
47 _SECURITY_ATTRIBUTES* lpPipeAttributes,
48 boost::winapi::DWORD_ nSize);
49
50 BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC ConnectNamedPipe(
51 boost::winapi::HANDLE_ hNamedPipe,
52 _OVERLAPPED* lpOverlapped);
53
54 BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC DisconnectNamedPipe(
55 boost::winapi::HANDLE_ hNamedPipe);
56
57 BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC SetNamedPipeHandleState(
58 boost::winapi::HANDLE_ hNamedPipe,
59 boost::winapi::LPDWORD_ lpMode,
60 boost::winapi::LPDWORD_ lpMaxCollectionCount,
61 boost::winapi::LPDWORD_ lpCollectDataTimeout);
62
63 BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC PeekNamedPipe(
64 boost::winapi::HANDLE_ hNamedPipe,
65 boost::winapi::LPVOID_ lpBuffer,
66 boost::winapi::DWORD_ nBufferSize,
67 boost::winapi::LPDWORD_ lpBytesRead,
68 boost::winapi::LPDWORD_ lpTotalBytesAvail,
69 boost::winapi::LPDWORD_ lpBytesLeftThisMessage);
70
71 BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC TransactNamedPipe(
72 boost::winapi::HANDLE_ hNamedPipe,
73 boost::winapi::LPVOID_ lpInBuffer,
74 boost::winapi::DWORD_ nInBufferSize,
75 boost::winapi::LPVOID_ lpOutBuffer,
76 boost::winapi::DWORD_ nOutBufferSize,
77 boost::winapi::LPDWORD_ lpBytesRead,
78 _OVERLAPPED* lpOverlapped);
79
80 #if !defined( BOOST_NO_ANSI_APIS )
81 BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC WaitNamedPipeA(
82 boost::winapi::LPCSTR_ lpNamedPipeName,
83 boost::winapi::DWORD_ nTimeOut);
84 #endif // !defined( BOOST_NO_ANSI_APIS )
85
86 BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC CreateNamedPipeW(
87 boost::winapi::LPCWSTR_ lpName,
88 boost::winapi::DWORD_ dwOpenMode,
89 boost::winapi::DWORD_ dwPipeMode,
90 boost::winapi::DWORD_ nMaxInstances,
91 boost::winapi::DWORD_ nOutBufferSize,
92 boost::winapi::DWORD_ nInBufferSize,
93 boost::winapi::DWORD_ nDefaultTimeOut,
94 _SECURITY_ATTRIBUTES* lpSecurityAttributes);
95
96 BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC WaitNamedPipeW(
97 boost::winapi::LPCWSTR_ lpNamedPipeName,
98 boost::winapi::DWORD_ nTimeOut);
99
100 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
101 #if !defined( BOOST_NO_ANSI_APIS )
102 BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC GetNamedPipeClientComputerNameA(
103 boost::winapi::HANDLE_ Pipe,
104 boost::winapi::LPSTR_ ClientComputerName,
105 boost::winapi::ULONG_ ClientComputerNameLength);
106 #endif // !defined( BOOST_NO_ANSI_APIS )
107
108 BOOST_WINAPI_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC GetNamedPipeClientComputerNameW(
109 boost::winapi::HANDLE_ Pipe,
110 boost::winapi::LPWSTR_ ClientComputerName,
111 boost::winapi::ULONG_ ClientComputerNameLength);
112 #endif
113
114 } // extern "C"
115 #endif // !defined( BOOST_USE_WINDOWS_H )
116
117 namespace boost {
118 namespace winapi {
119
120 #if defined( BOOST_USE_WINDOWS_H )
121
122 BOOST_CONSTEXPR_OR_CONST DWORD_ PIPE_ACCESS_DUPLEX_ = PIPE_ACCESS_DUPLEX;
123 BOOST_CONSTEXPR_OR_CONST DWORD_ PIPE_ACCESS_INBOUND_ = PIPE_ACCESS_INBOUND;
124 BOOST_CONSTEXPR_OR_CONST DWORD_ PIPE_ACCESS_OUTBOUND_ = PIPE_ACCESS_OUTBOUND;
125
126 BOOST_CONSTEXPR_OR_CONST DWORD_ PIPE_TYPE_BYTE_ = PIPE_TYPE_BYTE;
127 BOOST_CONSTEXPR_OR_CONST DWORD_ PIPE_TYPE_MESSAGE_ = PIPE_TYPE_MESSAGE;
128
129 BOOST_CONSTEXPR_OR_CONST DWORD_ PIPE_READMODE_BYTE_ = PIPE_READMODE_BYTE;
130 BOOST_CONSTEXPR_OR_CONST DWORD_ PIPE_READMODE_MESSAGE_ = PIPE_READMODE_MESSAGE;
131
132 BOOST_CONSTEXPR_OR_CONST DWORD_ PIPE_WAIT_ = PIPE_WAIT;
133 BOOST_CONSTEXPR_OR_CONST DWORD_ PIPE_NOWAIT_ = PIPE_NOWAIT;
134
135 BOOST_CONSTEXPR_OR_CONST DWORD_ PIPE_UNLIMITED_INSTANCES_ = PIPE_UNLIMITED_INSTANCES;
136
137 BOOST_CONSTEXPR_OR_CONST DWORD_ NMPWAIT_USE_DEFAULT_WAIT_ = NMPWAIT_USE_DEFAULT_WAIT;
138 BOOST_CONSTEXPR_OR_CONST DWORD_ NMPWAIT_NOWAIT_ = NMPWAIT_NOWAIT;
139 BOOST_CONSTEXPR_OR_CONST DWORD_ NMPWAIT_WAIT_FOREVER_ = NMPWAIT_WAIT_FOREVER;
140
141 #else // defined( BOOST_USE_WINDOWS_H )
142
143 BOOST_CONSTEXPR_OR_CONST DWORD_ PIPE_ACCESS_DUPLEX_ = 0x00000003;
144 BOOST_CONSTEXPR_OR_CONST DWORD_ PIPE_ACCESS_INBOUND_ = 0x00000001;
145 BOOST_CONSTEXPR_OR_CONST DWORD_ PIPE_ACCESS_OUTBOUND_ = 0x00000002;
146
147 BOOST_CONSTEXPR_OR_CONST DWORD_ PIPE_TYPE_BYTE_ = 0x00000000;
148 BOOST_CONSTEXPR_OR_CONST DWORD_ PIPE_TYPE_MESSAGE_ = 0x00000004;
149
150 BOOST_CONSTEXPR_OR_CONST DWORD_ PIPE_READMODE_BYTE_ = 0x00000000;
151 BOOST_CONSTEXPR_OR_CONST DWORD_ PIPE_READMODE_MESSAGE_ = 0x00000002;
152
153 BOOST_CONSTEXPR_OR_CONST DWORD_ PIPE_WAIT_ = 0x00000000;
154 BOOST_CONSTEXPR_OR_CONST DWORD_ PIPE_NOWAIT_ = 0x00000001;
155
156 BOOST_CONSTEXPR_OR_CONST DWORD_ PIPE_UNLIMITED_INSTANCES_ = 255u;
157
158 BOOST_CONSTEXPR_OR_CONST DWORD_ NMPWAIT_USE_DEFAULT_WAIT_ = 0x00000000;
159 BOOST_CONSTEXPR_OR_CONST DWORD_ NMPWAIT_NOWAIT_ = 0x00000001;
160 BOOST_CONSTEXPR_OR_CONST DWORD_ NMPWAIT_WAIT_FOREVER_ = 0xFFFFFFFF;
161
162 #endif // defined( BOOST_USE_WINDOWS_H )
163
164 // These constants are not defined in Windows SDK prior to 7.0A
165 BOOST_CONSTEXPR_OR_CONST DWORD_ PIPE_ACCEPT_REMOTE_CLIENTS_ = 0x00000000;
166 BOOST_CONSTEXPR_OR_CONST DWORD_ PIPE_REJECT_REMOTE_CLIENTS_ = 0x00000008;
167
168 using ::ImpersonateNamedPipeClient;
169 using ::DisconnectNamedPipe;
170 using ::SetNamedPipeHandleState;
171 using ::PeekNamedPipe;
172
173 #if !defined( BOOST_NO_ANSI_APIS )
174 using ::WaitNamedPipeA;
175 #endif
176 using ::WaitNamedPipeW;
177
178 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
179 #if !defined( BOOST_NO_ANSI_APIS )
180 using ::GetNamedPipeClientComputerNameA;
181 #endif // !defined( BOOST_NO_ANSI_APIS )
182 using ::GetNamedPipeClientComputerNameW;
183 #endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
184
185 BOOST_FORCEINLINE BOOL_ CreatePipe(PHANDLE_ hReadPipe, PHANDLE_ hWritePipe, LPSECURITY_ATTRIBUTES_ lpPipeAttributes, DWORD_ nSize)
186 {
187 return ::CreatePipe(hReadPipe, hWritePipe, reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpPipeAttributes), nSize);
188 }
189
190 BOOST_FORCEINLINE BOOL_ ConnectNamedPipe(HANDLE_ hNamedPipe, LPOVERLAPPED_ lpOverlapped)
191 {
192 return ::ConnectNamedPipe(hNamedPipe, reinterpret_cast< ::_OVERLAPPED* >(lpOverlapped));
193 }
194
195 BOOST_FORCEINLINE BOOL_ TransactNamedPipe(HANDLE_ hNamedPipe, LPVOID_ lpInBuffer, DWORD_ nInBufferSize, LPVOID_ lpOutBuffer, DWORD_ nOutBufferSize, LPDWORD_ lpBytesRead, LPOVERLAPPED_ lpOverlapped)
196 {
197 return ::TransactNamedPipe(hNamedPipe, lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesRead, reinterpret_cast< ::_OVERLAPPED* >(lpOverlapped));
198 }
199
200
201 #if BOOST_WINAPI_PARTITION_DESKTOP && !defined( BOOST_NO_ANSI_APIS )
202 BOOST_FORCEINLINE HANDLE_ CreateNamedPipeA(
203 LPCSTR_ lpName,
204 DWORD_ dwOpenMode,
205 DWORD_ dwPipeMode,
206 DWORD_ nMaxInstances,
207 DWORD_ nOutBufferSize,
208 DWORD_ nInBufferSize,
209 DWORD_ nDefaultTimeOut,
210 LPSECURITY_ATTRIBUTES_ lpSecurityAttributes)
211 {
212 return ::CreateNamedPipeA(
213 lpName,
214 dwOpenMode,
215 dwPipeMode,
216 nMaxInstances,
217 nOutBufferSize,
218 nInBufferSize,
219 nDefaultTimeOut,
220 reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes));
221 }
222
223 BOOST_FORCEINLINE HANDLE_ create_named_pipe(
224 LPCSTR_ lpName,
225 DWORD_ dwOpenMode,
226 DWORD_ dwPipeMode,
227 DWORD_ nMaxInstances,
228 DWORD_ nOutBufferSize,
229 DWORD_ nInBufferSize,
230 DWORD_ nDefaultTimeOut,
231 LPSECURITY_ATTRIBUTES_ lpSecurityAttributes)
232 {
233 return ::CreateNamedPipeA(
234 lpName,
235 dwOpenMode,
236 dwPipeMode,
237 nMaxInstances,
238 nOutBufferSize,
239 nInBufferSize,
240 nDefaultTimeOut,
241 reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes));
242 }
243 #endif // BOOST_WINAPI_PARTITION_DESKTOP && !defined( BOOST_NO_ANSI_APIS )
244
245 BOOST_FORCEINLINE HANDLE_ CreateNamedPipeW(
246 LPCWSTR_ lpName,
247 DWORD_ dwOpenMode,
248 DWORD_ dwPipeMode,
249 DWORD_ nMaxInstances,
250 DWORD_ nOutBufferSize,
251 DWORD_ nInBufferSize,
252 DWORD_ nDefaultTimeOut,
253 LPSECURITY_ATTRIBUTES_ lpSecurityAttributes)
254 {
255 return ::CreateNamedPipeW(
256 lpName,
257 dwOpenMode,
258 dwPipeMode,
259 nMaxInstances,
260 nOutBufferSize,
261 nInBufferSize,
262 nDefaultTimeOut,
263 reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes));
264 }
265
266 BOOST_FORCEINLINE HANDLE_ create_named_pipe(
267 LPCWSTR_ lpName,
268 DWORD_ dwOpenMode,
269 DWORD_ dwPipeMode,
270 DWORD_ nMaxInstances,
271 DWORD_ nOutBufferSize,
272 DWORD_ nInBufferSize,
273 DWORD_ nDefaultTimeOut,
274 LPSECURITY_ATTRIBUTES_ lpSecurityAttributes)
275 {
276 return ::CreateNamedPipeW(
277 lpName,
278 dwOpenMode,
279 dwPipeMode,
280 nMaxInstances,
281 nOutBufferSize,
282 nInBufferSize,
283 nDefaultTimeOut,
284 reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpSecurityAttributes));
285 }
286
287 #if !defined( BOOST_NO_ANSI_APIS )
288 BOOST_FORCEINLINE BOOL_ wait_named_pipe(LPCSTR_ lpNamedPipeName, DWORD_ nTimeOut)
289 {
290 return ::WaitNamedPipeA(lpNamedPipeName, nTimeOut);
291 }
292 #endif //BOOST_NO_ANSI_APIS
293
294 BOOST_FORCEINLINE BOOL_ wait_named_pipe(LPCWSTR_ lpNamedPipeName, DWORD_ nTimeOut)
295 {
296 return ::WaitNamedPipeW(lpNamedPipeName, nTimeOut);
297 }
298
299 #if BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
300
301 #if !defined( BOOST_NO_ANSI_APIS )
302 BOOST_FORCEINLINE BOOL_ get_named_pipe_client_computer_name(HANDLE_ Pipe, LPSTR_ ClientComputerName, ULONG_ ClientComputerNameLength)
303 {
304 return ::GetNamedPipeClientComputerNameA(Pipe, ClientComputerName, ClientComputerNameLength);
305 }
306 #endif // !defined( BOOST_NO_ANSI_APIS )
307
308 BOOST_FORCEINLINE BOOL_ get_named_pipe_client_computer_name(HANDLE_ Pipe, LPWSTR_ ClientComputerName, ULONG_ ClientComputerNameLength)
309 {
310 return ::GetNamedPipeClientComputerNameW(Pipe, ClientComputerName, ClientComputerNameLength);
311 }
312
313 #endif // BOOST_USE_WINAPI_VERSION >= BOOST_WINAPI_VERSION_WIN6
314
315 }
316 }
317
318 #include <boost/winapi/detail/footer.hpp>
319
320 #endif // BOOST_WINAPI_PARTITION_DESKTOP_SYSTEM
321
322 #endif // BOOST_WINAPI_PIPES_HPP_INCLUDED_