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