]>
Commit | Line | Data |
---|---|---|
b32b8144 FG |
1 | /* |
2 | * Copyright 2010 Vicente J. Botet Escriba | |
3 | * Copyright 2015 Andrey Semashev | |
4 | * Copyright 2016 Jorge Lodos | |
5 | * Copyright 2017 James E. King, III | |
6 | * | |
7 | * Distributed under the Boost Software License, Version 1.0. | |
8 | * See http://www.boost.org/LICENSE_1_0.txt | |
9 | */ | |
7c673cae | 10 | |
b32b8144 FG |
11 | #ifndef BOOST_WINAPI_FILE_MAPPING_HPP_INCLUDED_ |
12 | #define BOOST_WINAPI_FILE_MAPPING_HPP_INCLUDED_ | |
7c673cae | 13 | |
b32b8144 | 14 | #include <boost/winapi/basic_types.hpp> |
20effc67 | 15 | #include <boost/winapi/detail/header.hpp> |
7c673cae FG |
16 | |
17 | #ifdef BOOST_HAS_PRAGMA_ONCE | |
18 | #pragma once | |
19 | #endif | |
20 | ||
b32b8144 FG |
21 | /* |
22 | * UWP: | |
23 | * API SDK 8 SDK 10 | |
24 | * CreateFileMapping DESKTOP - DESKTOP | SYSTEM | |
25 | * FlushViewOfFile APP - APP | SYSTEM | |
26 | * MapViewOfFile DESKTOP - DESKTOP | SYSTEM | |
27 | * MapViewOfFileEx DESKTOP - DESKTOP | SYSTEM | |
28 | * OpenFileMapping DESKTOP - DESKTOP | SYSTEM | |
29 | * UnmapViewOfFile APP - APP | SYSTEM | |
30 | */ | |
31 | ||
7c673cae FG |
32 | #if !defined( BOOST_USE_WINDOWS_H ) |
33 | extern "C" { | |
b32b8144 FG |
34 | |
35 | #if BOOST_WINAPI_PARTITION_DESKTOP | |
7c673cae | 36 | #if !defined( BOOST_NO_ANSI_APIS ) |
20effc67 | 37 | BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC |
7c673cae | 38 | CreateFileMappingA( |
b32b8144 | 39 | boost::winapi::HANDLE_ hFile, |
7c673cae | 40 | ::_SECURITY_ATTRIBUTES* lpFileMappingAttributes, |
b32b8144 FG |
41 | boost::winapi::DWORD_ flProtect, |
42 | boost::winapi::DWORD_ dwMaximumSizeHigh, | |
43 | boost::winapi::DWORD_ dwMaximumSizeLow, | |
44 | boost::winapi::LPCSTR_ lpName); | |
7c673cae | 45 | |
20effc67 | 46 | BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC |
7c673cae | 47 | OpenFileMappingA( |
b32b8144 FG |
48 | boost::winapi::DWORD_ dwDesiredAccess, |
49 | boost::winapi::BOOL_ bInheritHandle, | |
50 | boost::winapi::LPCSTR_ lpName); | |
51 | #endif // !defined( BOOST_NO_ANSI_APIS ) | |
52 | #endif // BOOST_WINAPI_PARTITION_DESKTOP | |
53 | ||
54 | #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM | |
20effc67 | 55 | BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC |
7c673cae | 56 | CreateFileMappingW( |
b32b8144 | 57 | boost::winapi::HANDLE_ hFile, |
7c673cae | 58 | ::_SECURITY_ATTRIBUTES* lpFileMappingAttributes, |
b32b8144 FG |
59 | boost::winapi::DWORD_ flProtect, |
60 | boost::winapi::DWORD_ dwMaximumSizeHigh, | |
61 | boost::winapi::DWORD_ dwMaximumSizeLow, | |
62 | boost::winapi::LPCWSTR_ lpName); | |
7c673cae | 63 | |
20effc67 | 64 | BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::LPVOID_ BOOST_WINAPI_WINAPI_CC |
7c673cae | 65 | MapViewOfFile( |
b32b8144 FG |
66 | boost::winapi::HANDLE_ hFileMappingObject, |
67 | boost::winapi::DWORD_ dwDesiredAccess, | |
68 | boost::winapi::DWORD_ dwFileOffsetHigh, | |
69 | boost::winapi::DWORD_ dwFileOffsetLow, | |
70 | boost::winapi::SIZE_T_ dwNumberOfBytesToMap); | |
7c673cae | 71 | |
20effc67 | 72 | BOOST_WINAPI_IMPORT boost::winapi::LPVOID_ BOOST_WINAPI_WINAPI_CC |
7c673cae | 73 | MapViewOfFileEx( |
b32b8144 FG |
74 | boost::winapi::HANDLE_ hFileMappingObject, |
75 | boost::winapi::DWORD_ dwDesiredAccess, | |
76 | boost::winapi::DWORD_ dwFileOffsetHigh, | |
77 | boost::winapi::DWORD_ dwFileOffsetLow, | |
78 | boost::winapi::SIZE_T_ dwNumberOfBytesToMap, | |
79 | boost::winapi::LPVOID_ lpBaseAddress); | |
80 | ||
20effc67 | 81 | BOOST_WINAPI_IMPORT boost::winapi::HANDLE_ BOOST_WINAPI_WINAPI_CC |
b32b8144 FG |
82 | OpenFileMappingW( |
83 | boost::winapi::DWORD_ dwDesiredAccess, | |
84 | boost::winapi::BOOL_ bInheritHandle, | |
85 | boost::winapi::LPCWSTR_ lpName); | |
86 | #endif // BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM | |
87 | ||
88 | #if BOOST_WINAPI_PARTITION_APP || BOOST_WINAPI_PARTITION_SYSTEM | |
20effc67 | 89 | BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC |
7c673cae | 90 | FlushViewOfFile( |
b32b8144 FG |
91 | boost::winapi::LPCVOID_ lpBaseAddress, |
92 | boost::winapi::SIZE_T_ dwNumberOfBytesToFlush); | |
7c673cae | 93 | |
20effc67 | 94 | BOOST_WINAPI_IMPORT_EXCEPT_WM boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC |
b32b8144 FG |
95 | UnmapViewOfFile(boost::winapi::LPCVOID_ lpBaseAddress); |
96 | #endif // BOOST_WINAPI_PARTITION_APP || BOOST_WINAPI_PARTITION_SYSTEM | |
97 | ||
98 | } // extern "C" | |
99 | #endif // !defined( BOOST_USE_WINDOWS_H ) | |
7c673cae FG |
100 | |
101 | namespace boost { | |
7c673cae FG |
102 | namespace winapi { |
103 | ||
104 | #if defined( BOOST_USE_WINDOWS_H ) | |
105 | ||
92f5a8d4 TL |
106 | BOOST_CONSTEXPR_OR_CONST DWORD_ SEC_FILE_ = SEC_FILE; |
107 | BOOST_CONSTEXPR_OR_CONST DWORD_ SEC_IMAGE_ = SEC_IMAGE; | |
108 | BOOST_CONSTEXPR_OR_CONST DWORD_ SEC_RESERVE_ = SEC_RESERVE; | |
109 | BOOST_CONSTEXPR_OR_CONST DWORD_ SEC_COMMIT_ = SEC_COMMIT; | |
110 | BOOST_CONSTEXPR_OR_CONST DWORD_ SEC_NOCACHE_ = SEC_NOCACHE; | |
7c673cae FG |
111 | |
112 | // These permission flags are undocumented and some of them are equivalent to the FILE_MAP_* flags. | |
113 | // SECTION_QUERY enables NtQuerySection. | |
114 | // http://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FNT%20Objects%2FSection%2FNtQuerySection.html | |
92f5a8d4 TL |
115 | BOOST_CONSTEXPR_OR_CONST DWORD_ SECTION_QUERY_ = SECTION_QUERY; |
116 | BOOST_CONSTEXPR_OR_CONST DWORD_ SECTION_MAP_WRITE_ = SECTION_MAP_WRITE; | |
117 | BOOST_CONSTEXPR_OR_CONST DWORD_ SECTION_MAP_READ_ = SECTION_MAP_READ; | |
118 | BOOST_CONSTEXPR_OR_CONST DWORD_ SECTION_MAP_EXECUTE_ = SECTION_MAP_EXECUTE; | |
119 | BOOST_CONSTEXPR_OR_CONST DWORD_ SECTION_EXTEND_SIZE_ = SECTION_EXTEND_SIZE; | |
120 | BOOST_CONSTEXPR_OR_CONST DWORD_ SECTION_ALL_ACCESS_ = SECTION_ALL_ACCESS; | |
121 | ||
122 | BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_MAP_COPY_ = FILE_MAP_COPY; | |
123 | BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_MAP_WRITE_ = FILE_MAP_WRITE; | |
124 | BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_MAP_READ_ = FILE_MAP_READ; | |
125 | BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_MAP_ALL_ACCESS_ = FILE_MAP_ALL_ACCESS; | |
7c673cae FG |
126 | |
127 | #else // defined( BOOST_USE_WINDOWS_H ) | |
128 | ||
92f5a8d4 TL |
129 | BOOST_CONSTEXPR_OR_CONST DWORD_ SEC_FILE_ = 0x800000; |
130 | BOOST_CONSTEXPR_OR_CONST DWORD_ SEC_IMAGE_ = 0x1000000; | |
131 | BOOST_CONSTEXPR_OR_CONST DWORD_ SEC_RESERVE_ = 0x4000000; | |
132 | BOOST_CONSTEXPR_OR_CONST DWORD_ SEC_COMMIT_ = 0x8000000; | |
133 | BOOST_CONSTEXPR_OR_CONST DWORD_ SEC_NOCACHE_ = 0x10000000; | |
7c673cae FG |
134 | |
135 | // These permission flags are undocumented and some of them are equivalent to the FILE_MAP_* flags. | |
136 | // SECTION_QUERY enables NtQuerySection. | |
137 | // http://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FNT%20Objects%2FSection%2FNtQuerySection.html | |
92f5a8d4 TL |
138 | BOOST_CONSTEXPR_OR_CONST DWORD_ SECTION_QUERY_ = 0x00000001; |
139 | BOOST_CONSTEXPR_OR_CONST DWORD_ SECTION_MAP_WRITE_ = 0x00000002; | |
140 | BOOST_CONSTEXPR_OR_CONST DWORD_ SECTION_MAP_READ_ = 0x00000004; | |
141 | BOOST_CONSTEXPR_OR_CONST DWORD_ SECTION_MAP_EXECUTE_ = 0x00000008; | |
142 | BOOST_CONSTEXPR_OR_CONST DWORD_ SECTION_EXTEND_SIZE_ = 0x00000010; | |
143 | BOOST_CONSTEXPR_OR_CONST DWORD_ SECTION_ALL_ACCESS_ = 0x000F001F; // STANDARD_RIGHTS_REQUIRED | SECTION_* | |
144 | ||
145 | BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_MAP_COPY_ = SECTION_QUERY_; | |
146 | BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_MAP_WRITE_ = SECTION_MAP_WRITE_; | |
147 | BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_MAP_READ_ = SECTION_MAP_READ_; | |
148 | BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_MAP_ALL_ACCESS_ = SECTION_ALL_ACCESS_; | |
7c673cae FG |
149 | |
150 | #endif // defined( BOOST_USE_WINDOWS_H ) | |
151 | ||
152 | // These constants are not defined in Windows SDK up until the one shipped with MSVC 8 and MinGW (as of 2016-02-14) | |
92f5a8d4 TL |
153 | BOOST_CONSTEXPR_OR_CONST DWORD_ SECTION_MAP_EXECUTE_EXPLICIT_ = 0x00000020; // not included in SECTION_ALL_ACCESS |
154 | BOOST_CONSTEXPR_OR_CONST DWORD_ FILE_MAP_EXECUTE_ = SECTION_MAP_EXECUTE_EXPLICIT_; // not included in FILE_MAP_ALL_ACCESS | |
7c673cae FG |
155 | |
156 | // These constants are not defined in Windows SDK up until 6.0A and MinGW (as of 2016-02-14) | |
92f5a8d4 TL |
157 | BOOST_CONSTEXPR_OR_CONST DWORD_ SEC_PROTECTED_IMAGE_ = 0x2000000; |
158 | BOOST_CONSTEXPR_OR_CONST DWORD_ SEC_WRITECOMBINE_ = 0x40000000; | |
159 | BOOST_CONSTEXPR_OR_CONST DWORD_ SEC_LARGE_PAGES_ = 0x80000000; | |
160 | BOOST_CONSTEXPR_OR_CONST DWORD_ SEC_IMAGE_NO_EXECUTE_ = (SEC_IMAGE_ | SEC_NOCACHE_); | |
7c673cae | 161 | |
b32b8144 | 162 | #if BOOST_WINAPI_PARTITION_DESKTOP |
7c673cae FG |
163 | #if !defined( BOOST_NO_ANSI_APIS ) |
164 | BOOST_FORCEINLINE HANDLE_ CreateFileMappingA( | |
165 | HANDLE_ hFile, | |
166 | SECURITY_ATTRIBUTES_* lpFileMappingAttributes, | |
167 | DWORD_ flProtect, | |
168 | DWORD_ dwMaximumSizeHigh, | |
169 | DWORD_ dwMaximumSizeLow, | |
170 | LPCSTR_ lpName) | |
171 | { | |
172 | return ::CreateFileMappingA( | |
173 | hFile, | |
174 | reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpFileMappingAttributes), | |
175 | flProtect, | |
176 | dwMaximumSizeHigh, | |
177 | dwMaximumSizeLow, | |
178 | lpName); | |
179 | } | |
7c673cae | 180 | |
b32b8144 | 181 | BOOST_FORCEINLINE HANDLE_ create_file_mapping( |
7c673cae FG |
182 | HANDLE_ hFile, |
183 | SECURITY_ATTRIBUTES_* lpFileMappingAttributes, | |
184 | DWORD_ flProtect, | |
185 | DWORD_ dwMaximumSizeHigh, | |
186 | DWORD_ dwMaximumSizeLow, | |
b32b8144 | 187 | LPCSTR_ lpName) |
7c673cae | 188 | { |
b32b8144 | 189 | return ::CreateFileMappingA( |
7c673cae FG |
190 | hFile, |
191 | reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpFileMappingAttributes), | |
192 | flProtect, | |
193 | dwMaximumSizeHigh, | |
194 | dwMaximumSizeLow, | |
195 | lpName); | |
196 | } | |
197 | ||
b32b8144 FG |
198 | using ::OpenFileMappingA; |
199 | ||
200 | BOOST_FORCEINLINE HANDLE_ open_file_mapping(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCSTR_ lpName) | |
201 | { | |
202 | return ::OpenFileMappingA(dwDesiredAccess, bInheritHandle, lpName); | |
203 | } | |
204 | #endif | |
205 | #endif // BOOST_WINAPI_PARTITION_DESKTOP | |
206 | ||
207 | #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM | |
208 | BOOST_FORCEINLINE HANDLE_ CreateFileMappingW( | |
7c673cae FG |
209 | HANDLE_ hFile, |
210 | SECURITY_ATTRIBUTES_* lpFileMappingAttributes, | |
211 | DWORD_ flProtect, | |
212 | DWORD_ dwMaximumSizeHigh, | |
213 | DWORD_ dwMaximumSizeLow, | |
b32b8144 | 214 | LPCWSTR_ lpName) |
7c673cae | 215 | { |
b32b8144 | 216 | return ::CreateFileMappingW( |
7c673cae FG |
217 | hFile, |
218 | reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpFileMappingAttributes), | |
219 | flProtect, | |
220 | dwMaximumSizeHigh, | |
221 | dwMaximumSizeLow, | |
222 | lpName); | |
223 | } | |
224 | ||
7c673cae FG |
225 | BOOST_FORCEINLINE HANDLE_ create_file_mapping( |
226 | HANDLE_ hFile, | |
227 | SECURITY_ATTRIBUTES_* lpFileMappingAttributes, | |
228 | DWORD_ flProtect, | |
229 | DWORD_ dwMaximumSizeHigh, | |
230 | DWORD_ dwMaximumSizeLow, | |
231 | LPCWSTR_ lpName) | |
232 | { | |
233 | return ::CreateFileMappingW( | |
234 | hFile, | |
235 | reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpFileMappingAttributes), | |
236 | flProtect, | |
237 | dwMaximumSizeHigh, | |
238 | dwMaximumSizeLow, | |
239 | lpName); | |
240 | } | |
241 | ||
b32b8144 FG |
242 | using ::MapViewOfFile; |
243 | using ::MapViewOfFileEx; | |
244 | using ::OpenFileMappingW; | |
245 | ||
7c673cae FG |
246 | BOOST_FORCEINLINE HANDLE_ open_file_mapping(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCWSTR_ lpName) |
247 | { | |
248 | return ::OpenFileMappingW(dwDesiredAccess, bInheritHandle, lpName); | |
249 | } | |
b32b8144 FG |
250 | #endif // BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM |
251 | ||
252 | #if BOOST_WINAPI_PARTITION_APP || BOOST_WINAPI_PARTITION_SYSTEM | |
253 | using ::FlushViewOfFile; | |
254 | using ::UnmapViewOfFile; | |
255 | #endif // BOOST_WINAPI_PARTITION_APP || BOOST_WINAPI_PARTITION_SYSTEM | |
7c673cae | 256 | |
7c673cae FG |
257 | } |
258 | } | |
259 | ||
20effc67 TL |
260 | #include <boost/winapi/detail/footer.hpp> |
261 | ||
b32b8144 | 262 | #endif // BOOST_WINAPI_FILE_MAPPING_HPP_INCLUDED_ |