]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/winapi/dll.hpp
import new upstream nautilus stable release 14.2.8
[ceph.git] / ceph / src / boost / boost / winapi / dll.hpp
1 /*
2 * Copyright 2010 Vicente J. Botet Escriba
3 * Copyright 2014 Renato Tegon Forti, Antony Polukhin
4 * Copyright 2015 Andrey Semashev
5 * Copyright 2015 Antony Polukhin
6 *
7 * Distributed under the Boost Software License, Version 1.0.
8 * See http://www.boost.org/LICENSE_1_0.txt
9 */
10
11 #ifndef BOOST_WINAPI_DLL_HPP_INCLUDED_
12 #define BOOST_WINAPI_DLL_HPP_INCLUDED_
13
14 #include <boost/winapi/basic_types.hpp>
15
16 #ifdef BOOST_HAS_PRAGMA_ONCE
17 #pragma once
18 #endif
19
20 #if BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
21
22 #if !defined( BOOST_USE_WINDOWS_H )
23 extern "C" {
24 namespace boost { namespace winapi {
25 #ifdef _WIN64
26 typedef INT_PTR_ (BOOST_WINAPI_WINAPI_CC *FARPROC_)();
27 typedef INT_PTR_ (BOOST_WINAPI_WINAPI_CC *NEARPROC_)();
28 typedef INT_PTR_ (BOOST_WINAPI_WINAPI_CC *PROC_)();
29 #else
30 typedef int (BOOST_WINAPI_WINAPI_CC *FARPROC_)();
31 typedef int (BOOST_WINAPI_WINAPI_CC *NEARPROC_)();
32 typedef int (BOOST_WINAPI_WINAPI_CC *PROC_)();
33 #endif // _WIN64
34 }} // namespace boost::winapi
35
36 #if !defined( BOOST_NO_ANSI_APIS )
37 BOOST_SYMBOL_IMPORT boost::winapi::HMODULE_ BOOST_WINAPI_WINAPI_CC
38 LoadLibraryA(boost::winapi::LPCSTR_ lpFileName);
39
40 BOOST_SYMBOL_IMPORT boost::winapi::HMODULE_ BOOST_WINAPI_WINAPI_CC
41 LoadLibraryExA(
42 boost::winapi::LPCSTR_ lpFileName,
43 boost::winapi::HANDLE_ hFile,
44 boost::winapi::DWORD_ dwFlags
45 );
46
47 BOOST_SYMBOL_IMPORT boost::winapi::HMODULE_ BOOST_WINAPI_WINAPI_CC
48 GetModuleHandleA(boost::winapi::LPCSTR_ lpFileName);
49
50 BOOST_SYMBOL_IMPORT boost::winapi::DWORD_ BOOST_WINAPI_WINAPI_CC
51 GetModuleFileNameA(
52 boost::winapi::HMODULE_ hModule,
53 boost::winapi::LPSTR_ lpFilename,
54 boost::winapi::DWORD_ nSize
55 );
56 #endif
57
58 BOOST_SYMBOL_IMPORT boost::winapi::HMODULE_ BOOST_WINAPI_WINAPI_CC
59 LoadLibraryW(boost::winapi::LPCWSTR_ lpFileName);
60
61 BOOST_SYMBOL_IMPORT boost::winapi::HMODULE_ BOOST_WINAPI_WINAPI_CC
62 LoadLibraryExW(
63 boost::winapi::LPCWSTR_ lpFileName,
64 boost::winapi::HANDLE_ hFile,
65 boost::winapi::DWORD_ dwFlags
66 );
67
68 BOOST_SYMBOL_IMPORT boost::winapi::HMODULE_ BOOST_WINAPI_WINAPI_CC
69 GetModuleHandleW(boost::winapi::LPCWSTR_ lpFileName);
70
71 BOOST_SYMBOL_IMPORT boost::winapi::DWORD_ BOOST_WINAPI_WINAPI_CC
72 GetModuleFileNameW(
73 boost::winapi::HMODULE_ hModule,
74 boost::winapi::LPWSTR_ lpFilename,
75 boost::winapi::DWORD_ nSize
76 );
77
78 #if !defined( UNDER_CE )
79 BOOST_SYMBOL_IMPORT boost::winapi::FARPROC_ BOOST_WINAPI_WINAPI_CC
80 GetProcAddress(boost::winapi::HMODULE_ hModule, boost::winapi::LPCSTR_ lpProcName);
81 #else
82 // On Windows CE there are two functions: GetProcAddressA (since Windows CE 3.0) and GetProcAddressW.
83 // GetProcAddress is a macro that is _always_ defined to GetProcAddressW.
84 BOOST_SYMBOL_IMPORT boost::winapi::FARPROC_ BOOST_WINAPI_WINAPI_CC
85 GetProcAddressA(boost::winapi::HMODULE_ hModule, boost::winapi::LPCSTR_ lpProcName);
86 BOOST_SYMBOL_IMPORT boost::winapi::FARPROC_ BOOST_WINAPI_WINAPI_CC
87 GetProcAddressW(boost::winapi::HMODULE_ hModule, boost::winapi::LPCWSTR_ lpProcName);
88 #endif
89
90 struct _MEMORY_BASIC_INFORMATION;
91
92 #if !defined( BOOST_WINAPI_IS_MINGW )
93 BOOST_SYMBOL_IMPORT boost::winapi::SIZE_T_ BOOST_WINAPI_WINAPI_CC
94 VirtualQuery(
95 boost::winapi::LPCVOID_ lpAddress,
96 ::_MEMORY_BASIC_INFORMATION* lpBuffer,
97 boost::winapi::SIZE_T_ dwLength
98 );
99 #else // !defined( BOOST_WINAPI_IS_MINGW )
100 BOOST_SYMBOL_IMPORT boost::winapi::DWORD_ BOOST_WINAPI_WINAPI_CC
101 VirtualQuery(
102 boost::winapi::LPCVOID_ lpAddress,
103 ::_MEMORY_BASIC_INFORMATION* lpBuffer,
104 boost::winapi::DWORD_ dwLength
105 );
106 #endif // !defined( BOOST_WINAPI_IS_MINGW )
107 } // extern "C"
108 #endif // #if !defined( BOOST_USE_WINDOWS_H )
109
110 namespace boost {
111 namespace winapi {
112
113 typedef struct BOOST_MAY_ALIAS MEMORY_BASIC_INFORMATION_ {
114 PVOID_ BaseAddress;
115 PVOID_ AllocationBase;
116 DWORD_ AllocationProtect;
117 SIZE_T_ RegionSize;
118 DWORD_ State;
119 DWORD_ Protect;
120 DWORD_ Type;
121 } *PMEMORY_BASIC_INFORMATION_;
122
123 #if defined( BOOST_USE_WINDOWS_H )
124 typedef ::FARPROC FARPROC_;
125 typedef ::NEARPROC NEARPROC_;
126 typedef ::PROC PROC_;
127
128 BOOST_CONSTEXPR_OR_CONST DWORD_ DONT_RESOLVE_DLL_REFERENCES_ = DONT_RESOLVE_DLL_REFERENCES;
129 BOOST_CONSTEXPR_OR_CONST DWORD_ LOAD_WITH_ALTERED_SEARCH_PATH_ = LOAD_WITH_ALTERED_SEARCH_PATH;
130 #else // defined( BOOST_USE_WINDOWS_H )
131 BOOST_CONSTEXPR_OR_CONST DWORD_ DONT_RESOLVE_DLL_REFERENCES_ = 0x00000001;
132 BOOST_CONSTEXPR_OR_CONST DWORD_ LOAD_WITH_ALTERED_SEARCH_PATH_ = 0x00000008;
133 #endif // defined( BOOST_USE_WINDOWS_H )
134
135 // This one is not defined by MinGW
136 BOOST_CONSTEXPR_OR_CONST DWORD_ LOAD_IGNORE_CODE_AUTHZ_LEVEL_ = 0x00000010;
137
138 #if !defined( BOOST_NO_ANSI_APIS )
139 using ::LoadLibraryA;
140 using ::LoadLibraryExA;
141 using ::GetModuleHandleA;
142 using ::GetModuleFileNameA;
143 #endif // !defined( BOOST_NO_ANSI_APIS )
144 using ::LoadLibraryW;
145 using ::LoadLibraryExW;
146 using ::GetModuleHandleW;
147 using ::GetModuleFileNameW;
148
149 #if !defined( UNDER_CE )
150 // For backward compatibility, don't use directly. Use get_proc_address instead.
151 using ::GetProcAddress;
152 #else
153 using ::GetProcAddressA;
154 using ::GetProcAddressW;
155 #endif
156
157 BOOST_FORCEINLINE FARPROC_ get_proc_address(HMODULE_ hModule, LPCSTR_ lpProcName)
158 {
159 #if !defined( UNDER_CE )
160 return ::GetProcAddress(hModule, lpProcName);
161 #else
162 return ::GetProcAddressA(hModule, lpProcName);
163 #endif
164 }
165
166 BOOST_FORCEINLINE SIZE_T_ VirtualQuery(LPCVOID_ lpAddress, MEMORY_BASIC_INFORMATION_* lpBuffer, SIZE_T_ dwLength)
167 {
168 return ::VirtualQuery(lpAddress, reinterpret_cast< ::_MEMORY_BASIC_INFORMATION* >(lpBuffer), dwLength);
169 }
170
171 #if !defined( BOOST_NO_ANSI_APIS )
172 BOOST_FORCEINLINE HMODULE_ load_library(LPCSTR_ lpFileName)
173 {
174 return ::LoadLibraryA(lpFileName);
175 }
176
177 BOOST_FORCEINLINE HMODULE_ load_library_ex(LPCSTR_ lpFileName, HANDLE_ hFile, DWORD_ dwFlags)
178 {
179 return ::LoadLibraryExA(lpFileName, hFile, dwFlags);
180 }
181
182 BOOST_FORCEINLINE HMODULE_ get_module_handle(LPCSTR_ lpFileName)
183 {
184 return ::GetModuleHandleA(lpFileName);
185 }
186
187 BOOST_FORCEINLINE DWORD_ get_module_file_name(HMODULE_ hModule, LPSTR_ lpFilename, DWORD_ nSize)
188 {
189 return ::GetModuleFileNameA(hModule, lpFilename, nSize);
190 }
191 #endif // #if !defined( BOOST_NO_ANSI_APIS )
192
193 BOOST_FORCEINLINE HMODULE_ load_library(LPCWSTR_ lpFileName)
194 {
195 return ::LoadLibraryW(lpFileName);
196 }
197
198 BOOST_FORCEINLINE HMODULE_ load_library_ex(LPCWSTR_ lpFileName, HANDLE_ hFile, DWORD_ dwFlags)
199 {
200 return ::LoadLibraryExW(lpFileName, hFile, dwFlags);
201 }
202
203 BOOST_FORCEINLINE HMODULE_ get_module_handle(LPCWSTR_ lpFileName)
204 {
205 return ::GetModuleHandleW(lpFileName);
206 }
207
208 BOOST_FORCEINLINE DWORD_ get_module_file_name(HMODULE_ hModule, LPWSTR_ lpFilename, DWORD_ nSize)
209 {
210 return ::GetModuleFileNameW(hModule, lpFilename, nSize);
211 }
212
213 } // namespace winapi
214 } // namespace boost
215
216 #endif // BOOST_WINAPI_PARTITION_DESKTOP || BOOST_WINAPI_PARTITION_SYSTEM
217
218 //
219 // FreeLibrary is in a different partition set (slightly)
220 //
221
222 #if BOOST_WINAPI_PARTITION_APP || BOOST_WINAPI_PARTITION_SYSTEM
223
224 #if !defined(BOOST_USE_WINDOWS_H)
225 extern "C" {
226 BOOST_SYMBOL_IMPORT boost::winapi::BOOL_ BOOST_WINAPI_WINAPI_CC
227 FreeLibrary(boost::winapi::HMODULE_ hModule);
228 }
229 #endif
230
231 namespace boost {
232 namespace winapi {
233 using ::FreeLibrary;
234 }
235 }
236
237 #endif // BOOST_WINAPI_PARTITION_APP || BOOST_WINAPI_PARTITION_SYSTEM
238 #endif // BOOST_WINAPI_DLL_HPP_INCLUDED_