summaryrefslogtreecommitdiff
path: root/boost/winapi/file_mapping.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/winapi/file_mapping.hpp')
-rw-r--r--boost/winapi/file_mapping.hpp259
1 files changed, 259 insertions, 0 deletions
diff --git a/boost/winapi/file_mapping.hpp b/boost/winapi/file_mapping.hpp
new file mode 100644
index 0000000000..716529ad15
--- /dev/null
+++ b/boost/winapi/file_mapping.hpp
@@ -0,0 +1,259 @@
+/*
+ * Copyright 2010 Vicente J. Botet Escriba
+ * Copyright 2015 Andrey Semashev
+ * Copyright 2016 Jorge Lodos
+ * Copyright 2017 James E. King, III
+ *
+ * Distributed under the Boost Software License, Version 1.0.
+ * See http://www.boost.org/LICENSE_1_0.txt
+ */
+
+#ifndef BOOST_WINAPI_FILE_MAPPING_HPP_INCLUDED_
+#define BOOST_WINAPI_FILE_MAPPING_HPP_INCLUDED_
+
+#include <boost/winapi/basic_types.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+/*
+ * UWP:
+ * API SDK 8 SDK 10
+ * CreateFileMapping DESKTOP - DESKTOP | SYSTEM
+ * FlushViewOfFile APP - APP | SYSTEM
+ * MapViewOfFile DESKTOP - DESKTOP | SYSTEM
+ * MapViewOfFileEx DESKTOP - DESKTOP | SYSTEM
+ * OpenFileMapping DESKTOP - DESKTOP | SYSTEM
+ * UnmapViewOfFile APP - APP | SYSTEM
+ */
+
+#if !defined( BOOST_USE_WINDOWS_H )
+extern "C" {
+
+#if BOOST_WINAPI_PARTITION_DESKTOP
+#if !defined( BOOST_NO_ANSI_APIS )
+BOOST_SYMBOL_IMPORT boost::winapi::HANDLE_ WINAPI
+CreateFileMappingA(
+ boost::winapi::HANDLE_ hFile,
+ ::_SECURITY_ATTRIBUTES* lpFileMappingAttributes,
+ boost::winapi::DWORD_ flProtect,
+ boost::winapi::DWORD_ dwMaximumSizeHigh,
+ boost::winapi::DWORD_ dwMaximumSizeLow,
+ boost::winapi::LPCSTR_ lpName);
+
+BOOST_SYMBOL_IMPORT boost::winapi::HANDLE_ WINAPI
+OpenFileMappingA(
+ boost::winapi::DWORD_ dwDesiredAccess,
+ boost::winapi::BOOL_ bInheritHandle,
+ boost::winapi::LPCSTR_ lpName);
+#endif // !defined( BOOST_NO_ANSI_APIS )
+#endif // BOOST_WINAPI_PARTITION_DESKTOP
+
+#if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
+BOOST_SYMBOL_IMPORT boost::winapi::HANDLE_ WINAPI
+CreateFileMappingW(
+ boost::winapi::HANDLE_ hFile,
+ ::_SECURITY_ATTRIBUTES* lpFileMappingAttributes,
+ boost::winapi::DWORD_ flProtect,
+ boost::winapi::DWORD_ dwMaximumSizeHigh,
+ boost::winapi::DWORD_ dwMaximumSizeLow,
+ boost::winapi::LPCWSTR_ lpName);
+
+BOOST_SYMBOL_IMPORT boost::winapi::LPVOID_ WINAPI
+MapViewOfFile(
+ boost::winapi::HANDLE_ hFileMappingObject,
+ boost::winapi::DWORD_ dwDesiredAccess,
+ boost::winapi::DWORD_ dwFileOffsetHigh,
+ boost::winapi::DWORD_ dwFileOffsetLow,
+ boost::winapi::SIZE_T_ dwNumberOfBytesToMap);
+
+BOOST_SYMBOL_IMPORT boost::winapi::LPVOID_ WINAPI
+MapViewOfFileEx(
+ boost::winapi::HANDLE_ hFileMappingObject,
+ boost::winapi::DWORD_ dwDesiredAccess,
+ boost::winapi::DWORD_ dwFileOffsetHigh,
+ boost::winapi::DWORD_ dwFileOffsetLow,
+ boost::winapi::SIZE_T_ dwNumberOfBytesToMap,
+ boost::winapi::LPVOID_ lpBaseAddress);
+
+BOOST_SYMBOL_IMPORT boost::winapi::HANDLE_ WINAPI
+OpenFileMappingW(
+ boost::winapi::DWORD_ dwDesiredAccess,
+ boost::winapi::BOOL_ bInheritHandle,
+ boost::winapi::LPCWSTR_ lpName);
+#endif // BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
+
+#if BOOST_WINAPI_PARTITION_APP || BOOST_WINAPI_PARTITION_SYSTEM
+BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI
+FlushViewOfFile(
+ boost::winapi::LPCVOID_ lpBaseAddress,
+ boost::winapi::SIZE_T_ dwNumberOfBytesToFlush);
+
+BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ WINAPI
+UnmapViewOfFile(boost::winapi::LPCVOID_ lpBaseAddress);
+#endif // BOOST_WINAPI_PARTITION_APP || BOOST_WINAPI_PARTITION_SYSTEM
+
+} // extern "C"
+#endif // !defined( BOOST_USE_WINDOWS_H )
+
+namespace boost {
+namespace winapi {
+
+#if defined( BOOST_USE_WINDOWS_H )
+
+const DWORD_ SEC_FILE_ = SEC_FILE;
+const DWORD_ SEC_IMAGE_ = SEC_IMAGE;
+const DWORD_ SEC_RESERVE_ = SEC_RESERVE;
+const DWORD_ SEC_COMMIT_ = SEC_COMMIT;
+const DWORD_ SEC_NOCACHE_ = SEC_NOCACHE;
+
+// These permission flags are undocumented and some of them are equivalent to the FILE_MAP_* flags.
+// SECTION_QUERY enables NtQuerySection.
+// http://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FNT%20Objects%2FSection%2FNtQuerySection.html
+const DWORD_ SECTION_QUERY_ = SECTION_QUERY;
+const DWORD_ SECTION_MAP_WRITE_ = SECTION_MAP_WRITE;
+const DWORD_ SECTION_MAP_READ_ = SECTION_MAP_READ;
+const DWORD_ SECTION_MAP_EXECUTE_ = SECTION_MAP_EXECUTE;
+const DWORD_ SECTION_EXTEND_SIZE_ = SECTION_EXTEND_SIZE;
+const DWORD_ SECTION_ALL_ACCESS_ = SECTION_ALL_ACCESS;
+
+const DWORD_ FILE_MAP_COPY_ = FILE_MAP_COPY;
+const DWORD_ FILE_MAP_WRITE_ = FILE_MAP_WRITE;
+const DWORD_ FILE_MAP_READ_ = FILE_MAP_READ;
+const DWORD_ FILE_MAP_ALL_ACCESS_ = FILE_MAP_ALL_ACCESS;
+
+#else // defined( BOOST_USE_WINDOWS_H )
+
+const DWORD_ SEC_FILE_ = 0x800000;
+const DWORD_ SEC_IMAGE_ = 0x1000000;
+const DWORD_ SEC_RESERVE_ = 0x4000000;
+const DWORD_ SEC_COMMIT_ = 0x8000000;
+const DWORD_ SEC_NOCACHE_ = 0x10000000;
+
+// These permission flags are undocumented and some of them are equivalent to the FILE_MAP_* flags.
+// SECTION_QUERY enables NtQuerySection.
+// http://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FNT%20Objects%2FSection%2FNtQuerySection.html
+const DWORD_ SECTION_QUERY_ = 0x00000001;
+const DWORD_ SECTION_MAP_WRITE_ = 0x00000002;
+const DWORD_ SECTION_MAP_READ_ = 0x00000004;
+const DWORD_ SECTION_MAP_EXECUTE_ = 0x00000008;
+const DWORD_ SECTION_EXTEND_SIZE_ = 0x00000010;
+const DWORD_ SECTION_ALL_ACCESS_ = 0x000F001F; // STANDARD_RIGHTS_REQUIRED | SECTION_*
+
+const DWORD_ FILE_MAP_COPY_ = SECTION_QUERY_;
+const DWORD_ FILE_MAP_WRITE_ = SECTION_MAP_WRITE_;
+const DWORD_ FILE_MAP_READ_ = SECTION_MAP_READ_;
+const DWORD_ FILE_MAP_ALL_ACCESS_ = SECTION_ALL_ACCESS_;
+
+#endif // defined( BOOST_USE_WINDOWS_H )
+
+// These constants are not defined in Windows SDK up until the one shipped with MSVC 8 and MinGW (as of 2016-02-14)
+const DWORD_ SECTION_MAP_EXECUTE_EXPLICIT_ = 0x00000020; // not included in SECTION_ALL_ACCESS
+const DWORD_ FILE_MAP_EXECUTE_ = SECTION_MAP_EXECUTE_EXPLICIT_; // not included in FILE_MAP_ALL_ACCESS
+
+// These constants are not defined in Windows SDK up until 6.0A and MinGW (as of 2016-02-14)
+const DWORD_ SEC_PROTECTED_IMAGE_ = 0x2000000;
+const DWORD_ SEC_WRITECOMBINE_ = 0x40000000;
+const DWORD_ SEC_LARGE_PAGES_ = 0x80000000;
+const DWORD_ SEC_IMAGE_NO_EXECUTE_ = (SEC_IMAGE_ | SEC_NOCACHE_);
+
+#if BOOST_WINAPI_PARTITION_DESKTOP
+#if !defined( BOOST_NO_ANSI_APIS )
+BOOST_FORCEINLINE HANDLE_ CreateFileMappingA(
+ HANDLE_ hFile,
+ SECURITY_ATTRIBUTES_* lpFileMappingAttributes,
+ DWORD_ flProtect,
+ DWORD_ dwMaximumSizeHigh,
+ DWORD_ dwMaximumSizeLow,
+ LPCSTR_ lpName)
+{
+ return ::CreateFileMappingA(
+ hFile,
+ reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpFileMappingAttributes),
+ flProtect,
+ dwMaximumSizeHigh,
+ dwMaximumSizeLow,
+ lpName);
+}
+
+BOOST_FORCEINLINE HANDLE_ create_file_mapping(
+ HANDLE_ hFile,
+ SECURITY_ATTRIBUTES_* lpFileMappingAttributes,
+ DWORD_ flProtect,
+ DWORD_ dwMaximumSizeHigh,
+ DWORD_ dwMaximumSizeLow,
+ LPCSTR_ lpName)
+{
+ return ::CreateFileMappingA(
+ hFile,
+ reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpFileMappingAttributes),
+ flProtect,
+ dwMaximumSizeHigh,
+ dwMaximumSizeLow,
+ lpName);
+}
+
+using ::OpenFileMappingA;
+
+BOOST_FORCEINLINE HANDLE_ open_file_mapping(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCSTR_ lpName)
+{
+ return ::OpenFileMappingA(dwDesiredAccess, bInheritHandle, lpName);
+}
+#endif
+#endif // BOOST_WINAPI_PARTITION_DESKTOP
+
+#if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
+BOOST_FORCEINLINE HANDLE_ CreateFileMappingW(
+ HANDLE_ hFile,
+ SECURITY_ATTRIBUTES_* lpFileMappingAttributes,
+ DWORD_ flProtect,
+ DWORD_ dwMaximumSizeHigh,
+ DWORD_ dwMaximumSizeLow,
+ LPCWSTR_ lpName)
+{
+ return ::CreateFileMappingW(
+ hFile,
+ reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpFileMappingAttributes),
+ flProtect,
+ dwMaximumSizeHigh,
+ dwMaximumSizeLow,
+ lpName);
+}
+
+BOOST_FORCEINLINE HANDLE_ create_file_mapping(
+ HANDLE_ hFile,
+ SECURITY_ATTRIBUTES_* lpFileMappingAttributes,
+ DWORD_ flProtect,
+ DWORD_ dwMaximumSizeHigh,
+ DWORD_ dwMaximumSizeLow,
+ LPCWSTR_ lpName)
+{
+ return ::CreateFileMappingW(
+ hFile,
+ reinterpret_cast< ::_SECURITY_ATTRIBUTES* >(lpFileMappingAttributes),
+ flProtect,
+ dwMaximumSizeHigh,
+ dwMaximumSizeLow,
+ lpName);
+}
+
+using ::MapViewOfFile;
+using ::MapViewOfFileEx;
+using ::OpenFileMappingW;
+
+BOOST_FORCEINLINE HANDLE_ open_file_mapping(DWORD_ dwDesiredAccess, BOOL_ bInheritHandle, LPCWSTR_ lpName)
+{
+ return ::OpenFileMappingW(dwDesiredAccess, bInheritHandle, lpName);
+}
+#endif // BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
+
+#if BOOST_WINAPI_PARTITION_APP || BOOST_WINAPI_PARTITION_SYSTEM
+using ::FlushViewOfFile;
+using ::UnmapViewOfFile;
+#endif // BOOST_WINAPI_PARTITION_APP || BOOST_WINAPI_PARTITION_SYSTEM
+
+}
+}
+
+#endif // BOOST_WINAPI_FILE_MAPPING_HPP_INCLUDED_