2 * Copyright 2010 Vicente J. Botet Escriba
3 * Copyright 2015 Andrey Semashev
4 * Copyright 2016 Jorge Lodos
5 * Copyright 2017 James E. King, III
7 * Distributed under the Boost Software License, Version 1.0.
8 * See http://www.boost.org/LICENSE_1_0.txt
11 #ifndef BOOST_WINAPI_FILE_MAPPING_HPP_INCLUDED_
12 #define BOOST_WINAPI_FILE_MAPPING_HPP_INCLUDED_
14 #include <boost/winapi/basic_types.hpp>
16 #ifdef BOOST_HAS_PRAGMA_ONCE
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
31 #if !defined( BOOST_USE_WINDOWS_H )
34 #if BOOST_WINAPI_PARTITION_DESKTOP
35 #if !defined( BOOST_NO_ANSI_APIS )
36 BOOST_SYMBOL_IMPORT boost::winapi::HANDLE_ WINAPI
38 boost::winapi::HANDLE_ hFile,
39 ::_SECURITY_ATTRIBUTES* lpFileMappingAttributes,
40 boost::winapi::DWORD_ flProtect,
41 boost::winapi::DWORD_ dwMaximumSizeHigh,
42 boost::winapi::DWORD_ dwMaximumSizeLow,
43 boost::winapi::LPCSTR_ lpName);
45 BOOST_SYMBOL_IMPORT boost::winapi::HANDLE_ WINAPI
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
53 #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
54 BOOST_SYMBOL_IMPORT boost::winapi::HANDLE_ WINAPI
56 boost::winapi::HANDLE_ hFile,
57 ::_SECURITY_ATTRIBUTES* lpFileMappingAttributes,
58 boost::winapi::DWORD_ flProtect,
59 boost::winapi::DWORD_ dwMaximumSizeHigh,
60 boost::winapi::DWORD_ dwMaximumSizeLow,
61 boost::winapi::LPCWSTR_ lpName);
63 BOOST_SYMBOL_IMPORT boost::winapi::LPVOID_ WINAPI
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);
71 BOOST_SYMBOL_IMPORT boost::winapi::LPVOID_ WINAPI
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);
80 BOOST_SYMBOL_IMPORT boost::winapi::HANDLE_ WINAPI
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
87 #if BOOST_WINAPI_PARTITION_APP || BOOST_WINAPI_PARTITION_SYSTEM
88 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI
90 boost::winapi::LPCVOID_ lpBaseAddress,
91 boost::winapi::SIZE_T_ dwNumberOfBytesToFlush);
93 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI
94 UnmapViewOfFile(boost::winapi::LPCVOID_ lpBaseAddress);
95 #endif // BOOST_WINAPI_PARTITION_APP || BOOST_WINAPI_PARTITION_SYSTEM
98 #endif // !defined( BOOST_USE_WINDOWS_H )
103 #if defined( BOOST_USE_WINDOWS_H )
105 const DWORD_ SEC_FILE_ = SEC_FILE;
106 const DWORD_ SEC_IMAGE_ = SEC_IMAGE;
107 const DWORD_ SEC_RESERVE_ = SEC_RESERVE;
108 const DWORD_ SEC_COMMIT_ = SEC_COMMIT;
109 const DWORD_ SEC_NOCACHE_ = SEC_NOCACHE;
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
114 const DWORD_ SECTION_QUERY_ = SECTION_QUERY;
115 const DWORD_ SECTION_MAP_WRITE_ = SECTION_MAP_WRITE;
116 const DWORD_ SECTION_MAP_READ_ = SECTION_MAP_READ;
117 const DWORD_ SECTION_MAP_EXECUTE_ = SECTION_MAP_EXECUTE;
118 const DWORD_ SECTION_EXTEND_SIZE_ = SECTION_EXTEND_SIZE;
119 const DWORD_ SECTION_ALL_ACCESS_ = SECTION_ALL_ACCESS;
121 const DWORD_ FILE_MAP_COPY_ = FILE_MAP_COPY;
122 const DWORD_ FILE_MAP_WRITE_ = FILE_MAP_WRITE;
123 const DWORD_ FILE_MAP_READ_ = FILE_MAP_READ;
124 const DWORD_ FILE_MAP_ALL_ACCESS_ = FILE_MAP_ALL_ACCESS;
126 #else // defined( BOOST_USE_WINDOWS_H )
128 const DWORD_ SEC_FILE_ = 0x800000;
129 const DWORD_ SEC_IMAGE_ = 0x1000000;
130 const DWORD_ SEC_RESERVE_ = 0x4000000;
131 const DWORD_ SEC_COMMIT_ = 0x8000000;
132 const DWORD_ SEC_NOCACHE_ = 0x10000000;
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
137 const DWORD_ SECTION_QUERY_ = 0x00000001;
138 const DWORD_ SECTION_MAP_WRITE_ = 0x00000002;
139 const DWORD_ SECTION_MAP_READ_ = 0x00000004;
140 const DWORD_ SECTION_MAP_EXECUTE_ = 0x00000008;
141 const DWORD_ SECTION_EXTEND_SIZE_ = 0x00000010;
142 const DWORD_ SECTION_ALL_ACCESS_ = 0x000F001F; // STANDARD_RIGHTS_REQUIRED | SECTION_*
144 const DWORD_ FILE_MAP_COPY_ = SECTION_QUERY_;
145 const DWORD_ FILE_MAP_WRITE_ = SECTION_MAP_WRITE_;
146 const DWORD_ FILE_MAP_READ_ = SECTION_MAP_READ_;
147 const DWORD_ FILE_MAP_ALL_ACCESS_ = SECTION_ALL_ACCESS_;
149 #endif // defined( BOOST_USE_WINDOWS_H )
151 // These constants are not defined in Windows SDK up until the one shipped with MSVC 8 and MinGW (as of 2016-02-14)
152 const DWORD_ SECTION_MAP_EXECUTE_EXPLICIT_ = 0x00000020; // not included in SECTION_ALL_ACCESS
153 const DWORD_ FILE_MAP_EXECUTE_ = SECTION_MAP_EXECUTE_EXPLICIT_; // not included in FILE_MAP_ALL_ACCESS
155 // These constants are not defined in Windows SDK up until 6.0A and MinGW (as of 2016-02-14)
156 const DWORD_ SEC_PROTECTED_IMAGE_ = 0x2000000;
157 const DWORD_ SEC_WRITECOMBINE_ = 0x40000000;
158 const DWORD_ SEC_LARGE_PAGES_ = 0x80000000;
159 const DWORD_ SEC_IMAGE_NO_EXECUTE_ = (SEC_IMAGE_ | SEC_NOCACHE_);
161 #if BOOST_WINAPI_PARTITION_DESKTOP
162 #if !defined( BOOST_NO_ANSI_APIS )
163 BOOST_FORCEINLINE HANDLE_ CreateFileMappingA(
165 SECURITY_ATTRIBUTES_* lpFileMappingAttributes,
167 DWORD_ dwMaximumSizeHigh,
168 DWORD_ dwMaximumSizeLow,
171 return ::CreateFileMappingA(
173 reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpFileMappingAttributes),
180 BOOST_FORCEINLINE HANDLE_ create_file_mapping(
182 SECURITY_ATTRIBUTES_* lpFileMappingAttributes,
184 DWORD_ dwMaximumSizeHigh,
185 DWORD_ dwMaximumSizeLow,
188 return ::CreateFileMappingA(
190 reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpFileMappingAttributes),
197 using ::OpenFileMappingA;
199 BOOST_FORCEINLINE HANDLE_ open_file_mapping(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCSTR_ lpName)
201 return ::OpenFileMappingA(dwDesiredAccess, bInheritHandle, lpName);
204 #endif // BOOST_WINAPI_PARTITION_DESKTOP
206 #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
207 BOOST_FORCEINLINE HANDLE_ CreateFileMappingW(
209 SECURITY_ATTRIBUTES_* lpFileMappingAttributes,
211 DWORD_ dwMaximumSizeHigh,
212 DWORD_ dwMaximumSizeLow,
215 return ::CreateFileMappingW(
217 reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpFileMappingAttributes),
224 BOOST_FORCEINLINE HANDLE_ create_file_mapping(
226 SECURITY_ATTRIBUTES_* lpFileMappingAttributes,
228 DWORD_ dwMaximumSizeHigh,
229 DWORD_ dwMaximumSizeLow,
232 return ::CreateFileMappingW(
234 reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpFileMappingAttributes),
241 using ::MapViewOfFile;
242 using ::MapViewOfFileEx;
243 using ::OpenFileMappingW;
245 BOOST_FORCEINLINE HANDLE_ open_file_mapping(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCWSTR_ lpName)
247 return ::OpenFileMappingW(dwDesiredAccess, bInheritHandle, lpName);
249 #endif // BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
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
259 #endif // BOOST_WINAPI_FILE_MAPPING_HPP_INCLUDED_