summaryrefslogtreecommitdiff
path: root/boost/detail/winapi/dll.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/detail/winapi/dll.hpp')
-rw-r--r--boost/detail/winapi/dll.hpp230
1 files changed, 170 insertions, 60 deletions
diff --git a/boost/detail/winapi/dll.hpp b/boost/detail/winapi/dll.hpp
index 2ec5a73bc9..5172f33880 100644
--- a/boost/detail/winapi/dll.hpp
+++ b/boost/detail/winapi/dll.hpp
@@ -1,6 +1,9 @@
// dll.hpp --------------------------------------------------------------//
// Copyright 2010 Vicente J. Botet Escriba
+// Copyright 2014 Renato Tegon Forti, Antony Polukhin
+// Copyright 2015 Andrey Semashev
+// Copyright 2015 Antony Polukhin
// Distributed under the Boost Software License, Version 1.0.
// See http://www.boost.org/LICENSE_1_0.txt
@@ -10,77 +13,184 @@
#define BOOST_DETAIL_WINAPI_DLL_HPP
#include <boost/detail/winapi/basic_types.hpp>
-#include <boost/detail/winapi/security.hpp>
#ifdef BOOST_HAS_PRAGMA_ONCE
#pragma once
#endif
-namespace boost
+#if !defined( BOOST_USE_WINDOWS_H )
+extern "C" {
+namespace boost { namespace detail { namespace winapi {
+#ifdef _WIN64
+typedef INT_PTR_ (WINAPI *FARPROC_)();
+typedef INT_PTR_ (WINAPI *NEARPROC_)();
+typedef INT_PTR_ (WINAPI *PROC_)();
+#else
+typedef int (WINAPI *FARPROC_)();
+typedef int (WINAPI *NEARPROC_)();
+typedef int (WINAPI *PROC_)();
+#endif // _WIN64
+}}} // namespace boost::detail::winapi
+
+#if !defined( BOOST_NO_ANSI_APIS )
+BOOST_SYMBOL_IMPORT boost::detail::winapi::HMODULE_ WINAPI
+LoadLibraryA(boost::detail::winapi::LPCSTR_ lpFileName);
+
+BOOST_SYMBOL_IMPORT boost::detail::winapi::HMODULE_ WINAPI
+LoadLibraryExA(
+ boost::detail::winapi::LPCSTR_ lpFileName,
+ boost::detail::winapi::HANDLE_ hFile,
+ boost::detail::winapi::DWORD_ dwFlags
+);
+
+BOOST_SYMBOL_IMPORT boost::detail::winapi::HMODULE_ WINAPI
+GetModuleHandleA(boost::detail::winapi::LPCSTR_ lpFileName);
+
+BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI
+GetModuleFileNameA(
+ boost::detail::winapi::HMODULE_ hModule,
+ boost::detail::winapi::LPSTR_ lpFilename,
+ boost::detail::winapi::DWORD_ nSize
+);
+#endif
+
+BOOST_SYMBOL_IMPORT boost::detail::winapi::HMODULE_ WINAPI
+LoadLibraryW(boost::detail::winapi::LPCWSTR_ lpFileName);
+
+BOOST_SYMBOL_IMPORT boost::detail::winapi::HMODULE_ WINAPI
+LoadLibraryExW(
+ boost::detail::winapi::LPCWSTR_ lpFileName,
+ boost::detail::winapi::HANDLE_ hFile,
+ boost::detail::winapi::DWORD_ dwFlags
+);
+
+BOOST_SYMBOL_IMPORT boost::detail::winapi::HMODULE_ WINAPI
+GetModuleHandleW(boost::detail::winapi::LPCWSTR_ lpFileName);
+
+BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI
+GetModuleFileNameW(
+ boost::detail::winapi::HMODULE_ hModule,
+ boost::detail::winapi::LPWSTR_ lpFilename,
+ boost::detail::winapi::DWORD_ nSize
+);
+
+BOOST_SYMBOL_IMPORT boost::detail::winapi::BOOL_ WINAPI
+FreeLibrary(boost::detail::winapi::HMODULE_ hModule);
+
+BOOST_SYMBOL_IMPORT boost::detail::winapi::FARPROC_ WINAPI
+GetProcAddress(boost::detail::winapi::HMODULE_ hModule, boost::detail::winapi::LPCSTR_ lpProcName);
+
+struct _MEMORY_BASIC_INFORMATION;
+
+#if !defined( BOOST_WINAPI_IS_MINGW )
+BOOST_SYMBOL_IMPORT boost::detail::winapi::SIZE_T_ WINAPI
+VirtualQuery(
+ boost::detail::winapi::LPCVOID_ lpAddress,
+ ::_MEMORY_BASIC_INFORMATION* lpBuffer,
+ boost::detail::winapi::ULONG_PTR_ dwLength
+);
+#else // !defined( BOOST_WINAPI_IS_MINGW )
+BOOST_SYMBOL_IMPORT boost::detail::winapi::DWORD_ WINAPI
+VirtualQuery(
+ boost::detail::winapi::LPCVOID_ lpAddress,
+ ::_MEMORY_BASIC_INFORMATION* lpBuffer,
+ boost::detail::winapi::DWORD_ dwLength
+);
+#endif // !defined( BOOST_WINAPI_IS_MINGW )
+} // extern "C"
+#endif // #if !defined( BOOST_USE_WINDOWS_H )
+
+namespace boost {
+namespace detail {
+namespace winapi {
+
+typedef struct BOOST_DETAIL_WINAPI_MAY_ALIAS MEMORY_BASIC_INFORMATION_ {
+ PVOID_ BaseAddress;
+ PVOID_ AllocationBase;
+ DWORD_ AllocationProtect;
+ SIZE_T_ RegionSize;
+ DWORD_ State;
+ DWORD_ Protect;
+ DWORD_ Type;
+} *PMEMORY_BASIC_INFORMATION_;
+
+#if defined( BOOST_USE_WINDOWS_H )
+typedef ::FARPROC FARPROC_;
+typedef ::NEARPROC NEARPROC_;
+typedef ::PROC PROC_;
+
+const DWORD_ DONT_RESOLVE_DLL_REFERENCES_ = DONT_RESOLVE_DLL_REFERENCES;
+const DWORD_ LOAD_WITH_ALTERED_SEARCH_PATH_ = LOAD_WITH_ALTERED_SEARCH_PATH;
+#else // defined( BOOST_USE_WINDOWS_H )
+const DWORD_ DONT_RESOLVE_DLL_REFERENCES_ = 0x00000001;
+const DWORD_ LOAD_WITH_ALTERED_SEARCH_PATH_ = 0x00000008;
+#endif // defined( BOOST_USE_WINDOWS_H )
+
+// This one is not defined by MinGW
+const DWORD_ LOAD_IGNORE_CODE_AUTHZ_LEVEL_ = 0x00000010;
+
+#if !defined( BOOST_NO_ANSI_APIS )
+using ::LoadLibraryA;
+using ::LoadLibraryExA;
+using ::GetModuleHandleA;
+using ::GetModuleFileNameA;
+#endif // !defined( BOOST_NO_ANSI_APIS )
+using ::LoadLibraryW;
+using ::LoadLibraryExW;
+using ::GetModuleHandleW;
+using ::GetModuleFileNameW;
+using ::FreeLibrary;
+using ::GetProcAddress;
+
+BOOST_FORCEINLINE SIZE_T_ VirtualQuery(LPCVOID_ lpAddress, MEMORY_BASIC_INFORMATION_* lpBuffer, ULONG_PTR_ dwLength)
{
-namespace detail
+ return ::VirtualQuery(lpAddress, reinterpret_cast< ::_MEMORY_BASIC_INFORMATION* >(lpBuffer), dwLength);
+}
+
+#if !defined( BOOST_NO_ANSI_APIS )
+BOOST_FORCEINLINE HMODULE_ load_library(LPCSTR_ lpFileName)
{
-namespace winapi
+ return ::LoadLibraryA(lpFileName);
+}
+
+BOOST_FORCEINLINE HMODULE_ load_library_ex(LPCSTR_ lpFileName, HANDLE_ hFile, DWORD_ dwFlags)
{
-#if defined( BOOST_USE_WINDOWS_H )
- typedef ::FARPROC FARPROC_;
- typedef ::NEARPROC NEARPROC_;
- typedef ::PROC PROC_;
-
-# ifdef BOOST_NO_ANSI_APIS
- using ::LoadLibraryW;
- using ::GetModuleHandleW;
-# else
- using ::LoadLibraryA;
- using ::GetModuleHandleA;
-# endif
- using ::FreeLibrary;
- using ::GetProcAddress;
-#else
-extern "C" {
-# ifdef _WIN64
- typedef INT_PTR_ (WINAPI *FARPROC_)();
- typedef INT_PTR_ (WINAPI *NEARPROC_)();
- typedef INT_PTR_ (WINAPI *PROC_)();
-# else
- typedef int (WINAPI *FARPROC_)();
- typedef int (WINAPI *NEARPROC_)();
- typedef int (WINAPI *PROC_)();
-# endif // _WIN64
-
-# ifdef BOOST_NO_ANSI_APIS
- __declspec(dllimport) HMODULE_ WINAPI
- LoadLibraryW(
- LPCWSTR_ lpFileName
- );
- __declspec(dllimport) HMODULE_ WINAPI
- GetModuleHandleW(
- LPCWSTR_ lpFileName
- );
-# else
- __declspec(dllimport) HMODULE_ WINAPI
- LoadLibraryA(
- LPCSTR_ lpFileName
- );
- __declspec(dllimport) HMODULE_ WINAPI
- GetModuleHandleA(
- LPCSTR_ lpFileName
- );
-# endif
-
- __declspec(dllimport) BOOL_ WINAPI
- FreeLibrary(
- HMODULE_ hModule
- );
- __declspec(dllimport) FARPROC_ WINAPI
- GetProcAddress(
- HMODULE_ hModule,
- LPCSTR_ lpProcName
- );
+ return ::LoadLibraryExA(lpFileName, hFile, dwFlags);
}
-#endif
+
+BOOST_FORCEINLINE HMODULE_ get_module_handle(LPCSTR_ lpFileName)
+{
+ return ::GetModuleHandleA(lpFileName);
}
+
+BOOST_FORCEINLINE DWORD_ get_module_file_name(HMODULE_ hModule, LPSTR_ lpFilename, DWORD_ nSize)
+{
+ return ::GetModuleFileNameA(hModule, lpFilename, nSize);
}
+#endif // #if !defined( BOOST_NO_ANSI_APIS )
+
+BOOST_FORCEINLINE HMODULE_ load_library(LPCWSTR_ lpFileName)
+{
+ return ::LoadLibraryW(lpFileName);
+}
+
+BOOST_FORCEINLINE HMODULE_ load_library_ex(LPCWSTR_ lpFileName, HANDLE_ hFile, DWORD_ dwFlags)
+{
+ return ::LoadLibraryExW(lpFileName, hFile, dwFlags);
}
+BOOST_FORCEINLINE HMODULE_ get_module_handle(LPCWSTR_ lpFileName)
+{
+ return ::GetModuleHandleW(lpFileName);
+}
+
+BOOST_FORCEINLINE DWORD_ get_module_file_name(HMODULE_ hModule, LPWSTR_ lpFilename, DWORD_ nSize)
+{
+ return ::GetModuleFileNameW(hModule, lpFilename, nSize);
+}
+
+} // namespace winapi
+} // namespace detail
+} // namespace boost
+
#endif // BOOST_DETAIL_WINAPI_DLL_HPP