github.com/searKing/golang/go@v1.2.74/os/signal/cgo/include/boost/winapi/dll.hpp (about) 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_