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